go fmt
This commit is contained in:
parent
ccc98b4298
commit
14afe8ff4d
608
cmd/app/main.go
608
cmd/app/main.go
@ -1,14 +1,14 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"strings"
|
||||
"net/http"
|
||||
"os"
|
||||
"strconv"
|
||||
"errors"
|
||||
"net/http"
|
||||
"os"
|
||||
"io"
|
||||
"strings"
|
||||
|
||||
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
||||
|
||||
@ -19,359 +19,359 @@ import (
|
||||
)
|
||||
|
||||
type User struct {
|
||||
gorm.Model
|
||||
ID int64
|
||||
State string
|
||||
MsgCounter uint
|
||||
RoleBitmask uint
|
||||
gorm.Model
|
||||
ID int64
|
||||
State string
|
||||
MsgCounter uint
|
||||
RoleBitmask uint
|
||||
}
|
||||
|
||||
func (u User) IsAdmin() bool {
|
||||
return u.RoleBitmask & 1 == 1
|
||||
return u.RoleBitmask&1 == 1
|
||||
}
|
||||
|
||||
func (u User) IsEffectiveAdmin() bool {
|
||||
return u.RoleBitmask & 0b10 == 0b10
|
||||
return u.RoleBitmask&0b10 == 0b10
|
||||
}
|
||||
|
||||
type BotContent struct {
|
||||
gorm.Model
|
||||
Literal string
|
||||
Content string
|
||||
gorm.Model
|
||||
Literal string
|
||||
Content string
|
||||
}
|
||||
|
||||
type BotController struct {
|
||||
cfg config.Config
|
||||
bot *tgbotapi.BotAPI
|
||||
db *gorm.DB
|
||||
updates tgbotapi.UpdatesChannel
|
||||
cfg config.Config
|
||||
bot *tgbotapi.BotAPI
|
||||
db *gorm.DB
|
||||
updates tgbotapi.UpdatesChannel
|
||||
}
|
||||
|
||||
func DBMigrate() (*gorm.DB, error) {
|
||||
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
|
||||
if err != nil {
|
||||
return db, err
|
||||
}
|
||||
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
|
||||
if err != nil {
|
||||
return db, err
|
||||
}
|
||||
|
||||
db.AutoMigrate(&User{})
|
||||
db.AutoMigrate(&BotContent{})
|
||||
db.AutoMigrate(&User{})
|
||||
db.AutoMigrate(&BotContent{})
|
||||
|
||||
return db, err
|
||||
return db, err
|
||||
}
|
||||
|
||||
func GetBotController() BotController {
|
||||
cfg := config.GetConfig()
|
||||
fmt.Printf("Token value: '%v'\n", cfg.BotToken)
|
||||
fmt.Printf("Admin password: '%v'\n", cfg.AdminPass)
|
||||
cfg := config.GetConfig()
|
||||
fmt.Printf("Token value: '%v'\n", cfg.BotToken)
|
||||
fmt.Printf("Admin password: '%v'\n", cfg.AdminPass)
|
||||
|
||||
bot, err := tgbotapi.NewBotAPI(cfg.BotToken)
|
||||
if err != nil {
|
||||
log.Panic(err)
|
||||
}
|
||||
bot, err := tgbotapi.NewBotAPI(cfg.BotToken)
|
||||
if err != nil {
|
||||
log.Panic(err)
|
||||
}
|
||||
|
||||
db, err := DBMigrate()
|
||||
if err != nil {
|
||||
log.Panic(err)
|
||||
}
|
||||
db, err := DBMigrate()
|
||||
if err != nil {
|
||||
log.Panic(err)
|
||||
}
|
||||
|
||||
bot.Debug = true
|
||||
bot.Debug = true
|
||||
|
||||
log.Printf("Authorized on account %s", bot.Self.UserName)
|
||||
log.Printf("Authorized on account %s", bot.Self.UserName)
|
||||
|
||||
u := tgbotapi.NewUpdate(0)
|
||||
u.Timeout = 60
|
||||
u := tgbotapi.NewUpdate(0)
|
||||
u.Timeout = 60
|
||||
|
||||
updates := bot.GetUpdatesChan(u)
|
||||
updates := bot.GetUpdatesChan(u)
|
||||
|
||||
return BotController{cfg: cfg, bot: bot, db: db, updates: updates}
|
||||
return BotController{cfg: cfg, bot: bot, db: db, updates: updates}
|
||||
}
|
||||
|
||||
func (bc BotController) GetBotContentVerbose(Literal string) (string, error) {
|
||||
var c BotContent
|
||||
bc.db.First(&c, "Literal", Literal)
|
||||
if c == (BotContent{}) {
|
||||
return "[Unitialized] Init in Admin panel! Literal: " + Literal, errors.New("No content")
|
||||
}
|
||||
return c.Content, nil
|
||||
var c BotContent
|
||||
bc.db.First(&c, "Literal", Literal)
|
||||
if c == (BotContent{}) {
|
||||
return "[Unitialized] Init in Admin panel! Literal: " + Literal, errors.New("No content")
|
||||
}
|
||||
return c.Content, nil
|
||||
}
|
||||
func (bc BotController) GetBotContent(Literal string) string {
|
||||
content, _ := bc.GetBotContentVerbose(Literal)
|
||||
return content
|
||||
content, _ := bc.GetBotContentVerbose(Literal)
|
||||
return content
|
||||
}
|
||||
func (bc BotController) SetBotContent(Literal string, Content string) {
|
||||
c := BotContent{Literal: Literal, Content: Content}
|
||||
bc.db.FirstOrCreate(&c, "Literal", Literal)
|
||||
bc.db.Model(&c).Update("Content", Content)
|
||||
c := BotContent{Literal: Literal, Content: Content}
|
||||
bc.db.FirstOrCreate(&c, "Literal", Literal)
|
||||
bc.db.Model(&c).Update("Content", Content)
|
||||
}
|
||||
|
||||
func main() {
|
||||
var bc = GetBotController()
|
||||
var bc = GetBotController()
|
||||
|
||||
for update := range bc.updates {
|
||||
go ProcessUpdate(bc, update)
|
||||
}
|
||||
for update := range bc.updates {
|
||||
go ProcessUpdate(bc, update)
|
||||
}
|
||||
}
|
||||
|
||||
func ProcessUpdate(bc BotController, update tgbotapi.Update) {
|
||||
|
||||
if update.Message != nil {
|
||||
var UserID = update.Message.From.ID
|
||||
if update.Message != nil {
|
||||
var UserID = update.Message.From.ID
|
||||
|
||||
var user User
|
||||
bc.db.First(&user, "id", UserID)
|
||||
if user == (User{}) {
|
||||
log.Printf("New user: [%d]", UserID)
|
||||
user = User{ID: UserID , State: "start"}
|
||||
bc.db.Create(&user)
|
||||
}
|
||||
var user User
|
||||
bc.db.First(&user, "id", UserID)
|
||||
if user == (User{}) {
|
||||
log.Printf("New user: [%d]", UserID)
|
||||
user = User{ID: UserID, State: "start"}
|
||||
bc.db.Create(&user)
|
||||
}
|
||||
|
||||
bc.db.Model(&user).Update("MsgCounter", user.MsgCounter + 1)
|
||||
log.Printf("User[%d] messages: %d", user.ID, user.MsgCounter)
|
||||
bc.db.Model(&user).Update("MsgCounter", user.MsgCounter+1)
|
||||
log.Printf("User[%d] messages: %d", user.ID, user.MsgCounter)
|
||||
|
||||
log.Printf("[%s] %s", update.Message.From.UserName, update.Message.Text)
|
||||
log.Printf("[%s] %s", update.Message.From.UserName, update.Message.Text)
|
||||
|
||||
possibleCommand := strings.Split(update.Message.Text, " ")[0]
|
||||
args := strings.Split(update.Message.Text, " ")[1:]
|
||||
log.Printf("Args: %s", args)
|
||||
possibleCommand := strings.Split(update.Message.Text, " ")[0]
|
||||
args := strings.Split(update.Message.Text, " ")[1:]
|
||||
log.Printf("Args: %s", args)
|
||||
|
||||
if possibleCommand == "/start" {
|
||||
bc.db.Model(&user).Update("state", "start")
|
||||
kbd := tgbotapi.NewInlineKeyboardMarkup(
|
||||
tgbotapi.NewInlineKeyboardRow(
|
||||
tgbotapi.NewInlineKeyboardButtonData(bc.GetBotContent("leave_ticket_button"), "leave_ticket_button"),
|
||||
),
|
||||
)
|
||||
if user.IsAdmin() {
|
||||
kbd = tgbotapi.NewInlineKeyboardMarkup(
|
||||
tgbotapi.NewInlineKeyboardRow(
|
||||
tgbotapi.NewInlineKeyboardButtonData(bc.GetBotContent("leave_ticket_button"), "leave_ticket_button"),
|
||||
),
|
||||
tgbotapi.NewInlineKeyboardRow(
|
||||
tgbotapi.NewInlineKeyboardButtonData("Panel", "panel"),
|
||||
),
|
||||
)
|
||||
}
|
||||
img, err := bc.GetBotContentVerbose("preview_image")
|
||||
if err != nil || img == "" {
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, bc.GetBotContent("start"))
|
||||
// msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Hello, [user](tg://user?id=958170391)")
|
||||
msg.ParseMode = "markdown"
|
||||
msg.ReplyMarkup = kbd
|
||||
bc.bot.Send(msg)
|
||||
} else {
|
||||
msg := tgbotapi.NewPhoto(update.Message.Chat.ID, tgbotapi.FileID(img))
|
||||
msg.Caption = bc.GetBotContent("start")
|
||||
msg.ReplyMarkup = kbd
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
if possibleCommand == "/start" {
|
||||
bc.db.Model(&user).Update("state", "start")
|
||||
kbd := tgbotapi.NewInlineKeyboardMarkup(
|
||||
tgbotapi.NewInlineKeyboardRow(
|
||||
tgbotapi.NewInlineKeyboardButtonData(bc.GetBotContent("leave_ticket_button"), "leave_ticket_button"),
|
||||
),
|
||||
)
|
||||
if user.IsAdmin() {
|
||||
kbd = tgbotapi.NewInlineKeyboardMarkup(
|
||||
tgbotapi.NewInlineKeyboardRow(
|
||||
tgbotapi.NewInlineKeyboardButtonData(bc.GetBotContent("leave_ticket_button"), "leave_ticket_button"),
|
||||
),
|
||||
tgbotapi.NewInlineKeyboardRow(
|
||||
tgbotapi.NewInlineKeyboardButtonData("Panel", "panel"),
|
||||
),
|
||||
)
|
||||
}
|
||||
img, err := bc.GetBotContentVerbose("preview_image")
|
||||
if err != nil || img == "" {
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, bc.GetBotContent("start"))
|
||||
// msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Hello, [user](tg://user?id=958170391)")
|
||||
msg.ParseMode = "markdown"
|
||||
msg.ReplyMarkup = kbd
|
||||
bc.bot.Send(msg)
|
||||
} else {
|
||||
msg := tgbotapi.NewPhoto(update.Message.Chat.ID, tgbotapi.FileID(img))
|
||||
msg.Caption = bc.GetBotContent("start")
|
||||
msg.ReplyMarkup = kbd
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
|
||||
} else if possibleCommand == "/id" && user.IsAdmin() {
|
||||
log.Printf("THERe")
|
||||
bc.bot.Send(tgbotapi.NewMessage(update.Message.Chat.ID, strconv.FormatInt(update.Message.Chat.ID, 10)))
|
||||
} else if possibleCommand == "/secret" && len(args) > 0 && args[0] == bc.cfg.AdminPass {
|
||||
bc.db.Model(&user).Update("state", "start")
|
||||
bc.db.Model(&user).Update("RoleBitmask", user.RoleBitmask | 0b11) // set real admin ID (0b1) and effective admin toggle (0b10)
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "You are admin now!")
|
||||
bc.bot.Send(msg)
|
||||
} else if possibleCommand == "/id" && user.IsAdmin() {
|
||||
log.Printf("THERe")
|
||||
bc.bot.Send(tgbotapi.NewMessage(update.Message.Chat.ID, strconv.FormatInt(update.Message.Chat.ID, 10)))
|
||||
} else if possibleCommand == "/secret" && len(args) > 0 && args[0] == bc.cfg.AdminPass {
|
||||
bc.db.Model(&user).Update("state", "start")
|
||||
bc.db.Model(&user).Update("RoleBitmask", user.RoleBitmask|0b11) // set real admin ID (0b1) and effective admin toggle (0b10)
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "You are admin now!")
|
||||
bc.bot.Send(msg)
|
||||
|
||||
} else if possibleCommand == "/panel" && user.IsAdmin() {
|
||||
if !user.IsEffectiveAdmin() {
|
||||
bc.db.Model(&user).Update("RoleBitmask", user.RoleBitmask | 0b10)
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "You was in usermode, turned back to admin mode...")
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
kbd := tgbotapi.NewInlineKeyboardMarkup(
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Стартовая картинка", "update:preview_image")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Приветственный текст", "update:start")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Кнопка для заявки", "update:leave_ticket_button")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("ID чата", "update:supportchatid")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("ID канала", "update:channelid")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Уведомление об отправке тикета", "update:sended_notify")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Просьба оставить тикет", "update:leaveticket_message")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Просьба подписаться на канал", "update:subscribe_message")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Ссылка на канал", "update:channel_link")),
|
||||
)
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Выберите пункт для изменения")
|
||||
msg.ReplyMarkup = kbd
|
||||
bc.bot.Send(msg)
|
||||
} else if possibleCommand == "/panel" && user.IsAdmin() {
|
||||
if !user.IsEffectiveAdmin() {
|
||||
bc.db.Model(&user).Update("RoleBitmask", user.RoleBitmask|0b10)
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "You was in usermode, turned back to admin mode...")
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
kbd := tgbotapi.NewInlineKeyboardMarkup(
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Стартовая картинка", "update:preview_image")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Приветственный текст", "update:start")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Кнопка для заявки", "update:leave_ticket_button")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("ID чата", "update:supportchatid")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("ID канала", "update:channelid")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Уведомление об отправке тикета", "update:sended_notify")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Просьба оставить тикет", "update:leaveticket_message")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Просьба подписаться на канал", "update:subscribe_message")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Ссылка на канал", "update:channel_link")),
|
||||
)
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Выберите пункт для изменения")
|
||||
msg.ReplyMarkup = kbd
|
||||
bc.bot.Send(msg)
|
||||
|
||||
} else if possibleCommand == "/usermode" && user.IsEffectiveAdmin() {
|
||||
bc.db.Model(&user).Update("RoleBitmask", user.RoleBitmask & (^uint(0b10)))
|
||||
log.Printf("Set role bitmask (%b) for user: %d", user.RoleBitmask, user.ID)
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Simulating user experience!")
|
||||
bc.bot.Send(msg)
|
||||
} else if user.IsEffectiveAdmin() && user.State != "leaveticket" {
|
||||
if user.State != "start" {
|
||||
if strings.HasPrefix(user.State, "imgset:") {
|
||||
Literal := strings.Split(user.State, ":")[1]
|
||||
if update.Message.Text == "unset" {
|
||||
var l BotContent
|
||||
bc.db.First(&l, "Literal", Literal)
|
||||
bc.SetBotContent(Literal, "")
|
||||
}
|
||||
maxsize := 0
|
||||
fileid := ""
|
||||
for _, p := range update.Message.Photo {
|
||||
if p.FileSize > maxsize {
|
||||
fileid = p.FileID
|
||||
maxsize = p.FileSize
|
||||
}
|
||||
}
|
||||
bc.SetBotContent(Literal, fileid)
|
||||
bc.db.Model(&user).Update("state", "start")
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Succesfully set new image!")
|
||||
bc.bot.Send(msg)
|
||||
} else if strings.HasPrefix(user.State, "stringset:") {
|
||||
Literal := strings.Split(user.State, ":")[1]
|
||||
bc.SetBotContent(Literal, update.Message.Text)
|
||||
bc.db.Model(&user).Update("state", "start")
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Succesfully set new text!")
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if user.State == "leaveticket" {
|
||||
f := update.Message.From
|
||||
ticket := fmt.Sprintf("User: %s %s\nUsername: %s\nText:\n",
|
||||
f.FirstName, f.LastName,
|
||||
f.UserName)
|
||||
// Offset := len(ticket)
|
||||
// Length := len(update.Message.Text)
|
||||
ticket += update.Message.Text
|
||||
chatidstr, err := bc.GetBotContentVerbose("supportchatid")
|
||||
if err != nil {
|
||||
var admins []User
|
||||
bc.db.Where("role_bitmask & 1 = ?", 1).Find(&admins)
|
||||
for _, admin := range admins {
|
||||
msg := tgbotapi.NewMessage(admin.ID, "Support ChatID is not set!!!")
|
||||
msg.Entities = []tgbotapi.MessageEntity{tgbotapi.MessageEntity{
|
||||
Type: "code",
|
||||
Offset: 1,
|
||||
Length: 2,
|
||||
}}
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
}
|
||||
chatid, _ := strconv.ParseInt(chatidstr, 10, 64)
|
||||
_, err = bc.bot.Send(tgbotapi.NewMessage(chatid, ticket))
|
||||
} else if possibleCommand == "/usermode" && user.IsEffectiveAdmin() {
|
||||
bc.db.Model(&user).Update("RoleBitmask", user.RoleBitmask&(^uint(0b10)))
|
||||
log.Printf("Set role bitmask (%b) for user: %d", user.RoleBitmask, user.ID)
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Simulating user experience!")
|
||||
bc.bot.Send(msg)
|
||||
} else if user.IsEffectiveAdmin() && user.State != "leaveticket" {
|
||||
if user.State != "start" {
|
||||
if strings.HasPrefix(user.State, "imgset:") {
|
||||
Literal := strings.Split(user.State, ":")[1]
|
||||
if update.Message.Text == "unset" {
|
||||
var l BotContent
|
||||
bc.db.First(&l, "Literal", Literal)
|
||||
bc.SetBotContent(Literal, "")
|
||||
}
|
||||
maxsize := 0
|
||||
fileid := ""
|
||||
for _, p := range update.Message.Photo {
|
||||
if p.FileSize > maxsize {
|
||||
fileid = p.FileID
|
||||
maxsize = p.FileSize
|
||||
}
|
||||
}
|
||||
bc.SetBotContent(Literal, fileid)
|
||||
bc.db.Model(&user).Update("state", "start")
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Succesfully set new image!")
|
||||
bc.bot.Send(msg)
|
||||
} else if strings.HasPrefix(user.State, "stringset:") {
|
||||
Literal := strings.Split(user.State, ":")[1]
|
||||
bc.SetBotContent(Literal, update.Message.Text)
|
||||
bc.db.Model(&user).Update("state", "start")
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Succesfully set new text!")
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if user.State == "leaveticket" {
|
||||
f := update.Message.From
|
||||
ticket := fmt.Sprintf("User: %s %s\nUsername: %s\nText:\n",
|
||||
f.FirstName, f.LastName,
|
||||
f.UserName)
|
||||
// Offset := len(ticket)
|
||||
// Length := len(update.Message.Text)
|
||||
ticket += update.Message.Text
|
||||
chatidstr, err := bc.GetBotContentVerbose("supportchatid")
|
||||
if err != nil {
|
||||
var admins []User
|
||||
bc.db.Where("role_bitmask & 1 = ?", 1).Find(&admins)
|
||||
for _, admin := range admins {
|
||||
msg := tgbotapi.NewMessage(admin.ID, "Support ChatID is not set!!!")
|
||||
msg.Entities = []tgbotapi.MessageEntity{tgbotapi.MessageEntity{
|
||||
Type: "code",
|
||||
Offset: 1,
|
||||
Length: 2,
|
||||
}}
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
}
|
||||
chatid, _ := strconv.ParseInt(chatidstr, 10, 64)
|
||||
_, err = bc.bot.Send(tgbotapi.NewMessage(chatid, ticket))
|
||||
|
||||
if err != nil {
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Something went wrong, try again...")
|
||||
bc.bot.Send(msg)
|
||||
return
|
||||
}
|
||||
if err != nil {
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Something went wrong, try again...")
|
||||
bc.bot.Send(msg)
|
||||
return
|
||||
}
|
||||
|
||||
bc.db.Model(&user).Update("state", "start")
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, bc.GetBotContent("sended_notify"))
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
}
|
||||
} else if update.CallbackQuery != nil {
|
||||
var user User
|
||||
bc.db.First(&user, "id", update.CallbackQuery.From.ID)
|
||||
if update.CallbackQuery.Data == "leave_ticket_button" {
|
||||
chatidstr, err := bc.GetBotContentVerbose("channelid")
|
||||
if err != nil {
|
||||
var admins []User
|
||||
bc.db.Where("role_bitmask & 1 = ?", 1).Find(&admins)
|
||||
for _, admin := range admins {
|
||||
bc.bot.Send(tgbotapi.NewMessage(admin.ID, "ChannelID is not set!!!"))
|
||||
}
|
||||
}
|
||||
chatid, _ := strconv.ParseInt(chatidstr, 10, 64)
|
||||
bc.db.Model(&user).Update("state", "start")
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, bc.GetBotContent("sended_notify"))
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
}
|
||||
} else if update.CallbackQuery != nil {
|
||||
var user User
|
||||
bc.db.First(&user, "id", update.CallbackQuery.From.ID)
|
||||
if update.CallbackQuery.Data == "leave_ticket_button" {
|
||||
chatidstr, err := bc.GetBotContentVerbose("channelid")
|
||||
if err != nil {
|
||||
var admins []User
|
||||
bc.db.Where("role_bitmask & 1 = ?", 1).Find(&admins)
|
||||
for _, admin := range admins {
|
||||
bc.bot.Send(tgbotapi.NewMessage(admin.ID, "ChannelID is not set!!!"))
|
||||
}
|
||||
}
|
||||
chatid, _ := strconv.ParseInt(chatidstr, 10, 64)
|
||||
|
||||
member, err := bc.bot.GetChatMember(tgbotapi.GetChatMemberConfig{
|
||||
ChatConfigWithUser: tgbotapi.ChatConfigWithUser{
|
||||
UserID: update.CallbackQuery.From.ID,
|
||||
SuperGroupUsername: chatidstr,
|
||||
ChatID: chatid,
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
if strings.Contains(err.Error(), "chat not found") {
|
||||
bc.bot.Send(tgbotapi.NewMessage(user.ID, "No channel ID is set!!!"))
|
||||
}
|
||||
}
|
||||
log.Printf("M: %s, E: %s", member, err)
|
||||
s := member.Status
|
||||
if s == "member" || s == "creator" || s == "admin" {
|
||||
bc.db.Model(&user).Update("state", "leaveticket")
|
||||
bc.bot.Send(tgbotapi.NewMessage(user.ID, bc.GetBotContent("leaveticket_message")))
|
||||
} else {
|
||||
link, err := bc.GetBotContentVerbose("channel_link")
|
||||
msg := tgbotapi.NewMessage(user.ID, bc.GetBotContent("subscribe_message"))
|
||||
if err == nil {
|
||||
kbd := tgbotapi.NewInlineKeyboardMarkup(
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonURL("Канал", link)),
|
||||
)
|
||||
msg.ReplyMarkup = kbd
|
||||
}
|
||||
if err != nil {
|
||||
log.Printf("NO LINK!!!")
|
||||
var admins []User
|
||||
bc.db.Where("role_bitmask & 1 = ?", 1).Find(&admins)
|
||||
for _, admin := range admins {
|
||||
msg := tgbotapi.NewMessage(admin.ID, "Channel link is not set!!!")
|
||||
msg.Entities = []tgbotapi.MessageEntity{tgbotapi.MessageEntity{
|
||||
Type: "code",
|
||||
Offset: 1,
|
||||
Length: 2,
|
||||
}}
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
}
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
} else if user.IsEffectiveAdmin() {
|
||||
if strings.HasPrefix(update.CallbackQuery.Data, "update:") {
|
||||
Label := strings.Split(update.CallbackQuery.Data, ":")[1]
|
||||
if Label == "preview_image" {
|
||||
bc.db.Model(&user).Update("state", "imgset:" + Label)
|
||||
} else {
|
||||
bc.db.Model(&user).Update("state", "stringset:" + Label)
|
||||
}
|
||||
bc.bot.Send(tgbotapi.NewMessage(user.ID, "Send me asset (text or picture (NOT as file))"))
|
||||
}
|
||||
}
|
||||
if user.IsAdmin() {
|
||||
if update.CallbackQuery.Data == "panel" {
|
||||
if !user.IsEffectiveAdmin() {
|
||||
bc.db.Model(&user).Update("RoleBitmask", user.RoleBitmask | 0b10)
|
||||
msg := tgbotapi.NewMessage(user.ID, "You was in usermode, turned back to admin mode...")
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
kbd := tgbotapi.NewInlineKeyboardMarkup(
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Стартовая картинка", "update:preview_image")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Приветственный текст", "update:start")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Кнопка для заявки", "update:leave_ticket_button")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("ID чата", "update:supportchatid")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("ID канала", "update:channelid")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Уведомление об отправке тикета", "update:sended_notify")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Просьба оставить тикет", "update:leaveticket_message")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Просьба подписаться на канал", "update:subscribe_message")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Ссылка на канал", "update:channel_link")),
|
||||
)
|
||||
msg := tgbotapi.NewMessage(user.ID, "Выберите пункт для изменения")
|
||||
msg.ReplyMarkup = kbd
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
}
|
||||
canswer := tgbotapi.NewCallback(update.CallbackQuery.ID, "")
|
||||
bc.bot.Send(canswer)
|
||||
} else if update.ChannelPost != nil { // TODO
|
||||
post := update.ChannelPost
|
||||
if post.Text == "setchannelid" {
|
||||
bc.SetBotContent("channelid", strconv.FormatInt(post.SenderChat.ID, 10))
|
||||
member, err := bc.bot.GetChatMember(tgbotapi.GetChatMemberConfig{
|
||||
ChatConfigWithUser: tgbotapi.ChatConfigWithUser{
|
||||
UserID: update.CallbackQuery.From.ID,
|
||||
SuperGroupUsername: chatidstr,
|
||||
ChatID: chatid,
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
if strings.Contains(err.Error(), "chat not found") {
|
||||
bc.bot.Send(tgbotapi.NewMessage(user.ID, "No channel ID is set!!!"))
|
||||
}
|
||||
}
|
||||
log.Printf("M: %s, E: %s", member, err)
|
||||
s := member.Status
|
||||
if s == "member" || s == "creator" || s == "admin" {
|
||||
bc.db.Model(&user).Update("state", "leaveticket")
|
||||
bc.bot.Send(tgbotapi.NewMessage(user.ID, bc.GetBotContent("leaveticket_message")))
|
||||
} else {
|
||||
link, err := bc.GetBotContentVerbose("channel_link")
|
||||
msg := tgbotapi.NewMessage(user.ID, bc.GetBotContent("subscribe_message"))
|
||||
if err == nil {
|
||||
kbd := tgbotapi.NewInlineKeyboardMarkup(
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonURL("Канал", link)),
|
||||
)
|
||||
msg.ReplyMarkup = kbd
|
||||
}
|
||||
if err != nil {
|
||||
log.Printf("NO LINK!!!")
|
||||
var admins []User
|
||||
bc.db.Where("role_bitmask & 1 = ?", 1).Find(&admins)
|
||||
for _, admin := range admins {
|
||||
msg := tgbotapi.NewMessage(admin.ID, "Channel link is not set!!!")
|
||||
msg.Entities = []tgbotapi.MessageEntity{tgbotapi.MessageEntity{
|
||||
Type: "code",
|
||||
Offset: 1,
|
||||
Length: 2,
|
||||
}}
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
}
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
} else if user.IsEffectiveAdmin() {
|
||||
if strings.HasPrefix(update.CallbackQuery.Data, "update:") {
|
||||
Label := strings.Split(update.CallbackQuery.Data, ":")[1]
|
||||
if Label == "preview_image" {
|
||||
bc.db.Model(&user).Update("state", "imgset:"+Label)
|
||||
} else {
|
||||
bc.db.Model(&user).Update("state", "stringset:"+Label)
|
||||
}
|
||||
bc.bot.Send(tgbotapi.NewMessage(user.ID, "Send me asset (text or picture (NOT as file))"))
|
||||
}
|
||||
}
|
||||
if user.IsAdmin() {
|
||||
if update.CallbackQuery.Data == "panel" {
|
||||
if !user.IsEffectiveAdmin() {
|
||||
bc.db.Model(&user).Update("RoleBitmask", user.RoleBitmask|0b10)
|
||||
msg := tgbotapi.NewMessage(user.ID, "You was in usermode, turned back to admin mode...")
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
kbd := tgbotapi.NewInlineKeyboardMarkup(
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Стартовая картинка", "update:preview_image")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Приветственный текст", "update:start")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Кнопка для заявки", "update:leave_ticket_button")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("ID чата", "update:supportchatid")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("ID канала", "update:channelid")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Уведомление об отправке тикета", "update:sended_notify")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Просьба оставить тикет", "update:leaveticket_message")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Просьба подписаться на канал", "update:subscribe_message")),
|
||||
tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData("Ссылка на канал", "update:channel_link")),
|
||||
)
|
||||
msg := tgbotapi.NewMessage(user.ID, "Выберите пункт для изменения")
|
||||
msg.ReplyMarkup = kbd
|
||||
bc.bot.Send(msg)
|
||||
}
|
||||
}
|
||||
canswer := tgbotapi.NewCallback(update.CallbackQuery.ID, "")
|
||||
bc.bot.Send(canswer)
|
||||
} else if update.ChannelPost != nil { // TODO
|
||||
post := update.ChannelPost
|
||||
if post.Text == "setchannelid" {
|
||||
bc.SetBotContent("channelid", strconv.FormatInt(post.SenderChat.ID, 10))
|
||||
|
||||
var admins []User
|
||||
bc.db.Where("role_bitmask & 1 = ?", 1).Find(&admins)
|
||||
for _, admin := range admins {
|
||||
bc.bot.Send(tgbotapi.NewMessage(admin.ID, "ChannelID is set to " + strconv.FormatInt(post.SenderChat.ID, 10)))
|
||||
delcmd := tgbotapi.NewDeleteMessage(post.SenderChat.ID, post.MessageID)
|
||||
bc.bot.Send(delcmd)
|
||||
}
|
||||
}
|
||||
}
|
||||
var admins []User
|
||||
bc.db.Where("role_bitmask & 1 = ?", 1).Find(&admins)
|
||||
for _, admin := range admins {
|
||||
bc.bot.Send(tgbotapi.NewMessage(admin.ID, "ChannelID is set to "+strconv.FormatInt(post.SenderChat.ID, 10)))
|
||||
delcmd := tgbotapi.NewDeleteMessage(post.SenderChat.ID, post.MessageID)
|
||||
bc.bot.Send(delcmd)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func DownloadFile(filepath string, url string) error {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user