Exemple #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)}"
                    });
                }
            }
        }
Exemple #2
0
        public async Task LogMessageEditedAsync(Cacheable <IMessage, ulong> before, SocketMessage after, ISocketMessageChannel channel, SocketGuild guild)
        {
            var oldMessage = before.HasValue ? before.Value : MessageCache.Get(before.Id);

            if (!IsMessageEdited(oldMessage, after))
            {
                return;
            }

            var userId = await UserSearchService.GetUserIDFromDiscordUserAsync(guild, after.Author);

            var entity = new AuditLogItem()
            {
                Type             = AuditLogType.MessageEdited,
                CreatedAt        = DateTime.Now,
                GuildIdSnowflake = guild.Id,
                UserId           = userId
            };

            entity.SetData(MessageEditedAuditData.Create(channel, oldMessage, after));
            await GrillBotRepository.AddAsync(entity);

            await GrillBotRepository.CommitAsync();

            MessageCache.Update(after);
        }
Exemple #3
0
        private async Task ValidateIfNotUnverifiedAsync(SocketGuild guild, SocketGuildUser user)
        {
            var userID = await UserSearchService.GetUserIDFromDiscordUserAsync(guild, user);

            var haveUnverify = await GrillBotRepository.UnverifyRepository.HaveUnverifyAsync(userID.Value);

            if (haveUnverify)
            {
                throw new ValidationException($"Nelze provést odebrání přístupu, protože uživatel **{user.GetFullName()}** již má odebraný přístup.");
            }
        }
Exemple #4
0
        public async Task <List <ReminderEntity> > GetRemindersAsync(IGuild guild, IUser user)
        {
            var userId = await UserSearchService.GetUserIDFromDiscordUserAsync(guild, user);

            if (userId == null)
            {
                throw new NotFoundException("Žádná data pro tohoto uživatele nebyly nalezeny.");
            }

            return(await GrillBotRepository.ReminderRepository.GetReminders(userId).ToListAsync());
        }
Exemple #5
0
        private async Task <long> GetOrCreateUserId(SocketGuild guild, IUser user)
        {
            var userId = await UserSearchService.GetUserIDFromDiscordUserAsync(guild, user);

            if (userId != null)
            {
                return(userId.Value);
            }

            var entity = await GrillBotRepository.UsersRepository.CreateAndGetUserAsync(guild.Id, user.Id);

            return(entity.ID);
        }
Exemple #6
0
        public async Task LogUserLeftAsync(SocketGuildUser user)
        {
            if (user == null)
            {
                return;
            }

            var ban = await user.Guild.FindBanAsync(user);

            RestAuditLogEntry dcAuditLogItem;

            if (ban != null)
            {
                dcAuditLogItem = (await user.Guild.GetAuditLogDataAsync(actionType: ActionType.Ban))?
                                 .FirstOrDefault(o => (o.Data as BanAuditLogData)?.Target.Id == user.Id);
            }
            else
            {
                dcAuditLogItem = (await user.Guild.GetAuditLogDataAsync(actionType: ActionType.Kick))?
                                 .FirstOrDefault(o => (o.Data as KickAuditLogData)?.Target.Id == user.Id);
            }

            long?executor = null;

            if (dcAuditLogItem != null)
            {
                executor = await UserSearchService.GetUserIDFromDiscordUserAsync(user.Guild, dcAuditLogItem.User);
            }

            var entity = new AuditLogItem()
            {
                Type             = AuditLogType.UserLeft,
                CreatedAt        = DateTime.Now,
                GuildIdSnowflake = user.Guild.Id,
                UserId           = executor
            };

            entity.SetData(UserLeftAuditData.Create(user.Guild, user, ban != null, ban?.Reason));
            await GrillBotRepository.AddAsync(entity);

            await GrillBotRepository.CommitAsync();
        }
Exemple #7
0
        public async Task LogCommandAsync(Optional <CommandInfo> command, ICommandContext context)
        {
            if (context.Guild == null || !command.IsSpecified)
            {
                return;
            }

            var userId = await UserSearchService.GetUserIDFromDiscordUserAsync(context.Guild, context.User);

            var entity = new AuditLogItem()
            {
                Type             = AuditLogType.Command,
                CreatedAt        = DateTime.Now,
                GuildIdSnowflake = context.Guild.Id,
                UserId           = userId
            };

            entity.SetData(CommandAuditData.CreateDbItem(context, command.Value));
            await GrillBotRepository.AddAsync(entity);

            await GrillBotRepository.CommitAsync();
        }