chore: format with csharpier
This commit is contained in:
parent
2f516dcb73
commit
4f54077c68
59 changed files with 2000 additions and 942 deletions
|
|
@ -6,15 +6,16 @@ using Remora.Results;
|
|||
|
||||
namespace Catalogger.Backend.Bot.Responders.Guilds;
|
||||
|
||||
public class AuditLogResponder(AuditLogCache auditLogCache, ILogger logger) : IResponder<IGuildAuditLogEntryCreate>
|
||||
public class AuditLogResponder(AuditLogCache auditLogCache, ILogger logger)
|
||||
: IResponder<IGuildAuditLogEntryCreate>
|
||||
{
|
||||
private readonly ILogger _logger = logger.ForContext<AuditLogResponder>();
|
||||
|
||||
|
||||
public Task<Result> RespondAsync(IGuildAuditLogEntryCreate evt, CancellationToken ct = default)
|
||||
{
|
||||
_logger.Debug("type: {ActionType}", evt.ActionType);
|
||||
_logger.Debug("{Id}, {Reason}", evt.ID, evt.Reason);
|
||||
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,8 +20,8 @@ public class GuildCreateResponder(
|
|||
ChannelCache channelCache,
|
||||
WebhookExecutorService webhookExecutor,
|
||||
IMemberCache memberCache,
|
||||
GuildFetchService guildFetchService)
|
||||
: IResponder<IGuildCreate>, IResponder<IGuildDelete>
|
||||
GuildFetchService guildFetchService
|
||||
) : IResponder<IGuildCreate>, IResponder<IGuildDelete>
|
||||
{
|
||||
private readonly ILogger _logger = logger.ForContext<GuildCreateResponder>();
|
||||
|
||||
|
|
@ -31,46 +31,56 @@ public class GuildCreateResponder(
|
|||
string? guildName = null;
|
||||
if (evt.Guild.TryPickT0(out var guild, out var unavailableGuild))
|
||||
{
|
||||
_logger.Verbose("Received guild create for available guild {GuildName} / {GuildId})", guild.Name, guild.ID);
|
||||
_logger.Verbose(
|
||||
"Received guild create for available guild {GuildName} / {GuildId})",
|
||||
guild.Name,
|
||||
guild.ID
|
||||
);
|
||||
guildId = guild.ID.ToUlong();
|
||||
guildName = guild.Name;
|
||||
|
||||
guildCache.Set(guild);
|
||||
foreach (var c in guild.Channels) channelCache.Set(c, guild.ID);
|
||||
foreach (var r in guild.Roles) roleCache.Set(r, guild.ID);
|
||||
foreach (var c in guild.Channels)
|
||||
channelCache.Set(c, guild.ID);
|
||||
foreach (var r in guild.Roles)
|
||||
roleCache.Set(r, guild.ID);
|
||||
|
||||
if (!await memberCache.IsGuildCachedAsync(guild.ID))
|
||||
guildFetchService.EnqueueGuild(guild.ID);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Verbose("Received guild create for unavailable guild {GuildId}", unavailableGuild.ID);
|
||||
_logger.Verbose(
|
||||
"Received guild create for unavailable guild {GuildId}",
|
||||
unavailableGuild.ID
|
||||
);
|
||||
guildId = unavailableGuild.ID.ToUlong();
|
||||
}
|
||||
|
||||
var tx = await db.Database.BeginTransactionAsync(ct);
|
||||
if (await db.Guilds.FindAsync([guildId], ct) != null) return Result.Success;
|
||||
if (await db.Guilds.FindAsync([guildId], ct) != null)
|
||||
return Result.Success;
|
||||
|
||||
db.Add(new Guild
|
||||
{
|
||||
Id = guildId
|
||||
});
|
||||
db.Add(new Guild { Id = guildId });
|
||||
await db.SaveChangesAsync(ct);
|
||||
await tx.CommitAsync(ct);
|
||||
|
||||
_logger.Information("Joined new guild {GuildName} / {GuildId}", guildName, guildId);
|
||||
|
||||
if (config.Discord.GuildLogId != null && evt.Guild.IsT0)
|
||||
webhookExecutor.QueueLog(config.Discord.GuildLogId.Value, new EmbedBuilder()
|
||||
.WithTitle("Joined new guild")
|
||||
.WithDescription($"Joined new guild **{guild.Name}**")
|
||||
.WithFooter($"ID: {guild.ID}")
|
||||
.WithCurrentTimestamp()
|
||||
webhookExecutor.QueueLog(
|
||||
config.Discord.GuildLogId.Value,
|
||||
new EmbedBuilder()
|
||||
.WithTitle("Joined new guild")
|
||||
.WithDescription($"Joined new guild **{guild.Name}**")
|
||||
.WithFooter($"ID: {guild.ID}")
|
||||
.WithCurrentTimestamp()
|
||||
#pragma warning disable CS8604 // Possible null reference argument.
|
||||
.WithThumbnailUrl(guild.IconUrl())
|
||||
.WithThumbnailUrl(guild.IconUrl())
|
||||
#pragma warning restore CS8604 // Possible null reference argument.
|
||||
.Build()
|
||||
.GetOrThrow());
|
||||
.Build()
|
||||
.GetOrThrow()
|
||||
);
|
||||
|
||||
return Result.Success;
|
||||
}
|
||||
|
|
@ -92,17 +102,20 @@ public class GuildCreateResponder(
|
|||
_logger.Information("Left guild {GuildName} / {GuildId}", guild.Name, guild.ID);
|
||||
|
||||
if (config.Discord.GuildLogId != null)
|
||||
webhookExecutor.QueueLog(config.Discord.GuildLogId.Value, new EmbedBuilder()
|
||||
.WithTitle("Left guild")
|
||||
.WithDescription($"Left guild **{guild.Name}**")
|
||||
.WithFooter($"ID: {guild.ID}")
|
||||
.WithCurrentTimestamp()
|
||||
webhookExecutor.QueueLog(
|
||||
config.Discord.GuildLogId.Value,
|
||||
new EmbedBuilder()
|
||||
.WithTitle("Left guild")
|
||||
.WithDescription($"Left guild **{guild.Name}**")
|
||||
.WithFooter($"ID: {guild.ID}")
|
||||
.WithCurrentTimestamp()
|
||||
#pragma warning disable CS8604 // Possible null reference argument.
|
||||
.WithThumbnailUrl(guild.IconUrl())
|
||||
.WithThumbnailUrl(guild.IconUrl())
|
||||
#pragma warning restore CS8604 // Possible null reference argument.
|
||||
.Build()
|
||||
.GetOrThrow());
|
||||
.Build()
|
||||
.GetOrThrow()
|
||||
);
|
||||
|
||||
return Task.FromResult(Result.Success);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,8 @@ public class GuildMemberAddResponder(
|
|||
UserCache userCache,
|
||||
WebhookExecutorService webhookExecutor,
|
||||
IDiscordRestGuildAPI guildApi,
|
||||
PluralkitApiService pluralkitApi) : IResponder<IGuildMemberAdd>
|
||||
PluralkitApiService pluralkitApi
|
||||
) : IResponder<IGuildMemberAdd>
|
||||
{
|
||||
private readonly ILogger _logger = logger.ForContext<GuildMemberAddResponder>();
|
||||
private static readonly TimeSpan NewAccountThreshold = 7.Days();
|
||||
|
|
@ -45,7 +46,8 @@ public class GuildMemberAddResponder(
|
|||
var guildConfig = await db.GetGuildAsync(member.GuildID, ct);
|
||||
var guildRes = await guildApi.GetGuildAsync(member.GuildID, withCounts: true, ct);
|
||||
if (guildRes.IsSuccess)
|
||||
builder.Description += $"\n{guildRes.Entity.ApproximateMemberCount.Value.Ordinalize()} to join";
|
||||
builder.Description +=
|
||||
$"\n{guildRes.Entity.ApproximateMemberCount.Value.Ordinalize()} to join";
|
||||
|
||||
builder.Description +=
|
||||
$"\ncreated {user.ID.Timestamp.Prettify()} ago\n<t:{user.ID.Timestamp.ToUnixTimeSeconds()}:F>";
|
||||
|
|
@ -53,15 +55,19 @@ public class GuildMemberAddResponder(
|
|||
var pkSystem = await pluralkitApi.GetPluralKitSystemAsync(user.ID.Value, ct);
|
||||
if (pkSystem != null)
|
||||
{
|
||||
var createdAt = pkSystem.Created != null
|
||||
? $"{pkSystem.Created.Value.Prettify()} ago (<t:{pkSystem.Created.Value.ToUnixTimeSeconds()}:F>)"
|
||||
: "*(unknown)*";
|
||||
builder.AddField("PluralKit system", $"""
|
||||
**ID:** {pkSystem.Id} (`{pkSystem.Uuid}`)
|
||||
**Name:** {pkSystem.Name ?? "*(none)*"}
|
||||
**Tag:** {pkSystem.Tag ?? "*(none)*"}
|
||||
**Created:** {createdAt}
|
||||
""");
|
||||
var createdAt =
|
||||
pkSystem.Created != null
|
||||
? $"{pkSystem.Created.Value.Prettify()} ago (<t:{pkSystem.Created.Value.ToUnixTimeSeconds()}:F>)"
|
||||
: "*(unknown)*";
|
||||
builder.AddField(
|
||||
"PluralKit system",
|
||||
$"""
|
||||
**ID:** {pkSystem.Id} (`{pkSystem.Uuid}`)
|
||||
**Name:** {pkSystem.Name ?? "*(none)*"}
|
||||
**Tag:** {pkSystem.Tag ?? "*(none)*"}
|
||||
**Created:** {createdAt}
|
||||
"""
|
||||
);
|
||||
}
|
||||
|
||||
// TODO: find used invite
|
||||
|
|
@ -70,51 +76,73 @@ public class GuildMemberAddResponder(
|
|||
|
||||
if (user.ID.Timestamp > DateTimeOffset.Now - NewAccountThreshold)
|
||||
{
|
||||
embeds.Add(new EmbedBuilder()
|
||||
.WithTitle("New account")
|
||||
.WithColour(DiscordUtils.Orange)
|
||||
.WithDescription($"\u26a0\ufe0f Created {user.ID.Timestamp.Prettify()} ago")
|
||||
.Build()
|
||||
.GetOrThrow());
|
||||
embeds.Add(
|
||||
new EmbedBuilder()
|
||||
.WithTitle("New account")
|
||||
.WithColour(DiscordUtils.Orange)
|
||||
.WithDescription($"\u26a0\ufe0f Created {user.ID.Timestamp.Prettify()} ago")
|
||||
.Build()
|
||||
.GetOrThrow()
|
||||
);
|
||||
}
|
||||
|
||||
var watchlist = await db.GetWatchlistEntryAsync(member.GuildID, user.ID, ct);
|
||||
if (watchlist != null)
|
||||
{
|
||||
var moderator = await userCache.GetUserAsync(DiscordSnowflake.New(watchlist.ModeratorId));
|
||||
var mod = moderator != null ? $"{moderator.Tag()} (<@{moderator.ID}>)" : $"<@{watchlist.ModeratorId}>";
|
||||
var moderator = await userCache.GetUserAsync(
|
||||
DiscordSnowflake.New(watchlist.ModeratorId)
|
||||
);
|
||||
var mod =
|
||||
moderator != null
|
||||
? $"{moderator.Tag()} (<@{moderator.ID}>)"
|
||||
: $"<@{watchlist.ModeratorId}>";
|
||||
|
||||
embeds.Add(new EmbedBuilder()
|
||||
.WithTitle("⚠️ User on watchlist")
|
||||
.WithColour(DiscordUtils.Red)
|
||||
.WithDescription($"**{user.Tag()}** is on this server's watch list.\n\n{watchlist.Reason}")
|
||||
.WithFooter($"ID: {user.ID} | Added")
|
||||
.WithTimestamp(watchlist.AddedAt.ToDateTimeOffset())
|
||||
.AddField("Moderator", mod).GetOrThrow()
|
||||
.Build()
|
||||
.GetOrThrow());
|
||||
embeds.Add(
|
||||
new EmbedBuilder()
|
||||
.WithTitle("⚠️ User on watchlist")
|
||||
.WithColour(DiscordUtils.Red)
|
||||
.WithDescription(
|
||||
$"**{user.Tag()}** is on this server's watch list.\n\n{watchlist.Reason}"
|
||||
)
|
||||
.WithFooter($"ID: {user.ID} | Added")
|
||||
.WithTimestamp(watchlist.AddedAt.ToDateTimeOffset())
|
||||
.AddField("Moderator", mod)
|
||||
.GetOrThrow()
|
||||
.Build()
|
||||
.GetOrThrow()
|
||||
);
|
||||
}
|
||||
|
||||
if (pkSystem != null)
|
||||
{
|
||||
if (guildConfig.BannedSystems.Contains(pkSystem.Id) ||
|
||||
guildConfig.BannedSystems.Contains(pkSystem.Uuid.ToString()))
|
||||
if (
|
||||
guildConfig.BannedSystems.Contains(pkSystem.Id)
|
||||
|| guildConfig.BannedSystems.Contains(pkSystem.Uuid.ToString())
|
||||
)
|
||||
{
|
||||
embeds.Add(new EmbedBuilder().WithTitle("Banned system")
|
||||
.WithDescription(
|
||||
"\u26a0\ufe0f The system associated with this account has been banned from the server.")
|
||||
.WithColour(DiscordUtils.Red)
|
||||
.WithFooter($"ID: {pkSystem.Id}")
|
||||
.Build()
|
||||
.GetOrThrow());
|
||||
embeds.Add(
|
||||
new EmbedBuilder()
|
||||
.WithTitle("Banned system")
|
||||
.WithDescription(
|
||||
"\u26a0\ufe0f The system associated with this account has been banned from the server."
|
||||
)
|
||||
.WithColour(DiscordUtils.Red)
|
||||
.WithFooter($"ID: {pkSystem.Id}")
|
||||
.Build()
|
||||
.GetOrThrow()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (embeds.Count > 1)
|
||||
await webhookExecutor.SendLogAsync(guildConfig.Channels.GuildMemberAdd,
|
||||
embeds.Cast<IEmbed>().ToList(), []);
|
||||
else webhookExecutor.QueueLog(guildConfig.Channels.GuildMemberAdd, embeds[0]);
|
||||
await webhookExecutor.SendLogAsync(
|
||||
guildConfig.Channels.GuildMemberAdd,
|
||||
embeds.Cast<IEmbed>().ToList(),
|
||||
[]
|
||||
);
|
||||
else
|
||||
webhookExecutor.QueueLog(guildConfig.Channels.GuildMemberAdd, embeds[0]);
|
||||
|
||||
return Result.Success;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,8 @@ public class GuildMemberRemoveResponder(
|
|||
IMemberCache memberCache,
|
||||
RoleCache roleCache,
|
||||
WebhookExecutorService webhookExecutor,
|
||||
AuditLogEnrichedResponderService auditLogEnrichedResponderService) : IResponder<IGuildMemberRemove>
|
||||
AuditLogEnrichedResponderService auditLogEnrichedResponderService
|
||||
) : IResponder<IGuildMemberRemove>
|
||||
{
|
||||
private readonly ILogger _logger = logger.ForContext<GuildMemberAddResponder>();
|
||||
|
||||
|
|
@ -43,8 +44,14 @@ public class GuildMemberRemoveResponder(
|
|||
{
|
||||
_logger.Information(
|
||||
"Guild member {UserId} in {GuildId} left but wasn't in the cache, sending limited embed",
|
||||
evt.User.ID, evt.GuildID);
|
||||
webhookExecutor.QueueLog(guildConfig, LogChannelType.GuildMemberRemove, embed.Build().GetOrThrow());
|
||||
evt.User.ID,
|
||||
evt.GuildID
|
||||
);
|
||||
webhookExecutor.QueueLog(
|
||||
guildConfig,
|
||||
LogChannelType.GuildMemberRemove,
|
||||
embed.Build().GetOrThrow()
|
||||
);
|
||||
return Result.Success;
|
||||
}
|
||||
|
||||
|
|
@ -65,12 +72,17 @@ public class GuildMemberRemoveResponder(
|
|||
}
|
||||
|
||||
roleMentions += $"<@&{role.ID}>";
|
||||
if (idx != roles.Count - 1) roleMentions += ", ";
|
||||
if (idx != roles.Count - 1)
|
||||
roleMentions += ", ";
|
||||
}
|
||||
|
||||
embed.AddField("Roles", roleMentions, inline: false);
|
||||
|
||||
webhookExecutor.QueueLog(guildConfig, LogChannelType.GuildMemberRemove, embed.Build().GetOrThrow());
|
||||
webhookExecutor.QueueLog(
|
||||
guildConfig,
|
||||
LogChannelType.GuildMemberRemove,
|
||||
embed.Build().GetOrThrow()
|
||||
);
|
||||
return Result.Success;
|
||||
}
|
||||
finally
|
||||
|
|
@ -78,4 +90,4 @@ public class GuildMemberRemoveResponder(
|
|||
await memberCache.RemoveAsync(evt.GuildID, evt.User.ID);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,23 +5,31 @@ using Remora.Results;
|
|||
|
||||
namespace Catalogger.Backend.Bot.Responders.Guilds;
|
||||
|
||||
public class GuildMembersChunkResponder(ILogger logger, IMemberCache memberCache) : IResponder<IGuildMembersChunk>
|
||||
public class GuildMembersChunkResponder(ILogger logger, IMemberCache memberCache)
|
||||
: IResponder<IGuildMembersChunk>
|
||||
{
|
||||
private readonly ILogger _logger = logger.ForContext<GuildMembersChunkResponder>();
|
||||
|
||||
public async Task<Result> RespondAsync(IGuildMembersChunk evt, CancellationToken ct = default)
|
||||
{
|
||||
_logger.Debug("Received chunk {ChunkIndex} / {ChunkCount} for guild {GuildId}", evt.ChunkIndex + 1,
|
||||
evt.ChunkCount, evt.GuildID);
|
||||
_logger.Debug(
|
||||
"Received chunk {ChunkIndex} / {ChunkCount} for guild {GuildId}",
|
||||
evt.ChunkIndex + 1,
|
||||
evt.ChunkCount,
|
||||
evt.GuildID
|
||||
);
|
||||
|
||||
await memberCache.SetManyAsync(evt.GuildID, evt.Members);
|
||||
|
||||
if (evt.ChunkIndex == evt.ChunkCount - 1)
|
||||
{
|
||||
_logger.Debug("Final chunk for guild {GuildId} received, marking as cached", evt.GuildID);
|
||||
_logger.Debug(
|
||||
"Final chunk for guild {GuildId} received, marking as cached",
|
||||
evt.GuildID
|
||||
);
|
||||
await memberCache.MarkAsCachedAsync(evt.GuildID);
|
||||
}
|
||||
|
||||
return Result.Success;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue