bots/bot.go

92 lines
2.5 KiB
Go
Raw Normal View History

2022-06-03 13:58:41 +03:00
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"})
}