telegram-to-discord/tgBot/handler.go

71 lines
1.4 KiB
Go
Raw Normal View History

2025-03-23 15:35:24 +03:00
package tgBot
import (
"context"
"fmt"
"github.com/go-telegram/bot"
"github.com/go-telegram/bot/models"
log "github.com/sirupsen/logrus"
"tg-disc-bot/config"
"tg-disc-bot/dto"
)
type TgBot struct {
ctx context.Context
bot *bot.Bot
chatID int64
}
func NewTgBot(ctx context.Context, config config.TelegramConfig) (*TgBot, error) {
tgBot := &TgBot{ctx: ctx, chatID: config.ChatID}
var err error
tgBot.bot, err = bot.New(config.Token)
if err != nil {
return nil, err
}
return tgBot, nil
}
func (b *TgBot) Start(fromDiscord chan dto.DiscordDTO) chan dto.TelegramDTO {
msgChan := make(chan dto.TelegramDTO, 100)
b.bot.RegisterHandler(
bot.HandlerTypeMessageText,
"",
bot.MatchTypeContains,
func(ctx context.Context, bt *bot.Bot, update *models.Update) {
if update.Message != nil || !update.Message.From.IsBot {
msg := dto.TelegramDTO{
AuthorName: update.Message.From.Username,
Content: update.Message.Text,
}
fmt.Println(update.Message.Chat.ID)
msgChan <- msg
}
})
go func() {
log.Info("Starting telegram bot...")
b.bot.Start(b.ctx)
}()
go func() {
for msg := range fromDiscord {
log.WithField("content", msg).Debug("TG | Message from Discord")
m := fmt.Sprintf("[%s]\n%s", msg.AuthorName, msg.Content)
b.bot.SendMessage(b.ctx, &bot.SendMessageParams{
ChatID: b.chatID,
Text: m,
})
}
}()
return msgChan
}