aboutsummaryrefslogtreecommitdiff
path: root/models/webhook_discord.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/webhook_discord.go')
-rw-r--r--models/webhook_discord.go53
1 files changed, 38 insertions, 15 deletions
diff --git a/models/webhook_discord.go b/models/webhook_discord.go
index 27b01bc3..3755d3b5 100644
--- a/models/webhook_discord.go
+++ b/models/webhook_discord.go
@@ -68,22 +68,35 @@ func DiscordSHALinkFormatter(url string, text string) string {
return fmt.Sprintf("[`%s`](%s)", text, url)
}
-func getDiscordCreatePayload(p *api.CreatePayload, slack *SlackMeta) (*DiscordPayload, error) {
- // Created tag/branch
+// getDiscordCreatePayload composes Discord payload for create new branch or tag.
+func getDiscordCreatePayload(p *api.CreatePayload) (*DiscordPayload, error) {
refName := git.RefEndName(p.Ref)
-
repoLink := DiscordLinkFormatter(p.Repo.HTMLURL, p.Repo.Name)
refLink := DiscordLinkFormatter(p.Repo.HTMLURL+"/src/"+refName, refName)
content := fmt.Sprintf("Created new %s: %s/%s", p.RefType, repoLink, refLink)
- color, _ := strconv.ParseInt(strings.TrimLeft(slack.Color, "#"), 16, 32)
return &DiscordPayload{
- Username: slack.Username,
- AvatarURL: slack.IconURL,
Embeds: []*DiscordEmbedObject{{
Description: content,
URL: setting.AppUrl + p.Sender.UserName,
- Color: int(color),
+ Author: &DiscordEmbedAuthorObject{
+ Name: p.Sender.UserName,
+ IconURL: p.Sender.AvatarUrl,
+ },
+ }},
+ }, nil
+}
+
+// getDiscordDeletePayload composes Discord payload for delete a branch or tag.
+func getDiscordDeletePayload(p *api.DeletePayload) (*DiscordPayload, error) {
+ refName := git.RefEndName(p.Ref)
+ repoLink := DiscordLinkFormatter(p.Repo.HTMLURL, p.Repo.Name)
+ content := fmt.Sprintf("Deleted %s: %s/%s", p.RefType, repoLink, refName)
+
+ return &DiscordPayload{
+ Embeds: []*DiscordEmbedObject{{
+ Description: content,
+ URL: setting.AppUrl + p.Sender.UserName,
Author: &DiscordEmbedAuthorObject{
Name: p.Sender.UserName,
IconURL: p.Sender.AvatarUrl,
@@ -206,22 +219,32 @@ func getDiscordPullRequestPayload(p *api.PullRequestPayload, slack *SlackMeta) (
}, nil
}
-func GetDiscordPayload(p api.Payloader, event HookEventType, meta string) (*DiscordPayload, error) {
- d := new(DiscordPayload)
-
+func GetDiscordPayload(p api.Payloader, event HookEventType, meta string) (payload *DiscordPayload, err error) {
slack := &SlackMeta{}
if err := json.Unmarshal([]byte(meta), &slack); err != nil {
- return d, fmt.Errorf("GetDiscordPayload meta json: %v", err)
+ return nil, fmt.Errorf("json.Unmarshal: %v", err)
}
switch event {
case HOOK_EVENT_CREATE:
- return getDiscordCreatePayload(p.(*api.CreatePayload), slack)
+ payload, err = getDiscordCreatePayload(p.(*api.CreatePayload))
+ case HOOK_EVENT_DELETE:
+ payload, err = getDiscordDeletePayload(p.(*api.DeletePayload))
case HOOK_EVENT_PUSH:
- return getDiscordPushPayload(p.(*api.PushPayload), slack)
+ payload, err = getDiscordPushPayload(p.(*api.PushPayload), slack)
case HOOK_EVENT_PULL_REQUEST:
- return getDiscordPullRequestPayload(p.(*api.PullRequestPayload), slack)
+ payload, err = getDiscordPullRequestPayload(p.(*api.PullRequestPayload), slack)
+ }
+ if err != nil {
+ return nil, fmt.Errorf("event '%s': %v", event, err)
+ }
+
+ payload.Username = slack.Username
+ payload.AvatarURL = slack.IconURL
+ if len(payload.Embeds) > 0 {
+ color, _ := strconv.ParseInt(strings.TrimLeft(slack.Color, "#"), 16, 32)
+ payload.Embeds[0].Color = int(color)
}
- return d, nil
+ return payload, nil
}