using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Telegram.Bot; using Telegram.Bot.Polling; using Telegram.Bot.Types; using Telegrator.Core; using Telegrator.Mediation; namespace Telegrator.Polling { /// public class HostUpdateRouter : UpdateRouter { /// /// of this router /// protected readonly ILogger Logger; /// public HostUpdateRouter( IHandlersProvider handlersProvider, IAwaitingProvider awaitingProvider, IOptions options, IUpdateHandlersPool handlersPool, ITelegramBotInfo botInfo, ILogger logger) : base(handlersProvider, awaitingProvider, options.Value, handlersPool, botInfo) { Logger = logger; ExceptionHandler = new DefaultRouterExceptionHandler(HandleException); } /// public override Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken) { //Logger.LogInformation("Received update of type \"{type}\"", update.Type); return base.HandleUpdateAsync(botClient, update, cancellationToken); } /// /// Default exception handler of this router /// /// /// /// /// public void HandleException(ITelegramBotClient botClient, Exception exception, HandleErrorSource source, CancellationToken cancellationToken) { if (exception is HandlerFaultedException handlerFaultedException) { Logger.LogError("\"{handler}\" handler's execution was faulted :\n{exception}", handlerFaultedException.HandlerInfo.ToString(), handlerFaultedException.InnerException?.ToString() ?? "No inner exception"); return; } Logger.LogError("Exception was thrown during update routing faulted :\n{exception}", exception.ToString()); } } }