/
d.alekseev
/
SmartMenuBot
Обзор
Документация
Войти
/
d.alekseev
/
SmartMenuBot
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
ConsoleBot/TelegramBot/UpdateHandler.cs
66 строк
2 KB
d.alekseev
feat: списки задач, callback-сценарии и рефактор маршрутизации UpdateHandler
13 фев 2026, 17:30
13 фев 2026, 17:30
a225948
Код
Авторство
О чём код?
using Telegram.Bot; using Telegram.Bot.Types; using SmartMenuBot.TelegramBot.Processors.Interfaces; namespace SmartMenuBot.TelegramBot { public class UpdateHandler { private readonly IMessageUpdateProcessor _messageUpdateProcessor; private readonly ICallbackUpdateProcessor _callbackUpdateProcessor; public event MessageEventHandler? OnHandleUpdateStarted; public event MessageEventHandler? OnHandleUpdateCompleted; public UpdateHandler( IMessageUpdateProcessor messageUpdateProcessor, ICallbackUpdateProcessor callbackUpdateProcessor) { _messageUpdateProcessor = messageUpdateProcessor; _callbackUpdateProcessor = callbackUpdateProcessor; } private async Task OnMessageAsync(ITelegramBotClient botClient, Update update, Message message, CancellationToken ct) { if (message.From is null) return; var messageText = message.Text ?? string.Empty; OnHandleUpdateStarted?.Invoke(messageText); try { await _messageUpdateProcessor.ProcessAsync(botClient, update, message, ct); } finally { OnHandleUpdateCompleted?.Invoke(messageText); } } private async Task OnCallbackQueryAsync( ITelegramBotClient botClient, Update update, CallbackQuery callbackQuery, CancellationToken ct) { await _callbackUpdateProcessor.ProcessAsync(botClient, update, callbackQuery, ct); } public async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken ct) { await (update switch { { Message: { } message } => OnMessageAsync(botClient, update, message, ct), { CallbackQuery: { } callbackQuery } => OnCallbackQueryAsync(botClient, update, callbackQuery, ct), _ => Task.CompletedTask }); } public Task HandleErrorAsync(ITelegramBotClient botClient, Exception exception, CancellationToken ct) { Console.WriteLine($"Ошибка: {exception.GetType()}: {exception.Message}"); return Task.CompletedTask; } } }