diff --git a/bridge/user.go b/bridge/user.go index d259690..9098fa8 100644 --- a/bridge/user.go +++ b/bridge/user.go @@ -374,6 +374,26 @@ func (u *User) Disconnect() error { return nil } +func (u *User) bridgeMessage(guildID string) bool { + // Non guild message always get bridged. + if guildID == "" { + return true + } + + u.guildsLock.Lock() + defer u.guildsLock.Unlock() + + if guild, found := u.guilds[guildID]; found { + if guild.Bridge { + return true + } + } + + u.log.Debugfln("ignoring message for unbridged guild %s", guildID) + + return false +} + func (u *User) readyHandler(s *discordgo.Session, r *discordgo.Ready) { u.log.Debugln("discord connection ready") @@ -529,9 +549,7 @@ func (u *User) channelUpdateHandler(s *discordgo.Session, c *discordgo.ChannelUp } func (u *User) messageCreateHandler(s *discordgo.Session, m *discordgo.MessageCreate) { - if m.GuildID != "" { - u.log.Debugln("ignoring message for guild") - + if !u.bridgeMessage(m.GuildID) { return } @@ -547,9 +565,7 @@ func (u *User) messageCreateHandler(s *discordgo.Session, m *discordgo.MessageCr } func (u *User) messageDeleteHandler(s *discordgo.Session, m *discordgo.MessageDelete) { - if m.GuildID != "" { - u.log.Debugln("ignoring message delete for guild message") - + if !u.bridgeMessage(m.GuildID) { return } @@ -565,9 +581,7 @@ func (u *User) messageDeleteHandler(s *discordgo.Session, m *discordgo.MessageDe } func (u *User) messageUpdateHandler(s *discordgo.Session, m *discordgo.MessageUpdate) { - if m.GuildID != "" { - u.log.Debugln("ignoring message update for guild message") - + if !u.bridgeMessage(m.GuildID) { return } @@ -583,9 +597,7 @@ func (u *User) messageUpdateHandler(s *discordgo.Session, m *discordgo.MessageUp } func (u *User) reactionAddHandler(s *discordgo.Session, m *discordgo.MessageReactionAdd) { - if m.GuildID != "" { - u.log.Debugln("ignoring reaction for guild message") - + if !u.bridgeMessage(m.MessageReaction.GuildID) { return } @@ -601,9 +613,7 @@ func (u *User) reactionAddHandler(s *discordgo.Session, m *discordgo.MessageReac } func (u *User) reactionRemoveHandler(s *discordgo.Session, m *discordgo.MessageReactionRemove) { - if m.GuildID != "" { - u.log.Debugln("ignoring reaction for guild message") - + if !u.bridgeMessage(m.MessageReaction.GuildID) { return }