public static MiddlewareData AddResponseRenderer(this MiddlewareData data, Action <MessageData.MessageDataBuilder> action) { var builder = MessageData.Builder(); action(builder); return(data.AddRenderer(new ResponseMessageRenderer(builder.Build()))); }
public IActionResult GetTime() { return(new ResponseResult(MessageData.Builder() .SetText($"Сейчас: {DateTime.Now.TimeOfDay}") .SetInlineKeyboardMarkup(b => b.AddRow(r => r.AddItem(new InlineKeyboardButton("Обновить") { CallbackData = "/get:time" }))) .Build())); }
public async Task <MiddlewareData> InvokeAsync(MiddlewareData data, IMiddlewaresChain chain) { var userPreferences = data.Features.GetOne <UserPreferencesFeature>() .Map(f => f.UserPreferences) .OrElse(DefaultUserPreferences.Instance); var routingData = ParseRoutingData(data); var prevRoutingData = await LoadSavedRoutingData(data); if (prevRoutingData != null) { routingData = JoinRoutingData(prevRoutingData, routingData); } var dataWithContext = data.UpdateFeatures(f => f.ReplaceExclusive <SessionFeature>( e => e.SetRoutingData(prevRoutingData) ) ); _logger.LogDebug($"Try find route for {routingData.Path} ({routingData.UserCommand})"); var match = _router.FindRoute(routingData); var chatId = dataWithContext.Features.RequireOne <UpdateInfoFeature>().GetAnyMessage().Chat.Id; if (!match.IsMatched) { await _sessionStorage.ClearRoutingDataAsync(chatId); var message = _localizationManager.Localize( userPreferences: userPreferences, key: LocalizationKeys.UnknownCommand, parameters: new { text = routingData.UserCommand } ); return(dataWithContext.AddResponseRenderer(message)); } if (!match.IsCompleted) { await _sessionStorage.SaveRoutingDataAsync(chatId, routingData); var responseMessage = MessageData.Builder() .SetText(_localizationManager.Localize(userPreferences, LocalizationKeys.SelectOneForCompletion)) .SetInlineKeyboardMarkup(bldr => BuildResponseMarkup(bldr, match.UncompletedRoutes)) .Build(); return(dataWithContext.AddResponseRenderer(responseMessage)); } await _sessionStorage.ClearRoutingDataAsync(chatId); var route = match.CompletedRoute; var feature = new RouterFeature(route.Route, routingData, route.Fields); var dataWithRoute = dataWithContext.UpdateFeatures(f => f.AddExclusive <RouterFeature>(feature)); return(await chain.NextAsync(dataWithRoute)); }