namespace BotPages.Core { /// /// Простой роутер: команды верхнего уровня и делегирование текущей странице. /// public sealed class Router : IRouter { private readonly IPageRegistry _pages; /// /// Создаёт роутер страниц. /// public Router(IPageRegistry pages) => _pages = pages; /// /// Определяет текущую страницу и вызывает её обработчик. /// public async Task RouteAsync(UpdateContext ctx, CancellationToken ct) { var text = ctx.Text ?? string.Empty; if (text.StartsWith("/start", StringComparison.Ordinal)) { await ctx.Nav.ReplaceAsync(_pages.DefaultPage.Id, null, ctx, ct); return; } var current = (await ctx.Nav.CurrentAsync(ctx, ct))?.PageId; if (current is not null) { var pr = await _pages.Get(current).HandleAsync(ctx, ct); await ctx.Nav.ApplyResultAsync(ctx, pr, ct); return; } else { await ctx.Nav.ReplaceAsync(_pages.DefaultPage.Id, null, ctx, ct); return; } //TODO: Вынести в "дефолтный /start page" await ctx.Client.SendTextAsync(ctx.Chat.Id, "Не понимаю. Нажмите /start.", null, ct); } } }