telegram-to-discord/discordBot/messages.go
2025-03-29 22:00:58 +03:00

75 lines
1.5 KiB
Go

package discordBot
import (
"github.com/disgoorg/disgo/bot"
"github.com/disgoorg/disgo/discord"
"github.com/disgoorg/disgo/events"
log "github.com/sirupsen/logrus"
"io"
"net/http"
"tg-disc-bot/dto"
)
type messageHandler struct {
msgChan chan dto.DiscordDTO
}
func (m *messageHandler) OnEvent(event bot.Event) {
if e, ok := event.(*events.MessageCreate); ok {
if !e.Message.Author.Bot {
attachments := e.Message.Attachments
var images *[]dto.Image
var err error
if len(attachments) > 0 {
images, err = getImages(attachments)
if err != nil {
log.Warnf("could not get images from attachments: %v", err)
}
}
message := dto.DiscordDTO{
AuthorName: e.Message.Author.Username,
Content: e.Message.Content,
Images: images,
}
m.msgChan <- message
} else {
log.Debug("DS | Bot message, skipping")
}
}
}
func getImages(a []discord.Attachment) (*[]dto.Image, error) {
var images []dto.Image
for _, item := range a {
if (*item.ContentType == "image/png") || (*item.ContentType == "image/jpeg") {
imageData, err := downloadImage(item.URL)
if err != nil {
log.Errorf("Error downloading image: %s", err)
return nil, err
}
images = append(images, dto.Image{
Data: imageData,
Filename: item.Filename,
})
}
}
return &images, nil
}
func downloadImage(url string) ([]byte, error) {
resp, err := http.Get(url)
if err != nil {
return nil, err
}
defer resp.Body.Close()
data, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return data, nil
}