Exemplo n.º 1
0
        private static async Task Main()
        {
            var ps = Process.GetCurrentProcess();

            ps.PriorityClass = ProcessPriorityClass.RealTime;

            ServiceInjector.ConfigureServices();

            InjectServices();

            FillConfigurations();

            System.Console.Clear();

            var blackListedUserIds = _userService.GetBannedIds().Distinct().ToList();

            var badUsers = GetGroupsMembersByGroupIds(_blackListGroupIds, blackListedUserIds);

            if (_blacklistMembersOfChatId != null)
            {
                var chatUsers = _messagesService.GeChatUsers(_blacklistMembersOfChatId.ToList(), true);
                System.Console.WriteLine($"chatUsers count is {chatUsers.Count}");
                badUsers.AddRange(chatUsers);
            }

            //var badUsers = GetCachedBlacklistUsers();

            System.Console.WriteLine($"About to prepare list badUsers.Count is {badUsers.Count}.");
            var cities         = _citiesService.GetCities(_cityIds, false);
            var totalUsersList = PrepareUserList(badUsers, blackListedUserIds, cities);

            System.Console.WriteLine($"List has been prepared, totalUsersList.Count is {totalUsersList.Count}.");

            BlackListUserList(totalUsersList);

            System.Console.WriteLine("Start collecting users for background work");
            var usersForBackgroundWork = await GetUsersForBackgroundWork(cities, blackListedUserIds, 1000);


            var friedsOfUserIds = new List <UserExtended>();

            if (_blacklistFriendsOfUserId.Any())
            {
                foreach (var userId in _blacklistFriendsOfUserId)
                {
                    var friends = _userService.GetFriends(userId);
                    friedsOfUserIds.AddRange(friends);
                }
            }

            friedsOfUserIds = friedsOfUserIds.Where(f => blackListedUserIds.Contains(f.Id)).Select(f => f).ToList();

            using (var api = _apiFactory.CreateVkApi())
            {
                foreach (var f in friedsOfUserIds)
                {
                    var needBlackList = SatisfyBySecondAlgorithm(f);
                    if (!needBlackList)
                    {
                        continue;
                    }

                    var message = string.Empty;

                    TimeSpan sleep;
                    try
                    {
                        var blackListResult = BlackListUser(f, api);
                        sleep = blackListResult
                            ? TimeSpan.FromMinutes(MinutesToSleepInBackgroundWork)
                            : TimeSpan.FromSeconds(0);
                        message = ActionResultLogMessage(f, blackListResult);
                    }
                    catch (Exception e)
                    {
                        sleep = HandleException(e, f, null, null, ref message);
                    }

                    System.Console.WriteLine(message);
                    System.Threading.Thread.Sleep(sleep);
                }


                foreach (var f in usersForBackgroundWork)
                {
                    var needBlackList = SatisfyBySecondAlgorithm(f);
                    if (!needBlackList)
                    {
                        continue;
                    }

                    var message = string.Empty;

                    TimeSpan sleep;
                    try
                    {
                        var blackListResult = BlackListUser(f, api);
                        sleep = blackListResult
                            ? TimeSpan.FromMinutes(MinutesToSleepInBackgroundWork)
                            : TimeSpan.FromSeconds(0);
                        message = ActionResultLogMessage(f, blackListResult);
                    }
                    catch (Exception e)
                    {
                        sleep = HandleException(e, f, null, null, ref message);
                    }

                    System.Console.WriteLine(message);
                    System.Threading.Thread.Sleep(sleep);
                }
            }
        }