summaryrefslogtreecommitdiffstats
path: root/bridge/discord/discord.go
diff options
context:
space:
mode:
Diffstat (limited to 'bridge/discord/discord.go')
-rw-r--r--bridge/discord/discord.go63
1 files changed, 53 insertions, 10 deletions
diff --git a/bridge/discord/discord.go b/bridge/discord/discord.go
index 1ae655bf..502e6e41 100644
--- a/bridge/discord/discord.go
+++ b/bridge/discord/discord.go
@@ -261,16 +261,11 @@ func (b *Bdiscord) Send(msg config.Message) (string, error) {
return "", err
}
}
- msg, err := b.webhookExecute(
- wID,
- wToken,
- true,
- &discordgo.WebhookParams{
- Content: msg.Text,
- Username: msg.Username,
- AvatarURL: msg.Avatar,
- })
- return msg.ID, err
+ msg, err := b.webhookSend(&msg, wID, wToken)
+ if err != nil {
+ return "", err
+ }
+ return msg.ID, nil
}
b.Log.Debugf("Broadcasting using token (API)")
@@ -376,3 +371,51 @@ func (b *Bdiscord) handleUploadFile(msg *config.Message, channelID string) (stri
}
return "", nil
}
+
+// webhookSend send one or more message via webhook, taking care of file
+// uploads (from slack, telegram or mattermost).
+// Returns messageID and error.
+func (b *Bdiscord) webhookSend(msg *config.Message, webhookID, token string) (*discordgo.Message, error) {
+ var err error
+
+ // WebhookParams can have either `Content` or `File`.
+ res, err := b.c.WebhookExecute(
+ webhookID,
+ token,
+ true,
+ &discordgo.WebhookParams{
+ Content: msg.Text,
+ Username: msg.Username,
+ AvatarURL: msg.Avatar,
+ },
+ )
+ if err != nil {
+ return nil, err
+ }
+
+ if msg.Extra != nil {
+ for _, f := range msg.Extra["file"] {
+ fi := f.(config.FileInfo)
+ file := discordgo.File{
+ Name: fi.Name,
+ ContentType: "",
+ Reader: bytes.NewReader(*fi.Data),
+ }
+ _, err := b.c.WebhookExecute(
+ webhookID,
+ token,
+ false,
+ &discordgo.WebhookParams{
+ Username: msg.Username,
+ AvatarURL: msg.Avatar,
+ File: &file,
+ },
+ )
+ if err != nil {
+ return nil, fmt.Errorf("file upload failed: %s", err)
+ }
+ }
+ }
+
+ return res, nil
+}