92 lines
2.5 KiB
Go
92 lines
2.5 KiB
Go
|
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"})
|
|||
|
}
|