about summary refs log tree commit diff
path: root/pkg/bot/bot.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/bot/bot.go')
-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()
 }