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
diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample
index f004f4b6..41ab44bf 100644
--- a/matterbridge.toml.sample
+++ b/matterbridge.toml.sample
@@ -197,7 +197,7 @@ 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
 
@@ -496,7 +496,7 @@ 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
 
@@ -830,7 +830,7 @@ 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