mirror of
https://github.com/42wim/matterbridge.git
synced 2024-12-22 11:12:44 +01:00
discord: Add AllowMention to restrict allowed mentions (#1462)
* Add DisablePingEveryoneHere/DisablePingRoles/DisablePingUsers keys to config * Add basic AllowedMentions behavior to discord webhooks * Initialize b.AllowedMentions on Discord Bridger init * Call b.getAllowedMentions on each webhook to allow config hot reloading * Add AllowedMentions on all Discord webhooks/messages * Add DisablePingEveryoneHere/DisablePingRoles/DisablePingUsers to matterbridge.toml.sample * Change 'Disable' for 'Allow' and revert logic in Discord AllowedMentions * Update Discord AllowedMentions in matterbridge.toml.sample * Fix typo in DisableWebPagePreview * Replace 'AllowPingEveryoneHere' with 'AllowPingEveryone' * Replace 3 AllowPingEveryone/Roles/Users bools with an array * Fix typo
This commit is contained in:
parent
a0bca42a7a
commit
ac4aee39e3
@ -85,27 +85,28 @@ type ChannelMember struct {
|
|||||||
type ChannelMembers []ChannelMember
|
type ChannelMembers []ChannelMember
|
||||||
|
|
||||||
type Protocol struct {
|
type Protocol struct {
|
||||||
AuthCode string // steam
|
AllowMention []string // discord
|
||||||
BindAddress string // mattermost, slack // DEPRECATED
|
AuthCode string // steam
|
||||||
Buffer int // api
|
BindAddress string // mattermost, slack // DEPRECATED
|
||||||
Charset string // irc
|
Buffer int // api
|
||||||
ClientID string // msteams
|
Charset string // irc
|
||||||
ColorNicks bool // only irc for now
|
ClientID string // msteams
|
||||||
Debug bool // general
|
ColorNicks bool // only irc for now
|
||||||
DebugLevel int // only for irc now
|
Debug bool // general
|
||||||
DisableWebPagePreview bool // telegram
|
DebugLevel int // only for irc now
|
||||||
EditSuffix string // mattermost, slack, discord, telegram, gitter
|
DisableWebPagePreview bool // telegram
|
||||||
EditDisable bool // mattermost, slack, discord, telegram, gitter
|
EditSuffix string // mattermost, slack, discord, telegram, gitter
|
||||||
HTMLDisable bool // matrix
|
EditDisable bool // mattermost, slack, discord, telegram, gitter
|
||||||
IconURL string // mattermost, slack
|
HTMLDisable bool // matrix
|
||||||
IgnoreFailureOnStart bool // general
|
IconURL string // mattermost, slack
|
||||||
IgnoreNicks string // all protocols
|
IgnoreFailureOnStart bool // general
|
||||||
IgnoreMessages string // all protocols
|
IgnoreNicks string // all protocols
|
||||||
Jid string // xmpp
|
IgnoreMessages string // all protocols
|
||||||
JoinDelay string // all protocols
|
Jid string // xmpp
|
||||||
Label string // all protocols
|
JoinDelay string // all protocols
|
||||||
Login string // mattermost, matrix
|
Label string // all protocols
|
||||||
LogFile string // general
|
Login string // mattermost, matrix
|
||||||
|
LogFile string // general
|
||||||
MediaDownloadBlackList []string
|
MediaDownloadBlackList []string
|
||||||
MediaDownloadPath string // Basically MediaServerUpload, but instead of uploading it, just write it to a file on the same server.
|
MediaDownloadPath string // Basically MediaServerUpload, but instead of uploading it, just write it to a file on the same server.
|
||||||
MediaDownloadSize int // all protocols
|
MediaDownloadSize int // all protocols
|
||||||
|
@ -304,7 +304,8 @@ func (b *Bdiscord) handleEventBotUser(msg *config.Message, channelID string) (st
|
|||||||
}
|
}
|
||||||
|
|
||||||
m := discordgo.MessageSend{
|
m := discordgo.MessageSend{
|
||||||
Content: msg.Username + msg.Text,
|
Content: msg.Username + msg.Text,
|
||||||
|
AllowedMentions: b.getAllowedMentions(),
|
||||||
}
|
}
|
||||||
|
|
||||||
if msg.ParentValid() {
|
if msg.ParentValid() {
|
||||||
@ -335,8 +336,9 @@ func (b *Bdiscord) handleUploadFile(msg *config.Message, channelID string) (stri
|
|||||||
Reader: bytes.NewReader(*fi.Data),
|
Reader: bytes.NewReader(*fi.Data),
|
||||||
}
|
}
|
||||||
m := discordgo.MessageSend{
|
m := discordgo.MessageSend{
|
||||||
Content: msg.Username + fi.Comment,
|
Content: msg.Username + fi.Comment,
|
||||||
Files: []*discordgo.File{&file},
|
Files: []*discordgo.File{&file},
|
||||||
|
AllowedMentions: b.getAllowedMentions(),
|
||||||
}
|
}
|
||||||
_, err = b.c.ChannelMessageSendComplex(channelID, &m)
|
_, err = b.c.ChannelMessageSendComplex(channelID, &m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -9,6 +9,30 @@ import (
|
|||||||
"github.com/matterbridge/discordgo"
|
"github.com/matterbridge/discordgo"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (b *Bdiscord) getAllowedMentions() *discordgo.MessageAllowedMentions {
|
||||||
|
// If AllowMention is not specified, then allow all mentions (default Discord behavior)
|
||||||
|
if !b.IsKeySet("AllowMention") {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, allow only the mentions that are specified
|
||||||
|
allowedMentionTypes := make([]discordgo.AllowedMentionType, 0, 3)
|
||||||
|
for _, m := range b.GetStringSlice("AllowMention") {
|
||||||
|
switch m {
|
||||||
|
case "everyone":
|
||||||
|
allowedMentionTypes = append(allowedMentionTypes, discordgo.AllowedMentionTypeEveryone)
|
||||||
|
case "roles":
|
||||||
|
allowedMentionTypes = append(allowedMentionTypes, discordgo.AllowedMentionTypeRoles)
|
||||||
|
case "users":
|
||||||
|
allowedMentionTypes = append(allowedMentionTypes, discordgo.AllowedMentionTypeUsers)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return &discordgo.MessageAllowedMentions{
|
||||||
|
Parse: allowedMentionTypes,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (b *Bdiscord) getNick(user *discordgo.User, guildID string) string {
|
func (b *Bdiscord) getNick(user *discordgo.User, guildID string) string {
|
||||||
b.membersMutex.RLock()
|
b.membersMutex.RLock()
|
||||||
defer b.membersMutex.RUnlock()
|
defer b.membersMutex.RUnlock()
|
||||||
|
@ -63,9 +63,10 @@ func (b *Bdiscord) webhookSend(msg *config.Message, channelID string) (*discordg
|
|||||||
res, err = b.transmitter.Send(
|
res, err = b.transmitter.Send(
|
||||||
channelID,
|
channelID,
|
||||||
&discordgo.WebhookParams{
|
&discordgo.WebhookParams{
|
||||||
Content: msg.Text,
|
Content: msg.Text,
|
||||||
Username: msg.Username,
|
Username: msg.Username,
|
||||||
AvatarURL: msg.Avatar,
|
AvatarURL: msg.Avatar,
|
||||||
|
AllowedMentions: b.getAllowedMentions(),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -88,10 +89,11 @@ func (b *Bdiscord) webhookSend(msg *config.Message, channelID string) (*discordg
|
|||||||
_, e2 := b.transmitter.Send(
|
_, e2 := b.transmitter.Send(
|
||||||
channelID,
|
channelID,
|
||||||
&discordgo.WebhookParams{
|
&discordgo.WebhookParams{
|
||||||
Username: msg.Username,
|
Username: msg.Username,
|
||||||
AvatarURL: msg.Avatar,
|
AvatarURL: msg.Avatar,
|
||||||
File: &file,
|
File: &file,
|
||||||
Content: content,
|
Content: content,
|
||||||
|
AllowedMentions: b.getAllowedMentions(),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if e2 != nil {
|
if e2 != nil {
|
||||||
@ -124,8 +126,9 @@ func (b *Bdiscord) handleEventWebhook(msg *config.Message, channelID string) (st
|
|||||||
if msg.ID != "" {
|
if msg.ID != "" {
|
||||||
b.Log.Debugf("Editing webhook message")
|
b.Log.Debugf("Editing webhook message")
|
||||||
err := b.transmitter.Edit(channelID, msg.ID, &discordgo.WebhookParams{
|
err := b.transmitter.Edit(channelID, msg.ID, &discordgo.WebhookParams{
|
||||||
Content: msg.Text,
|
Content: msg.Text,
|
||||||
Username: msg.Username,
|
Username: msg.Username,
|
||||||
|
AllowedMentions: b.getAllowedMentions(),
|
||||||
})
|
})
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return msg.ID, nil
|
return msg.ID, nil
|
||||||
|
@ -848,6 +848,14 @@ Server="yourservername"
|
|||||||
## All settings below can be reloaded by editing the file.
|
## All settings below can be reloaded by editing the file.
|
||||||
## They are also all optional.
|
## They are also all optional.
|
||||||
|
|
||||||
|
# AllowMention controls which mentions are allowed. If not specified, all mentions are allowed.
|
||||||
|
# Note that even when a mention is not allowed, it will still be displayed nicely and be clickable. It just prevents the ping/notification.
|
||||||
|
#
|
||||||
|
# "everyone" allows @everyone and @here mentions
|
||||||
|
# "roles" allows @role mentions
|
||||||
|
# "users" allows @user mentions
|
||||||
|
AllowMention=["everyone", "roles", "users"]
|
||||||
|
|
||||||
# ShowEmbeds shows the title, description and URL of embedded messages (sent by other bots)
|
# ShowEmbeds shows the title, description and URL of embedded messages (sent by other bots)
|
||||||
ShowEmbeds=false
|
ShowEmbeds=false
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user