Example #1
0
        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)}"
                    });
                }
            }
        }
Example #2
0
        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();
        }