diff --git a/bridge/discord/discord.go b/bridge/discord/discord.go index 5ae6c572..8a96014d 100644 --- a/bridge/discord/discord.go +++ b/bridge/discord/discord.go @@ -36,6 +36,9 @@ type Bdiscord struct { userMemberMap map[string]*discordgo.Member nickMemberMap map[string]*discordgo.Member + noEmbedPartUrls bool + noEmbedUrls bool + // Webhook specific logic useAutoWebhooks bool transmitter *transmitter.Transmitter @@ -57,6 +60,12 @@ func New(cfg *bridge.Config) bridge.Bridger { b.nickMemberMap = make(map[string]*discordgo.Member) b.channelInfoMap = make(map[string]*config.ChannelInfo) + b.noEmbedPartUrls = b.GetBool("NoEmbedPartUrls") + b.noEmbedUrls = b.GetBool("NoEmbedUrls") + if b.noEmbedPartUrls && b.noEmbedUrls { + b.Log.Info("NoEmbedUrls supersedes NoEmbedPartUrls when both are specified.") + } + b.useAutoWebhooks = b.GetBool("AutoWebhooks") if b.useAutoWebhooks { b.Log.Debug("Using automatic webhooks") @@ -269,6 +278,10 @@ func (b *Bdiscord) Send(msg config.Message) (string, error) { msg.Text = "_" + msg.Text + "_" } + if b.noEmbedUrls || (msg.Event == config.EventJoinLeave && b.noEmbedPartUrls) { + disableEmbedUrls(&msg.Text) + } + // Handle prefix hint for unthreaded messages. if msg.ParentNotFound() { msg.ParentID = "" diff --git a/bridge/discord/helpers.go b/bridge/discord/helpers.go index 2e18f46c..2a62595a 100644 --- a/bridge/discord/helpers.go +++ b/bridge/discord/helpers.go @@ -233,6 +233,11 @@ func (b *Bdiscord) splitURL(url string) (string, string, bool) { return webhookURLSplit[webhookIdxID], webhookURLSplit[webhookIdxToken], true } +func disableEmbedUrls(msg *string) { + regex := regexp.MustCompile(`(\w+://\S+)`) + *msg = regex.ReplaceAllString(*msg, "<$1>") +} + func enumerateUsernames(s string) []string { onlySpace := true for _, r := range s { diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample index 41ab44bf..c8fefad9 100644 --- a/matterbridge.toml.sample +++ b/matterbridge.toml.sample @@ -939,6 +939,15 @@ IgnoreNicks="" # IgnoreMessages="^~~ badword" IgnoreMessages="" +# Prevent URL embeds by encasing URLs in <> angle brackets. +# Useful if trolls are a problem on the other end of your bridge. +NoEmbedUrls=false + +# Prevent URL embeds in part/quit messages by encasing URLs in <> angle brackets. +# Useful if trolls spam in their quit messages or you're tired of seeing embeds for +# IRC client homepages. +NoEmbedPartUrls=false + # ReplaceMessages replaces substrings of messages in outgoing messages. # Regular expressions are supported. #