59 lines
2.2 KiB
C#
59 lines
2.2 KiB
C#
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();
|
||
using var cts = new CancellationTokenSource();
|
||
|
||
// Можно использовать команды для открытия страниц с роутингом
|
||
// /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<WelcomePage>()
|
||
.MapCommand<WelcomePage>("/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")
|
||
.Build(cts.Token);
|
||
|
||
Console.ReadKey();
|
||
cts.Cancel();
|
||
}
|
||
}
|
||
}
|