feat: slightly more debug logs, enrich message events with extra data

This commit is contained in:
sam 2024-11-26 21:25:10 +01:00
parent c06376dfda
commit 27e77eeaed
Signed by: sam
GPG key ID: 5F3C3C1B3166639D
5 changed files with 79 additions and 5 deletions

View file

@ -38,6 +38,8 @@ public class MessageCreateResponder(
public async Task<Result> RespondAsync(IMessageCreate msg, CancellationToken ct = default)
{
using var __ = LogUtils.Enrich(msg);
userCache.UpdateUser(msg.Author);
CataloggerMetrics.MessagesReceived.Inc();

View file

@ -41,6 +41,8 @@ public class MessageDeleteBulkResponder(
public async Task<Result> RespondAsync(IMessageDeleteBulk evt, CancellationToken ct = default)
{
using var _ = LogUtils.Enrich(evt);
var guild = await guildRepository.GetAsync(evt.GuildID);
if (guild.IsMessageIgnored(evt.ChannelID, null, null))
return Result.Success;

View file

@ -27,6 +27,7 @@ using Remora.Discord.Extensions.Embeds;
using Remora.Discord.Gateway.Responders;
using Remora.Rest.Core;
using Remora.Results;
using Serilog.Context;
namespace Catalogger.Backend.Bot.Responders.Messages;
@ -48,6 +49,8 @@ public class MessageDeleteResponder(
public async Task<Result> RespondAsync(IMessageDelete evt, CancellationToken ct = default)
{
using var _ = LogUtils.Enrich(evt);
if (!evt.GuildID.IsDefined())
return Result.Success;
@ -64,13 +67,15 @@ public class MessageDeleteResponder(
return Result.Success;
var guild = await guildRepository.GetAsync(evt.GuildID);
if (guild.IsMessageIgnored(evt.ChannelID, null, null))
return Result.Success;
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)
{
_logger.Debug(
"Deleted message {MessageId} should be logged but is not in the database",
evt.ID
);
webhookExecutor.QueueLog(
webhookExecutor.GetLogChannel(guild, LogChannelType.MessageDelete, evt.ChannelID),
new Embed(
@ -106,8 +111,13 @@ public class MessageDeleteResponder(
evt.ChannelID,
msg.UserId
);
if (logChannel == null)
return Result.Success;
if (logChannel is null or 0)
{
_logger.Debug(
"Message {MessageId} should not be logged; either ignored or message delete logs are disabled",
evt.ID
);
}
var user = await userCache.GetUserAsync(DiscordSnowflake.New(msg.UserId));
var builder = new EmbedBuilder()

View file

@ -42,6 +42,8 @@ public class MessageUpdateResponder(
public async Task<Result> RespondAsync(IMessageUpdate evt, CancellationToken ct = default)
{
using var _ = LogUtils.Enrich(evt);
// Discord only *very* recently changed message update events to have all fields,
// so we convert the event to a MessageCreate to avoid having to unwrap every single field
var msg = ConvertToMessageCreate(evt);