summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bridge/config/config.go1
-rw-r--r--bridge/discord/discord.go21
-rw-r--r--gateway/gateway.go3
-rw-r--r--gateway/router.go3
-rw-r--r--matterbridge.toml.sample6
5 files changed, 32 insertions, 2 deletions
diff --git a/bridge/config/config.go b/bridge/config/config.go
index 84e8f75f..2d20c11f 100644
--- a/bridge/config/config.go
+++ b/bridge/config/config.go
@@ -138,6 +138,7 @@ 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 e81d0783..e37208b7 100644
--- a/bridge/discord/discord.go
+++ b/bridge/discord/discord.go
@@ -381,6 +381,19 @@ 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.
@@ -430,3 +443,11 @@ 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 e265e62b..1e958a86 100644
--- a/gateway/gateway.go
+++ b/gateway/gateway.go
@@ -306,8 +306,6 @@ 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, "")
@@ -315,6 +313,7 @@ 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 56573f74..b07e5781 100644
--- a/gateway/router.go
+++ b/gateway/router.go
@@ -132,6 +132,9 @@ 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 d9d596e5..6429e08a 100644
--- a/matterbridge.toml.sample
+++ b/matterbridge.toml.sample
@@ -724,6 +724,12 @@ 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