From 89332244e3b1b6cc8ebe47ac81f40eb77ad6d685 Mon Sep 17 00:00:00 2001 From: "TCSBANK\\e.khudik" Date: Mon, 4 Dec 2023 15:10:28 +0300 Subject: [PATCH 1/2] Added the ReceiveError event to MessageClient to provide the ability to handle exceptions in client code --- TelegramBotBase/Base/ErrorResult.cs | 14 ++++++++ TelegramBotBase/Base/MessageClient.cs | 50 ++++++++++++++++++++------- 2 files changed, 51 insertions(+), 13 deletions(-) create mode 100644 TelegramBotBase/Base/ErrorResult.cs diff --git a/TelegramBotBase/Base/ErrorResult.cs b/TelegramBotBase/Base/ErrorResult.cs new file mode 100644 index 0000000..00d7c04 --- /dev/null +++ b/TelegramBotBase/Base/ErrorResult.cs @@ -0,0 +1,14 @@ +using System; + +namespace TelegramBotBase.Base +{ + public class ErrorResult : EventArgs + { + public ErrorResult(Exception exception) + { + Exception = exception; + } + + public Exception Exception { get; } + } +} diff --git a/TelegramBotBase/Base/MessageClient.cs b/TelegramBotBase/Base/MessageClient.cs index b5f9b3a..b95131f 100644 --- a/TelegramBotBase/Base/MessageClient.cs +++ b/TelegramBotBase/Base/MessageClient.cs @@ -18,6 +18,7 @@ namespace TelegramBotBase.Base; public class MessageClient { private static readonly object EvOnMessageLoop = new(); + private static readonly object EvOnReceiveError = new(); private static object __evOnMessage = new(); @@ -128,22 +129,12 @@ public class MessageClient await OnMessageLoop(new UpdateResult(update, null)); } - public Task HandleErrorAsync(ITelegramBotClient botClient, Exception exception, + public async Task HandleErrorAsync(ITelegramBotClient botClient, Exception exception, CancellationToken cancellationToken) { - if (exception is ApiRequestException exApi) - { - Console.WriteLine($"Telegram API Error:\n[{exApi.ErrorCode}]\n{exApi.Message}"); - } - else - { - Console.WriteLine(exception.ToString()); - } - - return Task.CompletedTask; + await OnReceiveError(new ErrorResult(exception)); } - /// /// This will return the current list of bot commands. /// @@ -186,7 +177,40 @@ public class MessageClient public async Task OnMessageLoop(UpdateResult update) { - await (Events[EvOnMessageLoop] as Async.AsyncEventHandler)?.Invoke(this, update); + var eventHandlers = (Events[EvOnMessageLoop] as Async.AsyncEventHandler)?.Invoke(this, update); + + if (eventHandlers != null) + { + await eventHandlers; + } + } + + + public event Async.AsyncEventHandler ReceiveError + { + add => Events.AddHandler(EvOnReceiveError, value); + remove => Events.RemoveHandler(EvOnReceiveError, value); + } + + public async Task OnReceiveError(ErrorResult update) + { + var eventHandlers = (Events[EvOnReceiveError] as Async.AsyncEventHandler)?.Invoke(this, update); + + if (eventHandlers != null) + { + await eventHandlers; + } + else + { + if (update.Exception is ApiRequestException exApi) + { + Console.WriteLine($"Telegram API Error:\n[{exApi.ErrorCode}]\n{exApi.Message}"); + } + else + { + Console.WriteLine(update.Exception.ToString()); + } + } } #endregion From 794dee7f580e7788d859ae5289dcce44d58702dc Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Thu, 7 Dec 2023 17:49:35 +0100 Subject: [PATCH 2/2] improved readability --- TelegramBotBase/Base/MessageClient.cs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/TelegramBotBase/Base/MessageClient.cs b/TelegramBotBase/Base/MessageClient.cs index b95131f..17ec7f3 100644 --- a/TelegramBotBase/Base/MessageClient.cs +++ b/TelegramBotBase/Base/MessageClient.cs @@ -199,18 +199,19 @@ public class MessageClient if (eventHandlers != null) { await eventHandlers; + return; + } + + //Fallback when no event handler is used. + if (update.Exception is ApiRequestException exApi) + { + Console.WriteLine($"Telegram API Error:\n[{exApi.ErrorCode}]\n{exApi.Message}"); } else { - if (update.Exception is ApiRequestException exApi) - { - Console.WriteLine($"Telegram API Error:\n[{exApi.ErrorCode}]\n{exApi.Message}"); - } - else - { - Console.WriteLine(update.Exception.ToString()); - } + Console.WriteLine(update.Exception.ToString()); } + } #endregion