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