diff --git a/bridge/discord/discord.go b/bridge/discord/discord.go index 9cc83ddc..9a32a5ea 100644 --- a/bridge/discord/discord.go +++ b/bridge/discord/discord.go @@ -32,6 +32,8 @@ type Bdiscord struct { userMemberMap map[string]*discordgo.Member nickMemberMap map[string]*discordgo.Member + allowedMentions *discordgo.MessageAllowedMentions + // Webhook specific logic useAutoWebhooks bool transmitter *transmitter.Transmitter @@ -43,6 +45,8 @@ func New(cfg *bridge.Config) bridge.Bridger { b.nickMemberMap = make(map[string]*discordgo.Member) b.channelInfoMap = make(map[string]*config.ChannelInfo) + b.allowedMentions = b.getAllowedMentions() + b.useAutoWebhooks = b.GetBool("AutoWebhooks") if b.useAutoWebhooks { b.Log.Debug("Using automatic webhooks") diff --git a/bridge/discord/helpers.go b/bridge/discord/helpers.go index 9545a3ae..bc51293b 100644 --- a/bridge/discord/helpers.go +++ b/bridge/discord/helpers.go @@ -9,6 +9,24 @@ import ( "github.com/matterbridge/discordgo" ) +func (b *Bdiscord) getAllowedMentions() *discordgo.MessageAllowedMentions { + // Allow only the mention types that are not disabled by the config (default is all allowed) + allowedMentionTypes := make([]discordgo.AllowedMentionType, 0, 3) + if !b.GetBool("DisablePingEveryoneHere") { + allowedMentionTypes = append(allowedMentionTypes, discordgo.AllowedMentionTypeEveryone) + } + if !b.GetBool("DisablePingRoles") { + allowedMentionTypes = append(allowedMentionTypes, discordgo.AllowedMentionTypeRoles) + } + if !b.GetBool("DisablePingUsers") { + allowedMentionTypes = append(allowedMentionTypes, discordgo.AllowedMentionTypeUsers) + } + + return &discordgo.MessageAllowedMentions{ + Parse: allowedMentionTypes, + } +} + func (b *Bdiscord) getNick(user *discordgo.User, guildID string) string { b.membersMutex.RLock() defer b.membersMutex.RUnlock() diff --git a/bridge/discord/webhook.go b/bridge/discord/webhook.go index 3e947d82..295d3140 100644 --- a/bridge/discord/webhook.go +++ b/bridge/discord/webhook.go @@ -47,9 +47,8 @@ func (b *Bdiscord) maybeGetLocalAvatar(msg *config.Message) string { // Returns messageID and error. func (b *Bdiscord) webhookSend(msg *config.Message, channelID string) (*discordgo.Message, error) { var ( - res *discordgo.Message - err error - allowedMentionTypes []discordgo.AllowedMentionType + res *discordgo.Message + err error ) // If avatar is unset, mutate the message to include the local avatar (but only if settings say we should do this) @@ -57,18 +56,6 @@ func (b *Bdiscord) webhookSend(msg *config.Message, channelID string) (*discordg msg.Avatar = b.maybeGetLocalAvatar(msg) } - // Allow only the mention types that are not disabled by the config - allowedMentionTypes = make([]discordgo.AllowedMentionType, 0, 3) - if !b.GetBool("DisablePingEveryoneHere") { - allowedMentionTypes = append(allowedMentionTypes, discordgo.AllowedMentionTypeEveryone) - } - if !b.GetBool("DisablePingRoles") { - allowedMentionTypes = append(allowedMentionTypes, discordgo.AllowedMentionTypeRoles) - } - if !b.GetBool("DisablePingUsers") { - allowedMentionTypes = append(allowedMentionTypes, discordgo.AllowedMentionTypeUsers) - } - // WebhookParams can have either `Content` or `File`. // We can't send empty messages. @@ -76,12 +63,10 @@ func (b *Bdiscord) webhookSend(msg *config.Message, channelID string) (*discordg res, err = b.transmitter.Send( channelID, &discordgo.WebhookParams{ - Content: msg.Text, - Username: msg.Username, - AvatarURL: msg.Avatar, - AllowedMentions: &discordgo.MessageAllowedMentions{ - Parse: allowedMentionTypes, - }, + Content: msg.Text, + Username: msg.Username, + AvatarURL: msg.Avatar, + AllowedMentions: b.allowedMentions, }, ) if err != nil {