public MessageEventResult ProcessMessage(MessageEvent messageEvent) { IStateFactory stateFactory = StateFactory; if (!_stateStorage.TryGetValue(messageEvent.Id, out IState currentState)) { currentState = stateFactory.GetInitialState(); SetState(messageEvent.Id, currentState); } MessageEventResult result; try { result = currentState.HandleEvent(messageEvent); if (!FinalStateReached(messageEvent.Id)) { IState nextState = stateFactory.GetNextState(currentState); SetState(messageEvent.Id, nextState); } else { SetState(messageEvent.Id, stateFactory.GetInitialState()); } } catch (PreviousStateUserAnswerException prevStateAnswerEx) { result = new MessageEventResult(prevStateAnswerEx.Message); } return(result); }
public async Task HandleCallbackQuery(CallbackQuery callbackQuery) { string chatId = callbackQuery.Message.Chat.Id.ToString(); MessageEventResult result = _stateMachine.ProcessMessage(new MessageEvent { Id = chatId, Message = callbackQuery.Data }); await _botClient.SendTextMessageAsync( chatId, result.Text, parseMode : Telegram.Bot.Types.Enums.ParseMode.Markdown, replyMarkup : result.ReplyMarkup ); }