Esempio n. 1
0
        public void InviteToPage(AccountViewModel account)
        {
            const string functionName = "Пригласить в сообщество";

            _notice.AddNotice(functionName, account.Id, "Отправляем приглашения в сообщества...");

            if (account.GroupSettingsId == null)
            {
                return;
            }

            var settings   = _accountSettingsManager.GetSettings((long)account.GroupSettingsId);
            var statistics =
                new GetCommunityStatisticsQueryHandler(new DataBaseContext()).Handle(new GetCommunityStatisticsQuery
            {
                GroupId = (long)account.GroupSettingsId
            });

            var limitMinJoinPageLastDay  = settings.MinFriendsJoinPageInDay;
            var limitMaxJoinPageLastDay  = settings.MaxFriendsJoinPageInDay;
            var limitMinJoinPageLastHour = settings.MinFriendsJoinPageInHour;
            var limitMaxJoinPageLastHour = settings.MaxFriendsJoinPageInHour;

            var countJoinPageLastDay  = statistics.Sum(data => data.CountOfPageInvitations);
            var countJoinPageLastHour =
                statistics.Where(
                    model =>
                    (DateTime.Now - model.UpdateDateTime).Hours * 60 + (DateTime.Now - model.UpdateDateTime).Minutes <
                    60).Sum(data => data.CountOfPageInvitations);

            if (countJoinPageLastDay >= limitMaxJoinPageLastDay)
            {
                _notice.AddNotice(functionName, account.Id, "Превышен лимит максимального количества добавлений в сообщества в день!");
                return;
            }

            if (countJoinPageLastHour >= limitMaxJoinPageLastHour)
            {
                _notice.AddNotice(functionName, account.Id, "Превышен лимит максимального количества добавлений в сообщества в час!");
                return;
            }

            var allowedToInviteHour = limitMaxJoinPageLastHour - countJoinPageLastHour;
            var allowedToInviteDay  = limitMaxJoinPageLastDay - countJoinPageLastDay;


            var friends =
                new GetFriendsForAddedToGroupQueryHandler(new DataBaseContext()).Handle(new GetFriendsForAddedToGroupQuery
            {
                AccountId = account.Id,
                Count     = (int)(allowedToInviteDay < allowedToInviteHour ? allowedToInviteDay : limitMaxJoinPageLastHour)
            });

            if (friends.Count < limitMinJoinPageLastHour)
            {
                _notice.AddNotice(functionName, account.Id, string.Format("Недостаточно людей для добавления в сообщество! Получено {0} людей для добавления! Мин. кол-во - {1}", friends.Count, limitMinJoinPageLastHour));
                return;
            }

            var pages = ConvertStringToList(settings.FacebookPages);

            var userAgent = new GetUserAgentQueryHandler(new DataBaseContext()).Handle(new GetUserAgentQuery
            {
                UserAgentId = account.UserAgentId
            });

            _notice.AddNotice(functionName, account.Id, string.Format("Начинаем добавлять {0} друзей в сообщества", friends.Count));
            foreach (var friendData in friends)
            {
                foreach (var page in pages)
                {
                    _notice.AddNotice(functionName, account.Id, string.Format("Добавляем {0} в в сообщество {1}", friendData.FriendName, page));
                    new AddToPageEngine().Execute(new AddToPageModel
                    {
                        Cookie          = account.Cookie,
                        FacebookId      = account.FacebookId,
                        Proxy           = _accountManager.GetAccountProxy(account),
                        FacebookPageUrl = page,
                        Friend          = new FriendModel
                        {
                            FacebookId = friendData.FacebookId,
                            FriendName = friendData.FriendName
                        },
                        UrlParameters =
                            new GetUrlParametersQueryHandler(new DataBaseContext()).Handle(new GetUrlParametersQuery
                        {
                            NameUrlParameter = NamesUrlParameter.AddFriendsToPage
                        }),
                        UserAgent = userAgent.UserAgentString
                    });
                }

                _notice.AddNotice(functionName, account.Id, string.Format("Отмечаем друга {0} как добавленого в сообщества", friendData.FriendName));
                new MarkAddToGroupFriendCommandHandler(new DataBaseContext()).Handle(new MarkAddToGroupFriendCommand
                {
                    AccountId = account.Id,
                    FriendId  = friendData.Id
                });
            }

            _notice.AddNotice(functionName, account.Id, string.Format("Добавлено {0} друзей в сообщеста", friends.Count));
            new AddCommunityStatisticsCommandHandler(new DataBaseContext()).Handle(new AddCommunityStatisticsCommand
            {
                AccountId = account.Id,
                GroupId   = (long)account.GroupSettingsId,
                CountOfPageInvitations = friends.Count
            });
        }
