Переработанная версия ядра
All checks were successful
CI / build-test (push) Successful in 42s

This commit is contained in:
2025-12-05 12:57:05 +03:00
parent ee175a35a0
commit d817417a69
81 changed files with 2335 additions and 1453 deletions

View File

@@ -1,7 +1,10 @@
using BotPages.Core;
using BotPages.Core.Abstractions;
using BotPages.Core.Logging;
using BotPages.Core.Middleware;
using BotPages.Core.Storage;
using BotPages.Telegram;
using Demo.Pages;
using Telegram.Bot;
namespace Demo
{
@@ -9,57 +12,30 @@ namespace Demo
{
public static async Task Main(string[] args)
{
// Токен Telegram бота
var token = Environment.GetEnvironmentVariable("TELEGRAM_TOKEN") ?? throw new InvalidOperationException("TELEGRAM_TOKEN not set");
var token = Environment.GetEnvironmentVariable("TELEGRAM_TOKEN")
?? throw new InvalidOperationException("TELEGRAM_TOKEN not set");
// Инициализация Telegram клиента
var botClient = new TelegramBotClient(token);
var chatClient = new TelegramClientAdapter(botClient);
var logger = new ConsoleLogger();
var state = new InMemoryStateStorage();
var telegram = new TelegramAdapter(logger);
var factory = new MultiAdapterFactory()
.Register("Telegram", telegram);
// Регистрируем страницы
var pages = new IPage[]
{
new MainPage(),
new InlinePage(),
new ReplyPage(),
new FilesPage()
};
var registry = new PageRegistry(pages, pages[0]);
var app = new BotPagesApp(factory, state, logger)
.AddDefaultPage<WelcomePage>()
.MapCommand<WelcomePage>("/start")
.AddMiddleware(new ErrorHandlingMiddleware(logger))
.AddMiddleware(new LoggingMiddleware(logger));
// Навигация и состояние
IStateStore store = new InMemoryStateStore();
INavigationService nav = new NavigationService(registry, store);
var router = new Router(registry);
using var cts = new CancellationTokenSource();
var middleware = new IUpdateMiddleware[]
{
new LoggingMiddleware(), //логирование вызова в консоль
new ErrorHandlingMiddleware(), //обработчик ошибок
//new ThrottleMiddleware(TimeSpan.FromMilliseconds(150)), //задержка в 150мс перед ответом
};
await telegram.StartPollingAsync(token,
update => app.HandleUpdateAsync(update, CancellationToken.None),
cts.Token);
var pipeline = new Pipeline(middleware, router);
botClient.StartReceiving(
async (bot, update, ct) =>
{
var ctx = TelegramUpdateMapper.Map(bot, nav, store, update);
await pipeline.ExecuteAsync(ctx, ct);
},
(bot, error, ct) =>
{
Console.WriteLine($"⚠️ Ошибка Telegram: {error}");
return Task.CompletedTask;
}
);
var me = await botClient.GetMe();
Console.WriteLine($"BotPages Demo (@{me.Username}) запущен. Нажмите Enter для выхода.");
Console.ReadLine();
Console.ReadKey();
cts.Cancel();
}
}
}