From be07d4450a96d6d19faa4ec6ed9644b573e9ad32 Mon Sep 17 00:00:00 2001 From: Layla Date: Sat, 17 Jun 2023 23:33:35 +0000 Subject: [PATCH] Allow for sending chats out from external chat submodule --- app/bot.go | 15 ++++++++++++--- app/component_loader.go | 11 ++++++++--- app/external_chat_manager.go | 26 ++++++++++++++++++++++++++ common/module.go | 3 ++- 4 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 app/external_chat_manager.go diff --git a/app/bot.go b/app/bot.go index 445df2a..069aeb5 100644 --- a/app/bot.go +++ b/app/bot.go @@ -62,6 +62,14 @@ func (app *Bot) Initialize(cfg *core.Config) error { app.Session = discord.New(cfg.Discord.ApplicationID, app.guildID, cfg.Discord.Token, app.Database) + // Intialize submodules + for channelID, chats := range app.channelChats { + channel := app.Session.NewChannelFromID(channelID) + for _, chat := range chats { + app.InitalizeExternalChat(channel, chat) + } + } + // Register Event Handlers app.Session.OnReady(app.onReady) app.Session.OnEventCreate(app.onEventCreate) @@ -167,8 +175,8 @@ func (app *Bot) onEventComplete(d *discord.Discord, event common.Event) { } -func (app *Bot) onMessageRecieved(d *discord.Discord, channel string, user common.User, message string) { - chats, ok := app.channelChats[channel] +func (app *Bot) onMessageRecieved(d *discord.Discord, channelID string, user common.User, message string) { + chats, ok := app.channelChats[channelID] if !ok { return } @@ -181,6 +189,7 @@ func (app *Bot) onMessageRecieved(d *discord.Discord, channel string, user commo // NewBot creates a new bot instance func NewBot(db persistence.Database) *Bot { return &Bot{ - Database: db, + Database: db, + channelChats: make(map[string][]common.ExternalChatModule), } } diff --git a/app/component_loader.go b/app/component_loader.go index 3c77cc7..c458026 100644 --- a/app/component_loader.go +++ b/app/component_loader.go @@ -1,7 +1,6 @@ package app import ( - "fmt" "log" "github.com/yeslayla/birdbot/common" @@ -50,8 +49,14 @@ func (loader *ComponentLoader) OnEventComplete(handler func(common.Event) error) return nil } -func (loader *ComponentLoader) RegisterExternalChat(ID string, plugin common.ExternalChatModule) error { - return fmt.Errorf("unimplemented") +func (loader *ComponentLoader) RegisterExternalChat(channelID string, chat common.ExternalChatModule) error { + if _, ok := loader.bot.channelChats[channelID]; !ok { + loader.bot.channelChats[channelID] = []common.ExternalChatModule{} + } + + loader.bot.channelChats[channelID] = append(loader.bot.channelChats[channelID], chat) + + return nil } func (loader *ComponentLoader) CreateEvent(event common.Event) error { diff --git a/app/external_chat_manager.go b/app/external_chat_manager.go new file mode 100644 index 0000000..e2f79fd --- /dev/null +++ b/app/external_chat_manager.go @@ -0,0 +1,26 @@ +package app + +import ( + "github.com/yeslayla/birdbot/common" + "github.com/yeslayla/birdbot/core" +) + +type ExternalChatManager struct { + chat common.ExternalChatModule + channel *core.Channel + bot *Bot +} + +func (manager *ExternalChatManager) SendMessage(user string, message string) { + manager.bot.Session.WebhookSendMessage(manager.channel, user, message) +} + +func (app *Bot) InitalizeExternalChat(channel *core.Channel, chat common.ExternalChatModule) { + manager := &ExternalChatManager{ + channel: channel, + chat: chat, + bot: app, + } + + manager.chat.Initialize(manager) +} diff --git a/common/module.go b/common/module.go index bb95b54..2672a4c 100644 --- a/common/module.go +++ b/common/module.go @@ -24,5 +24,6 @@ type ModuleManager interface { // Commands RegisterCommand(string, ChatCommandConfiguration, func(User, map[string]any) string) - RegisterExternalChat(ID string, chat ExternalChatModule) error + // Submodules + RegisterExternalChat(channelID string, chat ExternalChatModule) error }