From 4203daa0e825fb4d016749a7d6bf08c87eadac7b Mon Sep 17 00:00:00 2001 From: Simon Kim Date: Tue, 20 Oct 2026 22:49:39 -0700 Subject: [PATCH] More refactors, turning things into packages --- .gitignore | 2 +- README.md | 2 +- main.go => cmd/frodo-bot/main.go | 11 +++++------ go.mod | 2 +- internal/bot/bot.go | 27 ++++++++++++++++++++++++++ bot.go => internal/bot/secret.go | 20 ++++++------------- config.go => internal/config/config.go | 4 ++-- matcher.go | 7 ------- 8 files changed, 43 insertions(+), 32 deletions(-) rename main.go => cmd/frodo-bot/main.go (77%) create mode 100644 internal/bot/bot.go rename bot.go => internal/bot/secret.go (59%) rename config.go => internal/config/config.go (91%) delete mode 100644 matcher.go diff --git a/.gitignore b/.gitignore index 5d67cf8..8cfdbcb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ .env *.exe -frodo-bot +/frodo-bot diff --git a/README.md b/README.md index 2e7816f..726b573 100755 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Then fill in `.env`: ### 2. Run ```bash -go run . +go run ./cmd/frodo-bot ``` ### 3. Supported Commands diff --git a/main.go b/cmd/frodo-bot/main.go similarity index 77% rename from main.go rename to cmd/frodo-bot/main.go index 1a04b62..b94b6d0 100644 --- a/main.go +++ b/cmd/frodo-bot/main.go @@ -7,6 +7,8 @@ import ( "os/signal" "syscall" + "github.com/SimonKimDev/frodo-bot/internal/bot" + "github.com/SimonKimDev/frodo-bot/internal/config" "github.com/bwmarrin/discordgo" ) @@ -17,7 +19,7 @@ func main() { } func run() error { - cfg, err := loadConfig() + cfg, err := config.Load() if err != nil { return fmt.Errorf("config failed: %w", err) } @@ -27,11 +29,8 @@ func run() error { return fmt.Errorf("bot failed to init: %w", err) } - bot := newBot(cfg) - discord.AddHandler(bot.onReady) - discord.AddHandler(bot.onMessage) - - discord.Identify.Intents = discordgo.IntentsMessageContent | discordgo.IntentsGuildMessages + b := bot.New(cfg) + b.Register(discord) // open session err = discord.Open() diff --git a/go.mod b/go.mod index 5a86d42..c9ace48 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module frodo-bot +module github.com/SimonKimDev/frodo-bot go 1.26.1 diff --git a/internal/bot/bot.go b/internal/bot/bot.go new file mode 100644 index 0000000..3b61bf6 --- /dev/null +++ b/internal/bot/bot.go @@ -0,0 +1,27 @@ +package bot + +import ( + "log" + + "github.com/SimonKimDev/frodo-bot/internal/config" + "github.com/bwmarrin/discordgo" +) + +type Bot struct { + gifURL string +} + +func New(cfg config.Config) *Bot { + return &Bot{gifURL: cfg.GIFURL} +} + +func (b *Bot) Register(s *discordgo.Session) { + s.AddHandler(b.onReady) + s.AddHandler(b.onMessage) + s.Identify.Intents = discordgo.IntentsMessageContent | discordgo.IntentsGuildMessages +} + +func (b *Bot) onReady(s *discordgo.Session, r *discordgo.Ready) { + user := r.User + log.Printf("logged in as %v", user.Username) +} diff --git a/bot.go b/internal/bot/secret.go similarity index 59% rename from bot.go rename to internal/bot/secret.go index 1ac07fb..af532e5 100644 --- a/bot.go +++ b/internal/bot/secret.go @@ -1,24 +1,12 @@ -package main +package bot import ( "log" + "strings" "github.com/bwmarrin/discordgo" ) -type Bot struct { - gifURL string -} - -func newBot(cfg Config) *Bot { - return &Bot{gifURL: cfg.GIFURL} -} - -func (b *Bot) onReady(s *discordgo.Session, r *discordgo.Ready) { - user := r.User - log.Printf("logged in as %v", user.Username) -} - func (b *Bot) onMessage(s *discordgo.Session, m *discordgo.MessageCreate) { if m.Author.Bot { return @@ -32,3 +20,7 @@ func (b *Bot) onMessage(s *discordgo.Session, m *discordgo.MessageCreate) { log.Printf("failed to send messages with %v", err) } } + +func shouldReply(content string) bool { + return strings.Contains(strings.ToLower(content), "secret") +} diff --git a/config.go b/internal/config/config.go similarity index 91% rename from config.go rename to internal/config/config.go index 4bcc40a..d74b5b4 100644 --- a/config.go +++ b/internal/config/config.go @@ -1,4 +1,4 @@ -package main +package config import ( "errors" @@ -13,7 +13,7 @@ type Config struct { GIFURL string } -func loadConfig() (Config, error) { +func Load() (Config, error) { if err := godotenv.Load(); err != nil { log.Printf(".env file is missing, using environment variable") } diff --git a/matcher.go b/matcher.go deleted file mode 100644 index 60aeb46..0000000 --- a/matcher.go +++ /dev/null @@ -1,7 +0,0 @@ -package main - -import "strings" - -func shouldReply(content string) bool { - return strings.Contains(strings.ToLower(content), "secret") -}