diff --git a/README.md b/README.md index 67379a4..936392b 100644 --- a/README.md +++ b/README.md @@ -169,11 +169,9 @@ public class StartForm : FormBase } - //Gets invoked during Navigation to this form - public override async Task Init(params object[] param) - { - - } + //Gets invoked during Navigation to this form + + //Init() got replaced with event handler //Opened() got replaced with event handler diff --git a/TelegramBotBase/Form/AutoCleanForm.cs b/TelegramBotBase/Form/AutoCleanForm.cs index 5617775..7fd9200 100644 --- a/TelegramBotBase/Form/AutoCleanForm.cs +++ b/TelegramBotBase/Form/AutoCleanForm.cs @@ -49,8 +49,15 @@ namespace TelegramBotBase.Form this.Device.MessageSent += Device_MessageSent; this.Device.MessageReceived += Device_MessageReceived; + + this.Device.MessageDeleted += Device_MessageDeleted; } + private void Device_MessageDeleted(object sender, MessageDeletedEventArgs e) + { + if (OldMessages.Contains(e.MessageId)) + OldMessages.Remove(e.MessageId); + } private void Device_MessageReceived(object sender, MessageReceivedEventArgs e) { @@ -143,8 +150,15 @@ namespace TelegramBotBase.Form { parallelQuery.ForAll(i => { - Device.DeleteMessage(i).GetAwaiter().GetResult(); - deletedMessages.Add(i); + try + { + Device.DeleteMessage(i).GetAwaiter().GetResult(); + deletedMessages.Add(i); + } + catch (ApiRequestException req) when (req.ErrorCode == 400) + { + deletedMessages.Add(i); + } }); } catch (AggregateException ex) @@ -153,11 +167,11 @@ namespace TelegramBotBase.Form var retryAfterSeconds = ex.InnerExceptions .Where(e => e is ApiRequestException apiEx && apiEx.ErrorCode == 429) - .Max(e =>(int?) ((ApiRequestException)e).Parameters.RetryAfter) ?? 0; + .Max(e => (int?)((ApiRequestException)e).Parameters.RetryAfter) ?? 0; retryAfterTask = Task.Delay(retryAfterSeconds * 1000); } - - deletedMessages.AsParallel().ForAll(i => Device.OnMessageDeleted(new MessageDeletedEventArgs(i))); + + //deletedMessages.AsParallel().ForAll(i => Device.OnMessageDeleted(new MessageDeletedEventArgs(i))); oldMessages = oldMessages.Where(x => !deletedMessages.Contains(x)); if (retryAfterTask != null) @@ -176,8 +190,15 @@ namespace TelegramBotBase.Form { parallelQuery.ForAll(i => { - Device.DeleteMessage(i).GetAwaiter().GetResult(); - deletedMessages.Add(i); + try + { + Device.DeleteMessage(i).GetAwaiter().GetResult(); + deletedMessages.Add(i); + } + catch (ApiRequestException req) when (req.ErrorCode == 400) + { + deletedMessages.Add(i); + } }); } catch (AggregateException ex) @@ -190,7 +211,7 @@ namespace TelegramBotBase.Form retryAfterTask = Task.Delay(retryAfterSeconds * 1000); } - deletedMessages.AsParallel().ForAll(i => Device.OnMessageDeleted(new MessageDeletedEventArgs(i))); + //deletedMessages.AsParallel().ForAll(i => Device.OnMessageDeleted(new MessageDeletedEventArgs(i))); oldMessages = oldMessages.Where(x => !deletedMessages.Contains(x)); if (retryAfterTask != null) diff --git a/TelegramBotBase/Sessions/DeviceSession.cs b/TelegramBotBase/Sessions/DeviceSession.cs index 0e0ce98..cf3a5c4 100644 --- a/TelegramBotBase/Sessions/DeviceSession.cs +++ b/TelegramBotBase/Sessions/DeviceSession.cs @@ -644,18 +644,12 @@ namespace TelegramBotBase.Sessions /// public virtual async Task DeleteMessage(int messageId = -1) { - try - { - await RAW(a => a.DeleteMessageAsync(this.DeviceId, messageId)); - return true; - } - catch (ApiRequestException) - { + await RAW(a => a.DeleteMessageAsync(this.DeviceId, messageId)); - } + OnMessageDeleted(new MessageDeletedEventArgs(messageId)); - return false; + return true; } ///