Skip to content

Commit 8d659da

Browse files
authored
fix: Silent warnings should still be posted to moderator channel. (#32)
Addresses an issue in which only an ephemeral message was displayed to the user issuing the warning if the warning was silent. Now it should log it regardless.
2 parents 1d876ee + 6fe3567 commit 8d659da

File tree

1 file changed

+26
-31
lines changed

1 file changed

+26
-31
lines changed

commands/infractions.go

+26-31
Original file line numberDiff line numberDiff line change
@@ -122,25 +122,14 @@ func WarnHandler(e *handler.CommandEvent) error {
122122

123123
inf, err := model.CreateInfraction(guild.ID, user.ID, e.User().ID, reason, severity, silent)
124124
if err != nil {
125+
_ = e.CreateMessage(discord.NewMessageCreateBuilder().
126+
SetEphemeral(true).
127+
SetContent("Failed to create infraction.").Build())
125128
return fmt.Errorf("failed to create infraction: %w", err)
126129
}
127130

128131
slog.DebugContext(ctx, "Created infraction.", "infraction", inf.Sqid())
129132

130-
if inf.Silent {
131-
err = e.CreateMessage(discord.NewMessageCreateBuilder().
132-
SetEphemeral(true).
133-
SetContent(fmt.Sprintf("A silent warning has been added for %s", user.Mention())).Build())
134-
if err != nil {
135-
slog.Error("Failed to respond to 'warn' command interaction.",
136-
"err", err,
137-
"guildID", guild.ID,
138-
"userID", user.ID)
139-
return err
140-
}
141-
return nil
142-
}
143-
144133
embed := discord.NewEmbedBuilder().
145134
SetTitlef(`Warning in "%s"`, guild.Name).
146135
SetDescription(inf.Reason).
@@ -149,27 +138,32 @@ func WarnHandler(e *handler.CommandEvent) error {
149138

150139
slog.DebugContext(ctx, "Created embed.")
151140

152-
channel, err := e.Client().Rest().CreateDMChannel(user.ID)
153-
if err != nil {
154-
return e.CreateMessage(discord.NewMessageCreateBuilder().
155-
SetEphemeral(true).
156-
SetContent(fmt.Sprintf("Failed to send warning to %s.", user.Mention())).Build())
141+
failedToSend := false
142+
if !inf.Silent {
143+
channel, err := e.Client().Rest().CreateDMChannel(user.ID)
144+
if err != nil {
145+
failedToSend = true
146+
}
147+
_, err = e.Client().Rest().CreateMessage(channel.ID(), discord.NewMessageCreateBuilder().
148+
SetEmbeds(embed.Build()).
149+
Build())
150+
if err != nil {
151+
failedToSend = true
152+
}
157153
}
158-
_, err = e.Client().Rest().CreateMessage(channel.ID(), discord.NewMessageCreateBuilder().
154+
155+
message := discord.NewMessageCreateBuilder().
156+
SetContentf("## %s %s.",
157+
utils.Iif(inf.Silent, "Silent warning created for",
158+
utils.Iif(failedToSend, "Failed to send warning to", "Warning sent to")),
159+
user.Mention(),
160+
).
159161
SetEmbeds(embed.Build()).
160-
Build())
161-
if err != nil {
162-
return e.CreateMessage(discord.NewMessageCreateBuilder().
163-
SetEphemeral(true).
164-
SetContent(fmt.Sprintf("Failed to send warning to %s.", user.Mention())).Build())
165-
}
162+
Build()
166163

167164
guildSettings, err := model.GetGuildSettings(guild.ID)
168165
if err == nil && guildSettings.ModeratorChannel != 0 {
169-
_, err = e.Client().Rest().CreateMessage(guildSettings.ModeratorChannel, discord.NewMessageCreateBuilder().
170-
SetContent(fmt.Sprintf("## Warning sent to %s.", user.Mention())).
171-
SetEmbeds(embed.Build()).
172-
Build())
166+
_, err = e.Client().Rest().CreateMessage(guildSettings.ModeratorChannel, message)
173167
if err != nil {
174168
slog.Error("Failed to send warning to moderator channel.",
175169
"err", err,
@@ -181,7 +175,8 @@ func WarnHandler(e *handler.CommandEvent) error {
181175

182176
return e.CreateMessage(discord.NewMessageCreateBuilder().
183177
SetEphemeral(true).
184-
SetContent(fmt.Sprintf("Warning sent to %s.", user.Mention())).Build())
178+
SetContentf("Warning created for %s.",
179+
user.Mention()).Build())
185180
}
186181

187182
func severityToColor(severity float64) int {

0 commit comments

Comments
 (0)