Thumbnail

rani/matterbridge.git

Clone URL: https://git.buni.party/rani/matterbridge.git

commit 2df03b15e61092c5258635eb57399ad886340504 Author: Sam W <sam@wlcx.cc> Date: Fri Jun 24 22:50:48 2022 +0000 Ignore events from other guilds, add nosendjoinpart support (discord) (#1846) * discord: add nosendjoinpart support This allows the discord bridge to be configured with `nosendjoinpart`, preventing discord-originating join/part messages from being send to other bridged platforms. * discord: Ignore incoming events for other guilds Ignore all incoming discord events originating from Guild IDs other than the one we have configured. This is necessary because discord bots receive events for *all* discord guilds that they are present in. Fixes #1612 diff --git a/bridge/discord/discord.go b/bridge/discord/discord.go index ad08cd3..5ae6c57 100644 --- a/bridge/discord/discord.go +++ b/bridge/discord/discord.go @@ -8312 +8312 @@ func (b *Bdiscord) Connect() error {   b.Log.Info("Connection succeeded")   b.c.AddHandler(b.messageCreate)   b.c.AddHandler(b.messageTyping) - b.c.AddHandler(b.memberUpdate)   b.c.AddHandler(b.messageUpdate)   b.c.AddHandler(b.messageDelete)   b.c.AddHandler(b.messageDeleteBulk)   b.c.AddHandler(b.memberAdd)   b.c.AddHandler(b.memberRemove) + b.c.AddHandler(b.memberUpdate)   if b.GetInt("debuglevel") == 1 {   b.c.AddHandler(b.messageEvent)   } diff --git a/bridge/discord/handlers.go b/bridge/discord/handlers.go index d2613e1..34cef55 100644 --- a/bridge/discord/handlers.go +++ b/bridge/discord/handlers.go @@ -76 +710 @@ import (  )    func (b *Bdiscord) messageDelete(s *discordgo.Session, m *discordgo.MessageDelete) { //nolint:unparam + if m.GuildID != b.guildID { + b.Log.Debugf("Ignoring messageDelete because it originates from a different guild") + return + }   rmsg := config.Message{Account: b.Account, ID: m.ID, Event: config.EventMsgDelete, Text: config.EventMsgDelete}   rmsg.Channel = b.getChannelName(m.ChannelID)   @@ -176 +2110 @@ func (b *Bdiscord) messageDelete(s *discordgo.Session, m *discordgo.MessageDelet    // TODO(qaisjp): if other bridges support bulk deletions, it could be fanned out centrally  func (b *Bdiscord) messageDeleteBulk(s *discordgo.Session, m *discordgo.MessageDeleteBulk) { //nolint:unparam + if m.GuildID != b.guildID { + b.Log.Debugf("Ignoring messageDeleteBulk because it originates from a different guild") + return + }   for _, msgID := range m.Messages {   rmsg := config.Message{   Account: b.Account, @@ -376 +4510 @@ func (b *Bdiscord) messageEvent(s *discordgo.Session, m *discordgo.Event) {  }    func (b *Bdiscord) messageTyping(s *discordgo.Session, m *discordgo.TypingStart) { + if m.GuildID != b.guildID { + b.Log.Debugf("Ignoring messageTyping because it originates from a different guild") + return + }   if !b.GetBool("ShowUserTyping") {   return   } @@ -526 +6410 @@ func (b *Bdiscord) messageTyping(s *discordgo.Session, m *discordgo.TypingStart)  }    func (b *Bdiscord) messageUpdate(s *discordgo.Session, m *discordgo.MessageUpdate) { //nolint:unparam + if m.GuildID != b.guildID { + b.Log.Debugf("Ignoring messageUpdate because it originates from a different guild") + return + }   if b.GetBool("EditDisable") {   return   } @@ -676 +8310 @@ func (b *Bdiscord) messageUpdate(s *discordgo.Session, m *discordgo.MessageUpdat  }    func (b *Bdiscord) messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) { //nolint:unparam + if m.GuildID != b.guildID { + b.Log.Debugf("Ignoring messageCreate because it originates from a different guild") + return + }   var err error     // not relay our own messages @@ -1446 +16410 @@ func (b *Bdiscord) messageCreate(s *discordgo.Session, m *discordgo.MessageCreat  }    func (b *Bdiscord) memberUpdate(s *discordgo.Session, m *discordgo.GuildMemberUpdate) { + if m.GuildID != b.guildID { + b.Log.Debugf("Ignoring memberUpdate because it originates from a different guild") + return + }   if m.Member == nil {   b.Log.Warnf("Received member update with no member information: %#v", m)   } @@ -1716 +19513 @@ func (b *Bdiscord) memberUpdate(s *discordgo.Session, m *discordgo.GuildMemberUp  }    func (b *Bdiscord) memberAdd(s *discordgo.Session, m *discordgo.GuildMemberAdd) { + if m.GuildID != b.guildID { + b.Log.Debugf("Ignoring memberAdd because it originates from a different guild") + return + } + if b.GetBool("nosendjoinpart") { + return + }   if m.Member == nil {   b.Log.Warnf("Received member update with no member information: %#v", m)   return @@ -1926 +22313 @@ func (b *Bdiscord) memberAdd(s *discordgo.Session, m *discordgo.GuildMemberAdd)  }    func (b *Bdiscord) memberRemove(s *discordgo.Session, m *discordgo.GuildMemberRemove) { + if m.GuildID != b.guildID { + b.Log.Debugf("Ignoring memberRemove because it originates from a different guild") + return + } + if b.GetBool("nosendjoinpart") { + return + }   if m.Member == nil {   b.Log.Warnf("Received member update with no member information: %#v", m)   return diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample index f004f4b..41ab44b 100644 --- a/matterbridge.toml.sample +++ b/matterbridge.toml.sample @@ -1977 +1977 @@ ShowJoinPart=false  VerboseJoinPart=false    #Do not send joins/parts to other bridges -#Currently works for messages from the following bridges: irc, mattermost, slack +#Currently works for messages from the following bridges: irc, mattermost, slack, discord  #OPTIONAL (default false)  NoSendJoinPart=false   @@ -4967 +4967 @@ RemoteNickFormat="[{PROTOCOL}] <{NICK}> "  ShowJoinPart=false    #Do not send joins/parts to other bridges -#Currently works for messages from the following bridges: irc, mattermost, slack +#Currently works for messages from the following bridges: irc, mattermost, slack, discord  #OPTIONAL (default false)  NoSendJoinPart=false   @@ -8307 +8307 @@ RemoteNickFormat="[{PROTOCOL}] <{NICK}> "  ShowJoinPart=false    #Do not send joins/parts to other bridges -#Currently works for messages from the following bridges: irc, mattermost, slack +#Currently works for messages from the following bridges: irc, mattermost, slack, discord  #OPTIONAL (default false)  NoSendJoinPart=false