Example #1
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);
        }
Example #2
0
        /// <inheritdoc />
        public async Task RemoveFromStarboard(IGuild guild, IMessage message)
        {
            using (var transaction = await _messageRepository.BeginMaintainTransactionAsync())
            {
                var messageBrief = await _messageRepository.GetMessage(message.Id);

                var channel = await GetStarboardChannel(guild);

                var msg = await channel.GetMessageAsync(messageBrief.StarboardEntryId.Value);

                if (msg != default)
                {
                    await channel.DeleteMessageAsync(messageBrief.StarboardEntryId.Value);

                    await _messageRepository.UpdateStarboardColumn(messageBrief.Id, null);
                }
                transaction.Commit();
            }
        }