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"})
|
||
}
|