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 }); }
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 }); }