package bot import ( "fmt" "git.belvedersky.ru/common/logger/service" "git.belvedersky.ru/common/tgbotapi" "github.com/gofiber/fiber/v2" "gopkg.in/telebot.v3" "gopkg.in/telebot.v3/middleware" ) type ( // Структура бота Bot struct { Config BotConfig // Конфиг Bot *telebot.Bot // Бот Api *tgbotapi.BotAPI // Апи Log *service.LoggerService // Логгер Msg chan<- telebot.Update // Сообщения } // Настройки Бота BotConfig struct { Token string // Токен UseWebhook bool // Использовать вебхук UsePhone bool // Спрашивать телефон при авторизации в чатботе Private bool // Отправлять сообщение только в приватный чат Messages map[string]string // Сообщения Handlers []string // Cписок хендлеров бота } ) // Остановка бота func (b *Bot) Stop() { b.Log.Print(service.LogStruct{ Message: fmt.Sprintf("Остановка чат бота https://t.me/%s", b.Bot.Me.Username), }) b.Bot.Stop() } // Информация про бота func (b *Bot) Self() *telebot.User { return b.Bot.Me } // Токен бота func (b *Bot) Token() string { return b.Bot.Token } // Хендлер webhook func (b *Bot) Handler(c *fiber.Ctx) error { var update telebot.Update b.Log.Log.Println(string(c.Body())) if err := c.BodyParser(&update); err != nil { return err } b.Msg <- update return c.SendStatus(200) } // Удаление сообщения func (b *Bot) DeleteMessage(message *telebot.Message) error { return b.Bot.Delete(message) } // Отправка сообщения func (b *Bot) SendMessage(chatId int64, message string, markup *telebot.ReplyMarkup) (m *telebot.Message, err error) { chat, err := b.Bot.ChatByID(chatId) if err != nil { return nil, err } m, err = b.Bot.Send(chat, message, markup, telebot.ModeHTML) return } // Отправка файла func (b *Bot) SendFile(chatId int64, file *telebot.Document, markup *telebot.ReplyMarkup) (m *telebot.Message, err error) { chat, err := b.Bot.ChatByID(chatId) if err != nil { return nil, err } m, err = b.Bot.Send(chat, file, markup) return } func (b *Bot) RegisterMiddelwares() { b.Bot.Use(middleware.Logger(b.Log.Log)) b.Log.Print(service.LogStruct{Message: "registerMiddelwares"}) }