示例#1
0
        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);
        }