Esempio n. 2
0
        public void InviteToGroup(AccountViewModel account)
        {
            const string functionName = "Пригласить в группу";

            _notice.AddNotice(functionName, account.Id, "Отправляем приглашения в группы...");

            if (account.GroupSettingsId == null)
            {
                return;
            }

            var settings   = _accountSettingsManager.GetSettings((long)account.GroupSettingsId);
            var statistics =
                new GetCommunityStatisticsQueryHandler(new DataBaseContext()).Handle(new GetCommunityStatisticsQuery
            {
                GroupId = (long)account.GroupSettingsId
            });

            var limitMinJoinGroupLastDay  = settings.MinFriendsJoinGroupInDay;
            var limitMaxJoinGroupLastDay  = settings.MaxFriendsJoinGroupInDay;
            var limitMinJoinGroupLastHour = settings.MinFriendsJoinGroupInHour;
            var limitMaxJoinGroupLastHour = settings.MaxFriendsJoinGroupInHour;

            var countJoinGroupLastDay  = statistics.Sum(data => data.CountOfGroupInvitations);
            var countJoinGroupLastHour =
                statistics.Where(
                    model =>
                    (DateTime.Now - model.UpdateDateTime).Hours * 60 + (DateTime.Now - model.UpdateDateTime).Minutes <
                    60).Sum(data => data.CountOfGroupInvitations);

            if (countJoinGroupLastDay >= limitMaxJoinGroupLastDay)
            {
                _notice.AddNotice(functionName, account.Id, "Достигнут лимит максимального количества добавлений в группу в день!");
                return;
            }

            if (countJoinGroupLastHour >= limitMaxJoinGroupLastHour)
            {
                _notice.AddNotice(functionName, account.Id, "Достигнут лимит максимального количества добавлений в группу в час!");
                return;
            }

            var allowedToInviteHour = limitMaxJoinGroupLastHour - countJoinGroupLastHour;
            var allowedToInviteDay  = limitMaxJoinGroupLastDay - countJoinGroupLastDay;


            var friends =
                new GetFriendsForAddedToGroupQueryHandler(new DataBaseContext()).Handle(new GetFriendsForAddedToGroupQuery
            {
                AccountId = account.Id,
                Count     =
                    (int)
                    (allowedToInviteDay < allowedToInviteHour ? allowedToInviteDay : limitMaxJoinGroupLastHour)
            });

            if (friends.Count < limitMinJoinGroupLastHour)
            {
                _notice.AddNotice(functionName, account.Id, string.Format("Недостаточно людей для добавления! Получено {0} людей для добавления! Мин. кол-во - {1}", friends.Count, limitMinJoinGroupLastHour));
                return;
            }

            var groups = ConvertStringToList(settings.FacebookGroups);

            _notice.AddNotice(functionName, account.Id, string.Format("Начинаем добавлять {0} друзей в группы", friends.Count));

            if (friends.Count > 50)
            {
                _notice.AddNotice(functionName, account.Id, string.Format("Друзей оказалось больше, берем 50 из них."));
                friends = new List <FriendData>(friends.Take(50));
            }

            var userAgent = new GetUserAgentQueryHandler(new DataBaseContext()).Handle(new GetUserAgentQuery
            {
                UserAgentId = account.UserAgentId
            });

            foreach (var @group in groups)
            {
                _notice.AddNotice(functionName, account.Id, string.Format("Добавляем {0} друзей в группу - {1}", friends.Count, @group));

                new AddToGroupEngine().Execute(new AddToGroupModel
                {
                    Cookie           = account.Cookie,
                    FacebookId       = account.FacebookId,
                    Proxy            = _accountManager.GetAccountProxy(account),
                    FacebookGroupUrl = @group,
                    FriendsList      = friends.Select(data => new FriendModel
                    {
                        FacebookId = data.FacebookId,
                        FriendName = data.FriendName
                    }).ToList(),
                    UrlParameters =
                        new GetUrlParametersQueryHandler(new DataBaseContext()).Handle(new GetUrlParametersQuery
                    {
                        NameUrlParameter = NamesUrlParameter.AddFriendsToGroup
                    }),
                    UserAgent = userAgent.UserAgentString
                });
            }

            foreach (var friend in friends)
            {
                _notice.AddNotice(functionName, account.Id, string.Format("Отмечаем друзей как добавленные в группы"));
                new MarkAddToGroupFriendCommandHandler(new DataBaseContext()).Handle(new MarkAddToGroupFriendCommand
                {
                    AccountId = account.Id,
                    FriendId  = friend.Id
                });
            }

            _notice.AddNotice(functionName, account.Id, string.Format("Добавлено {0} друзей в группы", friends.Count));
            new AddCommunityStatisticsCommandHandler(new DataBaseContext()).Handle(new AddCommunityStatisticsCommand
            {
                AccountId = account.Id,
                GroupId   = (long)account.GroupSettingsId,
                CountOfGroupInvitations = friends.Count
            });
        }