diff --git a/bridge/config/config.go b/bridge/config/config.go index 246d6b82..6244dd6a 100644 --- a/bridge/config/config.go +++ b/bridge/config/config.go @@ -77,6 +77,7 @@ type Protocol struct { UseSASL bool // IRC UseTLS bool // IRC UseFirstName bool // telegram + WebhookURL string // discord } type ChannelOptions struct { diff --git a/bridge/discord/discord.go b/bridge/discord/discord.go index 8c7d9711..e03aaa4d 100644 --- a/bridge/discord/discord.go +++ b/bridge/discord/discord.go @@ -19,6 +19,8 @@ type bdiscord struct { UseChannelID bool userMemberMap map[string]*discordgo.Member guildID string + webhookID string + webhookToken string sync.RWMutex } @@ -35,6 +37,12 @@ func New(cfg config.Protocol, account string, c chan config.Message) *bdiscord { b.Remote = c b.Account = account b.userMemberMap = make(map[string]*discordgo.Member) + if b.Config.WebhookURL != "" { + flog.Debug("Configuring Discord Incoming Webhook") + webhookURLSplit := strings.Split(b.Config.WebhookURL, "/") + b.webhookToken = webhookURLSplit[len(webhookURLSplit)-1] + b.webhookID = webhookURLSplit[len(webhookURLSplit)-2] + } return b } @@ -101,7 +109,21 @@ func (b *bdiscord) Send(msg config.Message) error { flog.Errorf("Could not find channelID for %v", msg.Channel) return nil } - b.c.ChannelMessageSend(channelID, msg.Username+msg.Text) + if b.Config.WebhookURL == ""{ + flog.Debugf("Broadcasting using API") + b.c.ChannelMessageSend(channelID, msg.Username+msg.Text) + } else { + flog.Debugf("Broadcasting using Webhook") + b.c.WebhookExecute( + b.webhookID, + b.webhookToken, + true, + &discordgo.WebhookParams{ + Content: msg.Text, + Username: msg.Username, + AvatarURL: msg.Avatar, + }) + } return nil } @@ -122,6 +144,10 @@ func (b *bdiscord) messageCreate(s *discordgo.Session, m *discordgo.MessageCreat if m.Author.Username == b.Nick { return } + // if using webhooks, do not relay if it's ours + if b.Config.WebhookURL != "" && m.Author.Bot && m.Author.ID == b.webhookID { + return + } if len(m.Attachments) > 0 { for _, attach := range m.Attachments { m.Content = m.Content + "\n" + attach.URL diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample index 53a584aa..a5c523bf 100644 --- a/matterbridge.toml.sample +++ b/matterbridge.toml.sample @@ -454,6 +454,10 @@ Server="yourservername" #OPTIONAL (default false) ShowEmbeds=false +#Specify WebhookURL. If given, will relay messages using the Webhook, which gives a better look to messages. +#OPTIONAL (default empty) +WebhookURL="Yourwebhooktokenhere" + #Disable sending of edits to other bridges #OPTIONAL (default false) EditDisable=false