Thumbnail

rani/matterbridge.git

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

commit 61e546c891cc79800a4dc7771795d1fadf157c0e Author: Wim <wim@42.be> Date: Sun Feb 17 21:49:45 2019 +0000 Support join/leaves from discord. Closes #654 (#721) diff --git a/bridge/discord/discord.go b/bridge/discord/discord.go index d74ed6a..bc33796 100644 --- a/bridge/discord/discord.go +++ b/bridge/discord/discord.go @@ -756 +758 @@ func (b *Bdiscord) Connect() error {   b.c.AddHandler(b.memberUpdate)   b.c.AddHandler(b.messageUpdate)   b.c.AddHandler(b.messageDelete) + b.c.AddHandler(b.memberAdd) + b.c.AddHandler(b.memberRemove)   err = b.c.Open()   if err != nil {   return err diff --git a/bridge/discord/handlers.go b/bridge/discord/handlers.go index 8691a61..85bac2e 100644 --- a/bridge/discord/handlers.go +++ b/bridge/discord/handlers.go @@ -1233 +12345 @@ func (b *Bdiscord) memberUpdate(s *discordgo.Session, m *discordgo.GuildMemberUp   b.nickMemberMap[m.Member.Nick] = m.Member   }  } + +func (b *Bdiscord) memberAdd(s *discordgo.Session, m *discordgo.GuildMemberAdd) { + if m.Member == nil { + b.Log.Warnf("Received member update with no member information: %#v", m) + return + } + username := m.Member.User.Username + if m.Member.Nick != "" { + username = m.Member.Nick + } + + rmsg := config.Message{ + Account: b.Account, + Event: config.EventJoinLeave, + Username: "system", + Text: username + " joins", + } + b.Log.Debugf("<= Sending message from %s to gateway", b.Account) + b.Log.Debugf("<= Message is %#v", rmsg) + b.Remote <- rmsg +} + +func (b *Bdiscord) memberRemove(s *discordgo.Session, m *discordgo.GuildMemberRemove) { + if m.Member == nil { + b.Log.Warnf("Received member update with no member information: %#v", m) + return + } + username := m.Member.User.Username + if m.Member.Nick != "" { + username = m.Member.Nick + } + + rmsg := config.Message{ + Account: b.Account, + Event: config.EventJoinLeave, + Username: "system", + Text: username + " leaves", + } + b.Log.Debugf("<= Sending message from %s to gateway", b.Account) + b.Log.Debugf("<= Message is %#v", rmsg) + b.Remote <- rmsg +} diff --git a/gateway/gateway.go b/gateway/gateway.go index 6ac0abe..f74a668 100644 --- a/gateway/gateway.go +++ b/gateway/gateway.go @@ -1746 +17418 @@ func (gw *Gateway) getDestChannel(msg *config.Message, dest bridge.Bridge) []con   return channels   }   + // discord join/leave is for the whole bridge, isn't a per channel join/leave + if msg.Event == config.EventJoinLeave && dest.Protocol == "discord" && msg.Account == dest.Account { + flog.Error("here") + for _, channel := range gw.Channels { + if channel.Account == msg.Account && strings.Contains(channel.Direction, "out") && + gw.validGatewayDest(msg) { + channels = append(channels, *channel) + } + } + return channels + } +   // if source channel is in only, do nothing   for _, channel := range gw.Channels {   // lookup the channel from the message