summaryrefslogtreecommitdiffstats
path: root/bridge/discord
diff options
context:
space:
mode:
authorSam W <sam@wlcx.cc>2022-06-24 22:50:48 +0100
committerGitHub <noreply@github.com>2022-06-24 23:50:48 +0200
commit5604d140e3bbf5c8f6c414b1427145a0c4e36bb4 (patch)
treec3f961196517917cc294e14dc650323772217183 /bridge/discord
parent8751fb4bb1eb7cd34ed63be9b3801b8aeac71a1d (diff)
downloadmatterbridge-msglm-5604d140e3bbf5c8f6c414b1427145a0c4e36bb4.tar.gz
matterbridge-msglm-5604d140e3bbf5c8f6c414b1427145a0c4e36bb4.tar.bz2
matterbridge-msglm-5604d140e3bbf5c8f6c414b1427145a0c4e36bb4.zip
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
Diffstat (limited to 'bridge/discord')
-rw-r--r--bridge/discord/discord.go2
-rw-r--r--bridge/discord/handlers.go38
2 files changed, 39 insertions, 1 deletions
diff --git a/bridge/discord/discord.go b/bridge/discord/discord.go
index ad08cd30..5ae6c572 100644
--- a/bridge/discord/discord.go
+++ b/bridge/discord/discord.go
@@ -83,12 +83,12 @@ 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 d2613e1a..34cef554 100644
--- a/bridge/discord/handlers.go
+++ b/bridge/discord/handlers.go
@@ -7,6 +7,10 @@ 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)
@@ -17,6 +21,10 @@ 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,
@@ -37,6 +45,10 @@ 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
}
@@ -52,6 +64,10 @@ 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
}
@@ -67,6 +83,10 @@ 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
@@ -144,6 +164,10 @@ 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)
}
@@ -171,6 +195,13 @@ 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
@@ -192,6 +223,13 @@ 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