This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user