Exemplo n.º 1
0
        public void SendMessageToUnanswered(AccountViewModel accountViewModel)
        {
            const string functionName = "Ответ на неотвеченные сообщения";

            _notice.AddNotice(functionName, accountViewModel.Id, string.Format("Начинаем отвечать"));

            var account = _accountManager.GetAccountById(accountViewModel.Id);

            try
            {
                _notice.AddNotice(functionName, accountViewModel.Id, string.Format("Собираемся посылать экстра-сообщения"));

                var unreadMessagesList = GetUnreadMessages(account);
                List <UnreadFriendMessageModel> unreadMessages = null;


                if (unreadMessagesList != null)
                {
                    unreadMessages = unreadMessagesList.UnreadMessages;
                }

                if (account.GroupSettingsId == null)
                {
                    return;
                }
                var settings = _accountSettingsManager.GetSettings((long)account.GroupSettingsId);

                if (settings == null)
                {
                    return;
                }

                var delayTime = settings.UnansweredDelay;
                if (delayTime <= 0)
                {
                    return;
                }

                var unansweredMessagesList =
                    new GetUnansweredMessagesQueryHandler(new DataBaseContext()).Handle(new GetUnansweredMessagesQuery
                {
                    DelayTime = delayTime,
                    AccountId = account.Id
                });

                _notice.AddNotice(functionName, accountViewModel.Id, string.Format("Получено {0} неотвеченных сообщений", unansweredMessagesList.Count));
                _notice.AddNotice(functionName, account.Id, "Загружаем список  extra-сообщений");

                var messageModel = _messageManager.GetRandomExtraMessage();

                if (messageModel == null)
                {
                    _notice.AddNotice(functionName, account.Id, "Нет ни одного extra-сообщения");
                    return;
                }

                int i = 1;
                foreach (var unansweredMessage in unansweredMessagesList)
                {
                    if (unreadMessages != null &&
                        unreadMessages.Any(model => model.FriendFacebookId == unansweredMessage.FriendFacebookId))
                    {
                        _notice.AddNotice(functionName, accountViewModel.Id, string.Format("Друг с id = {0} написал сообщение. Экстра сообщение не посылаем ему.", unansweredMessage.FriendFacebookId));
                        continue;
                    }

                    _notice.AddNotice(functionName, accountViewModel.Id, string.Format("Отправляем экстра-сообщения друзьям {0}/{1}", i, unansweredMessagesList.Count));
                    var friend = _friendManager.GetFriendById(unansweredMessage.FriendId);

                    new SendMessageCore(_notice).SendMessageToUnanswered(account, friend);

                    Thread.Sleep(3000);

                    i++;
                }
            }
            catch (Exception ex)
            {
                _notice.AddNotice(functionName, accountViewModel.Id, _noticeService.ConvertNoticeText(functionName, string.Format("Возникла ошибка {0}", ex.Message)));
            }
        }