From 80895deae2f20ab8844bec7b0e8b38c7d1a609f4 Mon Sep 17 00:00:00 2001
From: Wim <wim@42.be>
Date: Sat, 18 Mar 2017 16:50:09 +0100
Subject: [PATCH] Replace role ids in mentions to role names (discord). Closes
 #133

* The bot needs to have the "Manage Roles" permission for this to work.
(see Server settings - Roles - General Permissions)
---
 bridge/discord/discord.go | 15 +++++++++++++++
 matterbridge.toml.sample  |  1 +
 2 files changed, 16 insertions(+)

diff --git a/bridge/discord/discord.go b/bridge/discord/discord.go
index 06508b84..1cf81337 100644
--- a/bridge/discord/discord.go
+++ b/bridge/discord/discord.go
@@ -122,6 +122,9 @@ func (b *bdiscord) messageCreate(s *discordgo.Session, m *discordgo.MessageCreat
 		channelName = "ID:" + m.ChannelID
 	}
 	username := b.getNick(m.Author)
+	if len(m.MentionRoles) > 0 {
+		m.Message.Content = b.replaceRoleMentions(m.Message.Content)
+	}
 	b.Remote <- config.Message{Username: username, Text: m.ContentWithMentionsReplaced(), Channel: channelName,
 		Account: b.Account, Avatar: "https://cdn.discordapp.com/avatars/" + m.Author.ID + "/" + m.Author.Avatar + ".jpg"}
 }
@@ -180,3 +183,15 @@ func (b *bdiscord) getChannelName(id string) string {
 	}
 	return ""
 }
+
+func (b *bdiscord) replaceRoleMentions(text string) string {
+	roles, err := b.c.GuildRoles(b.guildID)
+	if err != nil {
+		flog.Debugf("%#v", string(err.(*discordgo.RESTError).ResponseBody))
+		return text
+	}
+	for _, role := range roles {
+		text = strings.Replace(text, "<@&"+role.ID+">", "@"+role.Name, -1)
+	}
+	return text
+}
diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample
index 002acd15..52438ffd 100644
--- a/matterbridge.toml.sample
+++ b/matterbridge.toml.sample
@@ -377,6 +377,7 @@ ShowJoinPart=false
 #Token to connect with Discord API
 #You can get your token by following the instructions on 
 #https://github.com/reactiflux/discord-irc/wiki/Creating-a-discord-bot-&-getting-a-token
+#If you want roles/groups mentions to be shown with names instead of ID, you'll need to give your bot the "Manage Roles" permission.
 #REQUIRED
 Token="Yourtokenhere"