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