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..17ec7f3 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,41 @@ 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;
+ 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
+ {
+ Console.WriteLine(update.Exception.ToString());
+ }
+
}
#endregion