Beispiel #1
0
        private async Task Poll()
        {
            try
            {
                var dt = DateTime.Now;
                if ((dt - _lastCheckDateTime).TotalSeconds > 60)
                {
                    _lastCheckDateTime = dt;
                    var accounts = _accounts.GetAllAwaitingFriendRequest();
                    foreach (var account in accounts)
                    {
                        if (await _psnService.CheckFriend(account.PSNName))
                        {
                            account.Status = Status.AwaitingInterests;
                            _accounts.Update(account);

                            await _telegramClient.SendMessage(new SendMessageQuery()
                            {
                                ChatId    = account.Id,
                                Text      = Messages.ConfirmedFriendRequest,
                                ParseMode = "HTML",
                            });

                            await _registrationProcess.SendCurrentStep(account);

                            continue;
                        }
                        ;

                        if ((account.RegisteredAt + new TimeSpan(1, 0, 0)) < DateTime.Now.ToUniversalTime())
                        {
                            await _telegramClient.SendMessage(new SendMessageQuery()
                            {
                                ChatId    = account.Id,
                                Text      = Messages.AwaitingFriendRequestAborted,
                                ParseMode = "HTML",
                            });

                            await _psnService.RemoveFriend(account.PSNName);

                            _accounts.Delete(account);
                        }
                    }
                }
                Thread.Sleep(10000);
            }
            catch (Exception e)
            {
                Console.WriteLine(string.Format("{0}\t{1}", DateTime.Now, e.Message));
            }
        }
Beispiel #2
0
        public async Task <bool> HandleCurrentStep(Account account, Message message)
        {
            try
            {
                var  text         = message.Text.Trim();
                bool registration = false;
                if (account.Status < Status.Ok)
                {
                    registration = true;
                }
                switch (account.Status)
                {
                case Status.AwaitingPSNName:
                    var user = await _psnService.GetUser(message.Text);

                    if (user == null)
                    {
                        await _telegramClient.SendMessage(new SendMessageQuery()
                        {
                            ChatId           = account.Id,
                            ReplyToMessageId = message.MessageId,
                            Text             = Messages.PSNNameFault,
                            ParseMode        = "HTML",
                        });
                    }
                    else
                    {
                        await _telegramClient.SendMessage(new SendMessageQuery()
                        {
                            ChatId           = account.Id,
                            ReplyToMessageId = message.MessageId,
                            Text             = Messages.PSNNameSuccess,
                            ParseMode        = "HTML",
                        });

                        await _psnService.SendFriendRequest(text);

                        account.PSNName = text;
                        account.Status  = Status.AwaitingFriendRequest;
                        _accountService.Update(account);
                        await SendCurrentStep(account);
                    }
                    break;

                case Status.AwaitingFriendRequest:
                    await _telegramClient.SendMessage(new SendMessageQuery()
                    {
                        ChatId           = account.Id,
                        ReplyToMessageId = message.MessageId,
                        Text             = Messages.AwaitingFriendRequest,
                        ParseMode        = "HTML",
                    });

                    break;

                case Status.AwaitingInterests:
                case Status.AwaitingNewInterests:
                    account.Interests = text;
                    account.Status    = registration ? Status.AwaitingTrophies : Status.Ok;
                    _accountService.Update(account);

                    await _telegramClient.SendMessage(new SendMessageQuery()
                    {
                        ChatId    = account.Id,
                        Text      = Messages.SavedInterests,
                        ParseMode = "HTML",
                    });

                    if (registration)
                    {
                        await SendCurrentStep(account);
                    }
                    break;

                case Status.AwaitingTrophies:
                case Status.AwaitingNewTrophies:
                    var value = text.ToLower();
                    if (value == "да" || value == "нет")
                    {
                        account.Status       = Status.Ok;
                        account.ShowTrophies = value == "да";
                        _accountService.Update(account);

                        await _telegramClient.SendMessage(new SendMessageQuery()
                        {
                            ChatId    = account.Id,
                            Text      = value == "да" ? Messages.ShowTrophiesYes : Messages.ShowTrophiesNo,
                            ParseMode = "HTML",
                        });

                        if (registration)
                        {
                            await SendCurrentStep(account);
                        }
                    }
                    else
                    {
                        await _telegramClient.SendMessage(new SendMessageQuery()
                        {
                            ChatId    = account.Id,
                            Text      = Messages.YesOrNo,
                            ParseMode = "HTML",
                        });
                    }
                    break;

                case Status.AwaitingDeleteConfirmation:
                    if (string.Equals(text, account.PSNName))
                    {
                        _accountService.Delete(account);
                        await _psnService.RemoveFriend(account.PSNName);

                        await _telegramClient.SendMessage(new SendMessageQuery()
                        {
                            ChatId    = account.Id,
                            Text      = Messages.DeleteSuccess,
                            ParseMode = "HTML",
                        });
                    }
                    else
                    {
                        await _telegramClient.SendMessage(new SendMessageQuery()
                        {
                            ChatId    = account.Id,
                            Text      = Messages.DeleteFail,
                            ParseMode = "HTML",
                        });

                        account.Status = Status.Ok;
                        _accountService.Update(account);
                    }
                    break;
                }
                return(true);
            }
            catch
            {
                return(false);
            }
        }