Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }