Thumbnail

rani/matterbridge.git

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

commit 2bb79814b6f310f7a4d9e69f46d044c2f107f7d2 Author: Qais Patankar <qaisjp@gmail.com> Date: Sun Feb 09 21:07:26 2020 +0000 Add ability to procure avatars from the destination bridge (#1000) * remote_avatar: add UseLocalAvatar * remote_avatar: make sure msg.Protocol is always set correctly * remote_avatars: support msg.Account * remote_avatar: add to matterbridge.toml.sample * remote_avatar: clarify something diff --git a/bridge/config/config.go b/bridge/config/config.go index 84e8f75..2d20c11 100644 --- a/bridge/config/config.go +++ b/bridge/config/config.go @@ -1386 +1387 @@ type Protocol struct {   Topic string // zulip   URL string // mattermost, slack // DEPRECATED   UseAPI bool // mattermost, slack + UseLocalAvatar []string // discord   UseSASL bool // IRC   UseTLS bool // IRC   UseDiscriminator bool // discord diff --git a/bridge/discord/discord.go b/bridge/discord/discord.go index e81d078..e37208b 100644 --- a/bridge/discord/discord.go +++ b/bridge/discord/discord.go @@ -3816 +38119 @@ func (b *Bdiscord) webhookSend(msg *config.Message, webhookID, token string) (*d   err error   )   + // If avatar is unset, check if UseLocalAvatar contains the message's + // account or protocol, and if so, try to find a local avatar + if msg.Avatar == "" { + for _, val := range b.GetStringSlice("UseLocalAvatar") { + if msg.Protocol == val || msg.Account == val { + if avatar := b.findAvatar(msg); avatar != "" { + msg.Avatar = avatar + } + break + } + } + } +   // WebhookParams can have either `Content` or `File`.     // We can't send empty messages. @@ -4303 +44311 @@ func (b *Bdiscord) webhookSend(msg *config.Message, webhookID, token string) (*d   }   return res, err  } + +func (b *Bdiscord) findAvatar(m *config.Message) string { + member, err := b.getGuildMemberByNick(m.Username) + if err != nil { + return "" + } + return member.User.AvatarURL("") +} diff --git a/gateway/gateway.go b/gateway/gateway.go index e265e62..1e958a8 100644 --- a/gateway/gateway.go +++ b/gateway/gateway.go @@ -3068 +3066 @@ func (gw *Gateway) ignoreMessage(msg *config.Message) bool {  }    func (gw *Gateway) modifyUsername(msg *config.Message, dest *bridge.Bridge) string { - br := gw.Bridges[msg.Account] - msg.Protocol = br.Protocol   if dest.GetBool("StripNick") {   re := regexp.MustCompile("[^a-zA-Z0-9]+")   msg.Username = re.ReplaceAllString(msg.Username, "") @@ -3156 +3137 @@ func (gw *Gateway) modifyUsername(msg *config.Message, dest *bridge.Bridge) stri   nick := dest.GetString("RemoteNickFormat")     // loop to replace nicks + br := gw.Bridges[msg.Account]   for _, outer := range br.GetStringSlice2D("ReplaceNicks") {   search := outer[0]   replace := outer[1] diff --git a/gateway/router.go b/gateway/router.go index 56573f7..b07e578 100644 --- a/gateway/router.go +++ b/gateway/router.go @@ -1326 +1329 @@ func (r *Router) handleReceive() {   r.handleEventFailure(&msg)   r.handleEventRejoinChannels(&msg)   + // Set message protocol based on the account it came from + msg.Protocol = r.getBridge(msg.Account).Protocol +   filesHandled := false   for _, gw := range r.Gateways {   // record all the message ID's of the different bridges diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample index d9d596e..6429e08 100644 --- a/matterbridge.toml.sample +++ b/matterbridge.toml.sample @@ -7246 +72412 @@ Server="yourservername"  #OPTIONAL (default false)  ShowEmbeds=false   +#Show Discord avatars of remote users with matching names +#This only works for webhooks & if the source message has no avatar +# +#OPTIONAL (default empty) +UseLocalAvatar=["irc"] +  #Shows the username instead of the server nickname  #OPTIONAL (default false)  UseUserName=false