Skip to content

Commit aa7b94a

Browse files
committed
feat: forward important events to alerts channel
1 parent 32454dd commit aa7b94a

File tree

6 files changed

+67
-28
lines changed

6 files changed

+67
-28
lines changed

config.yaml.example

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ bot:
2121
# Channel where audit events (message edits, deletes, AutoMod actions, etc)
2222
# are posted.
2323
discord_log_channel_id: ""
24+
# (Optional) Channel where important events are forwarded to, and if configured
25+
# pings the configured moderator role.
26+
discord_alert_channel_id: ""
27+
# (Optional) Role ID of moderators.
28+
discord_mod_role_id: ""
2429
# Populate the below with the provided URL when setting up a new webhook inside
2530
# of Discord. This is where we forward GitHub commit events to.
2631
#

internal/bot/handler/event/automod.go

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -23,27 +23,32 @@ func (h *Handler) AutoModExecution(
2323
return
2424
}
2525

26-
s.ChannelMessageSendEmbed(h.Settings.LogChannel, &discordgo.MessageEmbed{
27-
Title: ":shield: AutoMod alert",
28-
Description: fmt.Sprintf(
29-
"Message sent by <@!%s> in <#%s> flagged by AutoMod. _Please exercise caution: these messages may contain malicious links, phishing attempts, or other harmful content_.",
30-
user.ID,
31-
am.ChannelID,
32-
),
33-
Timestamp: time.Now().Format(time.RFC3339),
34-
Color: embedDeleteColor,
35-
Footer: &discordgo.MessageEmbedFooter{
36-
Text: fmt.Sprintf("Rule: %s", am.RuleID),
37-
},
38-
Author: &discordgo.MessageEmbedAuthor{
39-
Name: user.Username,
40-
IconURL: user.AvatarURL("256"),
41-
},
42-
Fields: []*discordgo.MessageEmbedField{
43-
{
44-
Name: "Contents",
45-
Value: truncateContent(am.Content),
26+
message, _ := s.ChannelMessageSendEmbed(
27+
h.Settings.LogChannel,
28+
&discordgo.MessageEmbed{
29+
Title: ":shield: AutoMod alert",
30+
Description: fmt.Sprintf(
31+
"Message sent by <@!%s> in <#%s> flagged by AutoMod. _Please exercise caution: these messages may contain malicious links, phishing attempts, or other harmful content_.",
32+
user.ID,
33+
am.ChannelID,
34+
),
35+
Timestamp: time.Now().Format(time.RFC3339),
36+
Color: embedDeleteColor,
37+
Footer: &discordgo.MessageEmbedFooter{
38+
Text: fmt.Sprintf("Rule: %s", am.RuleID),
39+
},
40+
Author: &discordgo.MessageEmbedAuthor{
41+
Name: user.Username,
42+
IconURL: user.AvatarURL("256"),
43+
},
44+
Fields: []*discordgo.MessageEmbedField{
45+
{
46+
Name: "Contents",
47+
Value: truncateContent(am.Content),
48+
},
4649
},
4750
},
48-
})
51+
)
52+
53+
h.ForwardAlert(s, message, false)
4954
}

internal/bot/handler/event/event.go

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func (h *Handler) ProcessSpam(
102102

103103
if deleted > 1 &&
104104
canViewChannel(session, message.GuildID, message.ChannelID) {
105-
session.ChannelMessageSendEmbed(
105+
message, _ := session.ChannelMessageSendEmbed(
106106
h.Settings.LogChannel,
107107
&discordgo.MessageEmbed{
108108
Title: ":shield: Anti-spam alert",
@@ -129,5 +129,28 @@ func (h *Handler) ProcessSpam(
129129
Fields: fields,
130130
},
131131
)
132+
133+
h.ForwardAlert(session, message, true)
134+
}
135+
}
136+
137+
func (h *Handler) ForwardAlert(
138+
session *discordgo.Session,
139+
message *discordgo.Message,
140+
ping bool,
141+
) {
142+
if h.Settings.AlertChannel != "" {
143+
session.ChannelMessageSendReply(
144+
h.Settings.AlertChannel,
145+
"",
146+
message.Forward(),
147+
)
148+
149+
if ping && h.Settings.ModRole != "" {
150+
session.ChannelMessageSend(
151+
h.Settings.AlertChannel,
152+
fmt.Sprintf("<@&%s>", h.Settings.ModRole),
153+
)
154+
}
132155
}
133156
}

internal/bot/handler/event/member_add.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func (h *Handler) GuildMemberAdd(
2828
age := m.JoinedAt.UTC().Sub(created.UTC())
2929

3030
if age <= h.Settings.MinumumAccountAge {
31-
s.ChannelMessageSendEmbed(
31+
message, _ := s.ChannelMessageSendEmbed(
3232
h.Settings.LogChannel,
3333
&discordgo.MessageEmbed{
3434
Title: ":shield: Suspected spam or advertising account",
@@ -54,5 +54,7 @@ func (h *Handler) GuildMemberAdd(
5454
},
5555
},
5656
)
57+
58+
h.ForwardAlert(s, message, false)
5759
}
5860
}

internal/bot/handler/event/member_remove.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func (h *Handler) GuildMemberRemove(
5555
}
5656

5757
if action != "" {
58-
s.ChannelMessageSendEmbed(
58+
message, _ := s.ChannelMessageSendEmbed(
5959
h.Settings.LogChannel,
6060
&discordgo.MessageEmbed{
6161
Description: fmt.Sprintf(
@@ -75,5 +75,7 @@ func (h *Handler) GuildMemberRemove(
7575
Fields: fields,
7676
},
7777
)
78+
79+
h.ForwardAlert(s, message, false)
7880
}
7981
}

internal/config/config_settings.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ import (
1010
)
1111

1212
type BotSettings struct {
13-
Token string `yaml:"discord_token"`
14-
Prefix string `yaml:"discord_prefix"`
15-
Commands []string `yaml:"discord_commands"`
16-
LogChannel string `yaml:"discord_log_channel_id"`
13+
Token string `yaml:"discord_token"`
14+
Prefix string `yaml:"discord_prefix"`
15+
Commands []string `yaml:"discord_commands"`
16+
LogChannel string `yaml:"discord_log_channel_id"`
17+
AlertChannel string `yaml:"discord_alert_channel_id"`
18+
ModRole string `yaml:"discord_mod_role_id"`
1719

1820
GithubWebhookID string `yaml:"discord_github_webhook_id"`
1921
GithubWebhookToken string `yaml:"discord_github_webhook_token"`

0 commit comments

Comments
 (0)