public async Task Check(CommandContext ctx) { await ctx.RespondAsync( $"{Bot.BotSettings.OkEmoji} Запущена проверка всех зарегистрированных аккаунтов. Она может занять некоторое время."); await ctx.TriggerTypingAsync(); var blacklist = BlacklistEntry.GetAll(); var message = "**Следующие учётные записи были добавлены в чёрный список:**\n"; /* * Algorythm: * 1) Get all BL entries * 2) For each BL entry: * 2.1) Get all accounts with the same IP. * 2.2) If is not the same account, then add to banlist */ foreach (var entry in blacklist) { var webUser = WebUser.GetByDiscordId(entry.DiscordId); if (webUser == null) { continue; } foreach (var ip in webUser.Ips) { var sameIp = WebUser.GetUsersByIp(ip); foreach (var sameIpUser in sameIp) { if (!BlacklistEntry.IsBlacklisted(sameIpUser.UserId)) { string id = RandomString.NextString(6); BlacklistEntry.Create(id, sameIpUser.UserId, sameIpUser.Username, sameIpUser.LastXbox, DateTime.Now, ctx.Client.CurrentUser.Id, "Автоматическая блокировка системой защиты", ""); message += $"• {sameIpUser.Username} ({sameIpUser.UserId}) - совпадение по IP c баном {entry.Id} ({webUser.Username})\n"; try { var member = await ctx.Guild.GetMemberAsync(sameIpUser.UserId); await member.RevokeRoleAsync(ctx.Guild.GetRole(Bot.BotSettings.FleetCodexRole)); } catch { } } } } } await ctx.RespondAsync(message); }