using BotPages.Core; using BotPages.Core.Logging; using BotPages.Core.Middleware; using BotPages.Core.Routing; using BotPages.Core.Storage; using BotPages.Telegram; using Demo.Pages; namespace Demo { internal class Program { public static async Task Main(string[] args) { var token = Environment.GetEnvironmentVariable("TELEGRAM_TOKEN") ?? throw new InvalidOperationException("TELEGRAM_TOKEN not set"); var logger = new ConsoleLogger(); var state = new InMemoryStateStorage(); // Можно использовать команды для открытия страниц с роутингом // /open Welcome // /open FileSend CommandHandler openHandler = async (ctx, args, ct) => { if (args is null || !args.TryGetValue("page", out var pageName)) { var req = new BotPages.Core.Abstractions.SendRequest { ChatId = ctx.Update.Chat.Id, Text = "Не указана страница для открытия." }; await ctx.SendAsync(req, ct: ct); return; } // Навигация на страницу по имени await ctx.Navigation.GoToAsync(pageName, ctx, ct); }; var app = new BotPagesApp(state, logger) .AddDefaultPage() .MapCommand("/start", true, "Главная") .MapCommand("/open {page}", openHandler, true, "открыть страницу /open {page}") .MapCommand(DetailsPage.Command, DetailsPage.CommandHandler, true, DetailsPage.CommandDescription) .AutoMapRoute() .AddMiddleware(new ErrorHandlingMiddleware(logger)) .AddMiddleware(new LoggingMiddleware(logger)) .AddTelegramAdapter(token, "Telegram"); await app.RunAsync(); logger.Log(LogLevel.Info, "Bot is running. Press Ctrl+C to stop."); Console.CancelKeyPress += (sender, e) => { Console.WriteLine("Cancel key pressed"); app.Stop(); e.Cancel = true; }; await app.WaitAsync(); } } }