66 lines
2.2 KiB
C#
66 lines
2.2 KiB
C#
using BotPages.Core;
|
||
using BotPages.Telegram;
|
||
using Demo.Pages;
|
||
using Telegram.Bot;
|
||
|
||
namespace Demo
|
||
{
|
||
internal class Program
|
||
{
|
||
public static async Task Main(string[] args)
|
||
{
|
||
// Токен Telegram бота
|
||
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 pages = new IPage[]
|
||
{
|
||
new MainPage(),
|
||
new InlinePage(),
|
||
new ReplyPage(),
|
||
new FilesPage()
|
||
};
|
||
var registry = new PageRegistry(pages, pages[0]);
|
||
|
||
// Навигация и состояние
|
||
IStateStore store = new InMemoryStateStore();
|
||
INavigationService nav = new NavigationService(registry, store);
|
||
var router = new Router(registry);
|
||
|
||
var middleware = new IUpdateMiddleware[]
|
||
{
|
||
new LoggingMiddleware(), //логирование вызова в консоль
|
||
new ErrorHandlingMiddleware(), //обработчик ошибок
|
||
//new ThrottleMiddleware(TimeSpan.FromMilliseconds(150)), //задержка в 150мс перед ответом
|
||
};
|
||
|
||
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();
|
||
}
|
||
|
||
}
|
||
}
|