feat: split ignores into 'ignore messages' and 'ignore entities'
This commit is contained in:
parent
d48ab7e16e
commit
0cac964aa6
32 changed files with 730 additions and 488 deletions
|
|
@ -17,6 +17,7 @@ using Catalogger.Backend.Cache.InMemoryCache;
|
|||
using Catalogger.Backend.Database.Repositories;
|
||||
using Catalogger.Backend.Extensions;
|
||||
using Catalogger.Backend.Services;
|
||||
using Microsoft.Extensions.Logging.Configuration;
|
||||
using Remora.Discord.API.Abstractions.Gateway.Events;
|
||||
using Remora.Discord.API.Abstractions.Objects;
|
||||
using Remora.Discord.Extensions.Embeds;
|
||||
|
|
@ -97,8 +98,11 @@ public class ChannelCreateResponder(
|
|||
|
||||
var guildConfig = await guildRepository.GetAsync(ch.GuildID);
|
||||
webhookExecutor.QueueLog(
|
||||
guildConfig,
|
||||
LogChannelType.ChannelCreate,
|
||||
webhookExecutor.GetLogChannel(
|
||||
guildConfig,
|
||||
LogChannelType.ChannelCreate,
|
||||
channelId: ch.ID
|
||||
),
|
||||
builder.Build().GetOrThrow()
|
||||
);
|
||||
return Result.Success;
|
||||
|
|
|
|||
|
|
@ -68,8 +68,11 @@ public class ChannelDeleteResponder(
|
|||
embed.AddField("Description", topic);
|
||||
|
||||
webhookExecutor.QueueLog(
|
||||
guildConfig,
|
||||
LogChannelType.ChannelDelete,
|
||||
webhookExecutor.GetLogChannel(
|
||||
guildConfig,
|
||||
LogChannelType.ChannelDelete,
|
||||
channelId: channel.ID
|
||||
),
|
||||
embed.Build().GetOrThrow()
|
||||
);
|
||||
return Result.Success;
|
||||
|
|
|
|||
|
|
@ -180,16 +180,14 @@ public class ChannelUpdateResponder(
|
|||
if (builder.Fields.Count == 0)
|
||||
return Result.Success;
|
||||
|
||||
var logChannel = webhookExecutor.GetLogChannel(
|
||||
guildConfig,
|
||||
LogChannelType.ChannelUpdate,
|
||||
channelId: evt.ID,
|
||||
userId: null
|
||||
webhookExecutor.QueueLog(
|
||||
webhookExecutor.GetLogChannel(
|
||||
guildConfig,
|
||||
LogChannelType.ChannelUpdate,
|
||||
channelId: evt.ID
|
||||
),
|
||||
builder.Build().GetOrThrow()
|
||||
);
|
||||
if (logChannel == null)
|
||||
return Result.Success;
|
||||
|
||||
webhookExecutor.QueueLog(logChannel.Value, builder.Build().GetOrThrow());
|
||||
|
||||
return Result.Success;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -315,19 +315,20 @@ public class GuildMemberUpdateResponder(
|
|||
.WithFooter($"User ID: {member.User.ID}")
|
||||
.WithCurrentTimestamp();
|
||||
|
||||
var addedRoles = member.Roles.Except(oldRoles).Select(s => s.Value).ToList();
|
||||
var removedRoles = oldRoles.Except(member.Roles).Select(s => s.Value).ToList();
|
||||
var addedRoles = member.Roles.Except(oldRoles).ToList();
|
||||
var removedRoles = oldRoles.Except(member.Roles).ToList();
|
||||
|
||||
if (addedRoles.Count != 0)
|
||||
{
|
||||
roleUpdate.AddField("Added", string.Join(", ", addedRoles.Select(id => $"<@&{id}>")));
|
||||
|
||||
// Add all added key roles to the log
|
||||
if (!addedRoles.Except(guildConfig.KeyRoles).Any())
|
||||
if (!addedRoles.Select(s => s.Value).Except(guildConfig.KeyRoles).Any())
|
||||
{
|
||||
var value = string.Join(
|
||||
"\n",
|
||||
addedRoles
|
||||
.Select(s => s.Value)
|
||||
.Where(guildConfig.KeyRoles.Contains)
|
||||
.Select(id =>
|
||||
{
|
||||
|
|
@ -348,11 +349,12 @@ public class GuildMemberUpdateResponder(
|
|||
);
|
||||
|
||||
// Add all removed key roles to the log
|
||||
if (!removedRoles.Except(guildConfig.KeyRoles).Any())
|
||||
if (!removedRoles.Select(s => s.Value).Except(guildConfig.KeyRoles).Any())
|
||||
{
|
||||
var value = string.Join(
|
||||
"\n",
|
||||
removedRoles
|
||||
.Select(s => s.Value)
|
||||
.Where(guildConfig.KeyRoles.Contains)
|
||||
.Select(id =>
|
||||
{
|
||||
|
|
@ -369,8 +371,12 @@ public class GuildMemberUpdateResponder(
|
|||
if (roleUpdate.Fields.Count != 0)
|
||||
{
|
||||
webhookExecutor.QueueLog(
|
||||
guildConfig,
|
||||
LogChannelType.GuildMemberUpdate,
|
||||
webhookExecutor.GetLogChannel(
|
||||
guildConfig,
|
||||
LogChannelType.GuildMemberUpdate,
|
||||
// Check for all added and removed roles
|
||||
roleIds: addedRoles.Concat(removedRoles).ToList()
|
||||
),
|
||||
roleUpdate.Build().GetOrThrow()
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,13 @@ public class MessageCreateResponder(
|
|||
var guild = await guildRepository.GetAsync(msg.GuildID);
|
||||
// The guild needs to have enabled at least one of the message logging events,
|
||||
// and the channel must not be ignored, to store the message.
|
||||
if (guild.IsMessageIgnored(msg.ChannelID, msg.Author.ID))
|
||||
if (
|
||||
guild.IsMessageIgnored(
|
||||
msg.ChannelID,
|
||||
msg.Author.ID,
|
||||
msg.Member.OrDefault()?.Roles.OrDefault()
|
||||
)
|
||||
)
|
||||
{
|
||||
await messageRepository.IgnoreMessageAsync(msg.ID.Value);
|
||||
return Result.Success;
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ public class MessageDeleteBulkResponder(
|
|||
public async Task<Result> RespondAsync(IMessageDeleteBulk evt, CancellationToken ct = default)
|
||||
{
|
||||
var guild = await guildRepository.GetAsync(evt.GuildID);
|
||||
if (guild.IsMessageIgnored(evt.ChannelID, null))
|
||||
if (guild.IsMessageIgnored(evt.ChannelID, null, null))
|
||||
return Result.Success;
|
||||
|
||||
var logChannel = webhookExecutor.GetLogChannel(
|
||||
|
|
|
|||
|
|
@ -64,22 +64,15 @@ public class MessageDeleteResponder(
|
|||
return Result.Success;
|
||||
|
||||
var guild = await guildRepository.GetAsync(evt.GuildID);
|
||||
if (guild.IsMessageIgnored(evt.ChannelID, evt.ID))
|
||||
if (guild.IsMessageIgnored(evt.ChannelID, null, null))
|
||||
return Result.Success;
|
||||
|
||||
var logChannel = webhookExecutor.GetLogChannel(
|
||||
guild,
|
||||
LogChannelType.MessageDelete,
|
||||
evt.ChannelID
|
||||
);
|
||||
var msg = await messageRepository.GetMessageAsync(evt.ID.Value, ct);
|
||||
// Sometimes a message that *should* be logged isn't stored in the database, notify the user of that
|
||||
if (msg == null)
|
||||
{
|
||||
if (logChannel == null)
|
||||
return Result.Success;
|
||||
webhookExecutor.QueueLog(
|
||||
logChannel.Value,
|
||||
webhookExecutor.GetLogChannel(guild, LogChannelType.MessageDelete, evt.ChannelID),
|
||||
new Embed(
|
||||
Title: "Message deleted",
|
||||
Description: $"A message not found in the database was deleted in <#{evt.ChannelID}> ({evt.ChannelID}).",
|
||||
|
|
@ -107,7 +100,7 @@ public class MessageDeleteResponder(
|
|||
}
|
||||
}
|
||||
|
||||
logChannel = webhookExecutor.GetLogChannel(
|
||||
var logChannel = webhookExecutor.GetLogChannel(
|
||||
guild,
|
||||
LogChannelType.MessageDelete,
|
||||
evt.ChannelID,
|
||||
|
|
@ -173,7 +166,7 @@ public class MessageDeleteResponder(
|
|||
builder.AddField("Attachments", attachmentInfo, false);
|
||||
}
|
||||
|
||||
webhookExecutor.QueueLog(logChannel.Value, builder.Build().GetOrThrow());
|
||||
webhookExecutor.QueueLog(logChannel, builder.Build().GetOrThrow());
|
||||
return Result.Success;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,8 +54,11 @@ public class RoleCreateResponder(
|
|||
}
|
||||
|
||||
webhookExecutor.QueueLog(
|
||||
guildConfig,
|
||||
LogChannelType.GuildRoleCreate,
|
||||
webhookExecutor.GetLogChannel(
|
||||
guildConfig,
|
||||
LogChannelType.GuildRoleCreate,
|
||||
roleId: evt.Role.ID
|
||||
),
|
||||
embed.Build().GetOrThrow()
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -70,8 +70,11 @@ public class RoleDeleteResponder(
|
|||
}
|
||||
|
||||
webhookExecutor.QueueLog(
|
||||
guildConfig,
|
||||
LogChannelType.GuildRoleDelete,
|
||||
webhookExecutor.GetLogChannel(
|
||||
guildConfig,
|
||||
LogChannelType.GuildRoleDelete,
|
||||
roleId: role.ID
|
||||
),
|
||||
embed.Build().GetOrThrow()
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,8 +96,11 @@ public class RoleUpdateResponder(
|
|||
|
||||
var guildConfig = await guildRepository.GetAsync(evt.GuildID);
|
||||
webhookExecutor.QueueLog(
|
||||
guildConfig,
|
||||
LogChannelType.GuildRoleUpdate,
|
||||
webhookExecutor.GetLogChannel(
|
||||
guildConfig,
|
||||
LogChannelType.GuildRoleUpdate,
|
||||
roleId: evt.Role.ID
|
||||
),
|
||||
embed.Build().GetOrThrow()
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue