Skip to content

Commit ef44f2b

Browse files
authored
Merge pull request #1580 from crazy-max/discord-renderembeds
notif(discord): add renderEmbeds option
2 parents a89c077 + dff82a3 commit ef44f2b

File tree

4 files changed

+49
-39
lines changed

4 files changed

+49
-39
lines changed

docs/notif/discord.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Allow sending notifications to your Discord channel.
1515
- "<@124>"
1616
- "<@125>"
1717
- "<@&200>"
18+
renderEmbeds: true
1819
renderFields: true
1920
timeout: 10s
2021
templateBody: |
@@ -26,14 +27,16 @@ Allow sending notifications to your Discord channel.
2627
| `webhookURL` | | Discord [incoming webhook URL](https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks) |
2728
| `webhookURLFile` | | Use content of secret file as webhook URL if `webhookURL` is not defined |
2829
| `mentions` | | List of users or roles to notify |
29-
| `renderFields` | `true` | Render [field objects](https://discordjs.guide/popular-topics/embeds.html) |
30+
| `renderEmbeds` | `true` | Render [message embeds](https://discordjs.guide/legacy/popular-topics/embeds) |
31+
| `renderFields` | `true` | Render [field objects](https://discordjs.guide/legacy/popular-topics/embeds) in message embeds |
3032
| `timeout` | `10s` | Timeout specifies a time limit for the request to be made |
3133
| `templateBody`[^1] | See [below](#default-templatebody) | [Notification template](../faq.md#notification-template) for message body |
3234

3335
!!! abstract "Environment variables"
3436
* `DIUN_NOTIF_DISCORD_WEBHOOKURL`
3537
* `DIUN_NOTIF_DISCORD_WEBHOOKURLFILE`
3638
* `DIUN_NOTIF_DISCORD_MENTIONS` (comma separated)
39+
* `DIUN_NOTIF_DISCORD_RENDEREMBEDS`
3740
* `DIUN_NOTIF_DISCORD_RENDERFIELDS`
3841
* `DIUN_NOTIF_DISCORD_TIMEOUT`
3942
* `DIUN_NOTIF_DISCORD_TEMPLATEBODY`

internal/config/config_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ func TestLoadFile(t *testing.T) {
9090
"<@125>",
9191
"<@&200>",
9292
},
93+
RenderEmbeds: utl.NewTrue(),
9394
RenderFields: utl.NewTrue(),
9495
Timeout: utl.NewDuration(10 * time.Second),
9596
TemplateBody: model.NotifDefaultTemplateBody,

internal/model/notif_discord.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ type NotifDiscord struct {
1111
WebhookURL string `yaml:"webhookURL,omitempty" json:"webhookURL,omitempty" validate:"omitempty"`
1212
WebhookURLFile string `yaml:"webhookURLFile,omitempty" json:"webhookURLFile,omitempty" validate:"omitempty,file"`
1313
Mentions []string `yaml:"mentions,omitempty" json:"mentions,omitempty"`
14+
RenderEmbeds *bool `yaml:"renderEmbeds,omitempty" json:"renderEmbeds,omitempty" validate:"required"`
1415
RenderFields *bool `yaml:"renderFields,omitempty" json:"renderFields,omitempty" validate:"required"`
1516
Timeout *time.Duration `yaml:"timeout,omitempty" json:"timeout,omitempty" validate:"required"`
1617
TemplateBody string `yaml:"templateBody,omitempty" json:"templateBody,omitempty" validate:"required"`
@@ -25,6 +26,7 @@ func (s *NotifDiscord) GetDefaults() *NotifDiscord {
2526

2627
// SetDefaults sets the default values
2728
func (s *NotifDiscord) SetDefaults() {
29+
s.RenderEmbeds = utl.NewTrue()
2830
s.RenderFields = utl.NewTrue()
2931
s.Timeout = utl.NewDuration(10 * time.Second)
3032
s.TemplateBody = NotifDefaultTemplateBody

internal/notif/discord/client.go

Lines changed: 42 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -69,44 +69,40 @@ func (c *Client) Send(entry model.NotifEntry) error {
6969
}
7070
content.WriteString(string(body))
7171

72-
var fields []EmbedField
73-
if *c.cfg.RenderFields {
74-
fields = []EmbedField{
75-
{
76-
Name: "Hostname",
77-
Value: c.meta.Hostname,
78-
},
79-
{
80-
Name: "Provider",
81-
Value: entry.Provider,
82-
},
83-
{
84-
Name: "Created",
85-
Value: entry.Manifest.Created.Format("Jan 02, 2006 15:04:05 UTC"),
86-
},
87-
{
88-
Name: "Digest",
89-
Value: entry.Manifest.Digest.String(),
90-
},
91-
{
92-
Name: "Platform",
93-
Value: entry.Manifest.Platform,
94-
},
95-
}
96-
if len(entry.Image.HubLink) > 0 {
97-
fields = append(fields, EmbedField{
98-
Name: "HubLink",
99-
Value: entry.Image.HubLink,
100-
})
72+
var embeds []Embed
73+
if *c.cfg.RenderEmbeds {
74+
var fields []EmbedField
75+
if *c.cfg.RenderFields {
76+
fields = []EmbedField{
77+
{
78+
Name: "Hostname",
79+
Value: c.meta.Hostname,
80+
},
81+
{
82+
Name: "Provider",
83+
Value: entry.Provider,
84+
},
85+
{
86+
Name: "Created",
87+
Value: entry.Manifest.Created.Format("Jan 02, 2006 15:04:05 UTC"),
88+
},
89+
{
90+
Name: "Digest",
91+
Value: entry.Manifest.Digest.String(),
92+
},
93+
{
94+
Name: "Platform",
95+
Value: entry.Manifest.Platform,
96+
},
97+
}
98+
if len(entry.Image.HubLink) > 0 {
99+
fields = append(fields, EmbedField{
100+
Name: "HubLink",
101+
Value: entry.Image.HubLink,
102+
})
103+
}
101104
}
102-
}
103-
104-
dataBuf := new(bytes.Buffer)
105-
if err := json.NewEncoder(dataBuf).Encode(Message{
106-
Content: content.String(),
107-
Username: c.meta.Name,
108-
AvatarURL: c.meta.Logo,
109-
Embeds: []Embed{
105+
embeds = []Embed{
110106
{
111107
Author: EmbedAuthor{
112108
Name: c.meta.Name,
@@ -118,7 +114,15 @@ func (c *Client) Send(entry model.NotifEntry) error {
118114
Text: fmt.Sprintf("%s © %d %s %s", c.meta.Author, time.Now().Year(), c.meta.Name, c.meta.Version),
119115
},
120116
},
121-
},
117+
}
118+
}
119+
120+
dataBuf := new(bytes.Buffer)
121+
if err := json.NewEncoder(dataBuf).Encode(Message{
122+
Content: content.String(),
123+
Username: c.meta.Name,
124+
AvatarURL: c.meta.Logo,
125+
Embeds: embeds,
122126
}); err != nil {
123127
return err
124128
}

0 commit comments

Comments
 (0)