feat: kick logs

This commit is contained in:
sam 2024-10-12 23:28:15 +02:00
parent 6cb515c67d
commit f524afb05b
7 changed files with 118 additions and 83 deletions

View file

@ -16,6 +16,8 @@ public class GuildMemberRemoveResponder(
DatabaseContext db,
IMemberCache memberCache,
RoleCache roleCache,
UserCache userCache,
AuditLogCache auditLogCache,
WebhookExecutorService webhookExecutor
) : IResponder<IGuildMemberRemove>
{
@ -79,6 +81,33 @@ public class GuildMemberRemoveResponder(
LogChannelType.GuildMemberRemove,
embed.Build().GetOrThrow()
);
// Check for a kick audit log event. We don't get a separate "kick" event so we have to check this manually
await Task.Delay(2000, ct);
if (!auditLogCache.TryGetKick(evt.GuildID, evt.User.ID, out var actionData))
{
return Result.Success;
}
var kick = new EmbedBuilder()
.WithTitle("User kicked")
.WithAuthor(evt.User.Tag(), iconUrl: evt.User.AvatarUrl())
.WithColour(DiscordUtils.Red)
.WithCurrentTimestamp()
.WithDescription($"<@{evt.User.ID}>");
kick.AddField(
"Responsible moderator",
await userCache.TryFormatModeratorAsync(actionData)
);
kick.AddField("Reason", actionData.Reason ?? "No reason given");
webhookExecutor.QueueLog(
guildConfig,
LogChannelType.GuildMemberKick,
kick.Build().GetOrThrow()
);
return Result.Success;
}
finally