Thumbnail

rani/matterbridge.git

Clone URL: https://git.buni.party/rani/matterbridge.git

commit a8f24a9cd15b4c5fddcea32db12ee03bb39d25dc Author: Sacha Aury - Wolfman <sacha.aury@gmail.com> Date: Mon Jun 26 20:07:27 2017 +0000 Add webhook posting mode for discord. (#204) Using it implies to configure a Webhook on discord and set the parameter : - WebhookURL (New parameter, discord-specific) Discord API does not allow to change the name of the user posting, but webhooks does. This makes the relay much more elegant, even if we might lose some more advanced features. Signed-off-by: saury07 <sacha.aury@gmail.com> diff --git a/bridge/config/config.go b/bridge/config/config.go index 246d6b8..6244dd6 100644 --- a/bridge/config/config.go +++ b/bridge/config/config.go @@ -776 +777 @@ 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 8c7d971..e03aaa4 100644 --- a/bridge/discord/discord.go +++ b/bridge/discord/discord.go @@ -196 +198 @@ type bdiscord struct {   UseChannelID bool   userMemberMap map[string]*discordgo.Member   guildID string + webhookID string + webhookToken string   sync.RWMutex  }   @@ -356 +3712 @@ 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  }   @@ -1017 +10921 @@ 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  }   @@ -1226 +14410 @@ 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 53a584a..a5c523b 100644 --- a/matterbridge.toml.sample +++ b/matterbridge.toml.sample @@ -4546 +45410 @@ 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