package relay import ( "context" "homestead/homestead_to_go/relay/commands" "log" "log/slog" "time" "github.com/disgoorg/disgo" "github.com/disgoorg/disgo/bot" "github.com/disgoorg/disgo/cache" "github.com/disgoorg/disgo/discord" "github.com/disgoorg/disgo/events" "github.com/disgoorg/disgo/gateway" "github.com/disgoorg/paginator" ) func New(cfg Config) *Bot { return &Bot{ Cfg: cfg, Paginator: paginator.New(), } } func onMessageCreate(event *events.MessageCreate) { // Ignore bot messages if event.Message.Author.Bot { return } // Check if channel is registered if !commands.ChannelStore.IsRegistered(event.Message.ChannelID) { return } // Log the message log.Printf("[%s] %s#%s: %s", event.Message.ChannelID, event.Message.Author.Username, event.Message.Author.Discriminator, event.Message.Content, ) // You can also log attachments, embeds, etc. if len(event.Message.Attachments) > 0 { log.Printf(" └─ Attachments: %d", len(event.Message.Attachments)) } } func (b *Bot) SetupBot(listeners ...bot.EventListener) error { client, err := disgo.New(b.Cfg.Bot.Token, bot.WithGatewayConfigOpts(gateway.WithIntents(gateway.IntentGuilds, gateway.IntentGuildMessages, gateway.IntentMessageContent)), bot.WithCacheConfigOpts(cache.WithCaches(cache.FlagGuilds)), bot.WithEventListeners(b.Paginator), bot.WithEventListeners(listeners...), bot.WithEventListeners(&events.ListenerAdapter{ OnMessageCreate: onMessageCreate, }), ) if err != nil { return err } b.Client = client return nil } func (b *Bot) OnReady(_ *events.Ready) { slog.Info(b.Cfg.Bot.Name + " ready.") ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if err := b.Client.SetPresence(ctx, gateway.WithListeningActivity("you"), gateway.WithOnlineStatus(discord.OnlineStatusOnline)); err != nil { slog.Error("Failed to set presence", slog.Any("err", err)) } }