bots/bot.go

92 lines
2.5 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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