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); }
/// <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(); } }