aboutsummaryrefslogtreecommitdiff
path: root/pkg/bot
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/bot')
-rw-r--r--pkg/bot/bot.go57
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()
}