public async Task HandleNotificationAsync(IMessageDelete notification, CancellationToken ct) { var message = notification; var channelId = notification.ChannelID; var guild = notification.GuildID; var isThreadChannel = await _threadService.IsThreadChannelAsync(channelId, ct); if (!isThreadChannel) { return; } using var logScope = MessageLogMessages.BeginMessageNotificationScope(_logger, guild.Value.Value, channelId.Value, notification.ID.Value); MessageLogMessages.MessageDeletedHandling(_logger); await TryTrackMessageAsync( guild, null, async (_) => { MessageLogMessages.MessageRecordDeleting(_logger); await _messageRepository.DeleteAsync(notification.ID.Value); MessageLogMessages.MessageRecordDeleted(_logger); }); MessageLogMessages.MessageDeletedHandled(_logger); }
private async Task TryTrackMessageAsync( Optional <Snowflake> guild, IMessageCreate?message, Func <ulong, Task> asyncTrackAction) { if (!guild.HasValue) { MessageLogMessages.IgnoringNonGuildMessage(_logger); return; } if (message != null) { var author = message.Author; if ((author.IsBot.HasValue && author.IsBot.Value) || message.WebhookID.HasValue) { MessageLogMessages.IgnoringNonHumanMessage(_logger); return; } if (message.Content.StartsWith("!")) { MessageLogMessages.IgnoringCommandMessage(_logger); return; } } MessageLogMessages.TransactionBeginning(_logger); using var transaction = await _messageRepository.BeginMaintainTransactionAsync(); await asyncTrackAction.Invoke(guild.Value.Value); transaction.Commit(); MessageLogMessages.TransactionCommitted(_logger); }
public async Task HandleNotificationAsync(IMessageCreate notification, CancellationToken ct) { var isThreadChannel = await _threadService.IsThreadChannelAsync(notification.ChannelID, ct); if (!isThreadChannel) { return; } using var statsScope = _dogStatsd.StartTimer("message_processing_ms"); var message = notification; var channel = notification.ChannelID; var guild = notification.GuildID; using var logScope = MessageLogMessages.BeginMessageNotificationScope(_logger, guild.Value.Value, channel.Value, notification.ID.Value); MessageLogMessages.MessageReceivedHandling(_logger); await TryTrackMessageAsync( guild, message, async (guildId) => { MessageLogMessages.MessageRecordCreating(_logger); await _messageRepository.CreateAsync(new MessageCreationData() { Id = message.ID.Value, GuildId = guildId, ChannelId = channel.Value, AuthorId = message.Author.ID.Value, Timestamp = message.Timestamp }); MessageLogMessages.MessageRecordCreated(_logger); }); MessageLogMessages.MessageReceivedHandled(_logger); }