private async Task ProcessMessageDeletedWithCacheAsync(AuditLogItem entity, ISocketMessageChannel channel, IMessage message, SocketGuild guild) { entity.SetData(MessageDeletedAuditData.Create(channel, message)); var auditLog = (await guild.GetAuditLogDataAsync(actionType: ActionType.MessageDeleted)).Find(o => { var data = (MessageDeleteAuditLogData)o.Data; return(data.Target.Id == message.Author.Id && data.ChannelId == channel.Id); }); entity.UserId = await UserSearchService.GetUserIDFromDiscordUserAsync(guild, auditLog?.User ?? message.Author); if (message.Attachments.Count > 0) { foreach (var attachment in message.Attachments.Where(o => o.Size < 10 * 1024 * 1024)) // Max 10MB { var fileContent = await attachment.DownloadFileAsync(); if (fileContent == null) { continue; } entity.Files.Add(new Database.Entity.File() { Content = fileContent, Filename = $"{Path.GetFileNameWithoutExtension(attachment.Filename)}_{attachment.Id}{Path.GetExtension(attachment.Filename)}" }); } } }
public async Task LogMessageDeletedAsync(Cacheable <IMessage, ulong> message, ISocketMessageChannel channel, SocketGuild guild) { var deletedMessage = message.HasValue ? message.Value : MessageCache.TryRemove(message.Id); var entity = new AuditLogItem() { Type = AuditLogType.MessageDeleted, CreatedAt = DateTime.Now, GuildIdSnowflake = guild.Id, }; if (deletedMessage == null) { entity.SetData(MessageDeletedAuditData.Create(channel)); } else { await ProcessMessageDeletedWithCacheAsync(entity, channel, deletedMessage, guild); } if (MessageCache.Exists(message.Id)) { MessageCache.TryRemove(message.Id); } await MessageCache.AppendAroundAsync(channel, message.Id, 100); await GrillBotRepository.AddAsync(entity); await GrillBotRepository.CommitAsync(); }