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

View file

@ -220,14 +220,8 @@ public class GuildMemberUpdateResponder(
if (auditLogCache.TryGetMemberUpdate(member.GuildID, member.User.ID, out var actionData))
{
var moderator = await userCache.GetUserAsync(actionData.ModeratorId);
embed.AddField(
"Responsible moderator",
moderator == null
? $"*(unknown user {actionData.ModeratorId}) <@{actionData.ModeratorId}>*"
: $"{moderator.Tag()} <@{moderator.ID}>"
);
var moderator = await userCache.TryFormatModeratorAsync(actionData);
embed.AddField("Responsible moderator", moderator);
embed.AddField("Reason", actionData.Reason ?? "No reason given");
}
else
@ -337,13 +331,8 @@ public class GuildMemberUpdateResponder(
auditLogCache.TryGetMemberUpdate(member.GuildID, member.User.ID, out var actionData)
)
{
var moderator = await userCache.GetUserAsync(actionData.ModeratorId);
keyRoleUpdate.AddField(
"Responsible moderator",
moderator == null
? $"*(unknown user {actionData.ModeratorId}) <@{actionData.ModeratorId}>*"
: $"{moderator.Tag()} <@{moderator.ID}>"
);
var moderator = await userCache.TryFormatModeratorAsync(actionData);
keyRoleUpdate.AddField("Responsible moderator", moderator);
}
else
{