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 }