diff options
Diffstat (limited to 'pkg/bot/bot.go')
| -rw-r--r-- | pkg/bot/bot.go | 57 |
1 files changed, 36 insertions, 21 deletions
diff --git a/pkg/bot/bot.go b/pkg/bot/bot.go index 9095d7c..add3e56 100644 --- a/pkg/bot/bot.go +++ b/pkg/bot/bot.go @@ -2,49 +2,64 @@ package bot import ( "context" - "fmt" + "errors" "jinx/pkg/discord" - "log" + + "github.com/rs/zerolog" ) type Bot struct { - Client *discord.Discord + client *discord.Discord + logger *zerolog.Logger cancelContext context.CancelFunc } -func Start(token string) (*Bot, error) { - fmt.Println("hi..!") +func NewBot(token string, logger *zerolog.Logger) *Bot { + return &Bot{ + client: discord.NewClient(token, logger), + logger: logger, + cancelContext: nil, + } +} - client := discord.NewClient(token) +func (b *Bot) Start() error { + var err error + ctx, cancel := context.WithCancel(context.Background()) + b.cancelContext = cancel - client.AddEventHandler(discord.DISCORD_EVENT_READY, func(_ any) { - log.Println("bot is ready!") + defer func() { + if err != nil { + cancel() + } + }() + + b.client.AddEventHandler(discord.DISCORD_EVENT_READY, func(_ any) { + b.logger.Info().Msg("ready!") }) - client.AddEventHandler(discord.DISCORD_EVENT_MESSAGE, func(m any) { + b.client.AddEventHandler(discord.DISCORD_EVENT_MESSAGE, func(m any) { msg := m.(discord.GatewayMessageCreateEvent) - log.Printf("message: %s", msg.Content) + b.logger.Debug().Msgf("message: %s", msg.Content) if msg.Content == "ping" { - if err := client.SendMessage(msg.ChannelID, "pong"); err != nil { - log.Printf("error sending message: %s", err) + if err := b.client.SendMessage(msg.ChannelID, "pong"); err != nil { + b.logger.Error().Err(err).Msg("error sending message") } } }) - ctx, cancel := context.WithCancel(context.Background()) - if err := client.Connect(ctx); err != nil { - cancel() - return nil, err + if err := b.client.Connect(ctx); err != nil { + return err } - return &Bot{ - Client: client, - cancelContext: cancel, - }, nil + return nil } func (b *Bot) Stop() error { + if b.cancelContext == nil { + return errors.New("bot has no context") + } + b.cancelContext() - return b.Client.Disconnect() + return b.client.Disconnect() } |
