package confession import ( "errors" "fmt" "sync" "github.com/bwmarrin/discordgo" "gitlab.com/whom/bingobot/internal/logging" "gitlab.com/whom/bingobot/internal/state" ) /* Activity module * This module posts anonymous confessions according to a linked channel map */ const ( ActivityModuleStartFail = "failed to start activity module" ) var ( // guild ID to channel ID linkLock sync.RWMutex confessionChannelLinks = make(map[string]state.ConfessionsChannelLinkEvent) ) func Start() error { ch, err := state.ConfessionsChannelLink.Subscribe() if err != nil { return errors.Join( errors.New(ActivityModuleStartFail), err, ) } // process incoming events loop go func() { for { ev := <- ch logging.Debug("recieved new confessional channel link") e := ev.(state.ConfessionsChannelLinkEvent) linkLock.Lock() confessionChannelLinks[e.GuildID] = e linkLock.Unlock() } }() return nil } func MakeConfession(s *discordgo.Session, guildID string, content string) { linkLock.RLock() link, ok := confessionChannelLinks[guildID] linkLock.RUnlock() if !ok { logging.Error(fmt.Sprintf("Failed to send confession in guild %s: no link exists in map", guildID)) return } s.ChannelMessageSend(link.ChannelID, content) }