diff --git a/TelegramBotBase/Args/ButtonClickedEventArgs.cs b/TelegramBotBase/Args/ButtonClickedEventArgs.cs index 9d7db14..c3fe2db 100644 --- a/TelegramBotBase/Args/ButtonClickedEventArgs.cs +++ b/TelegramBotBase/Args/ButtonClickedEventArgs.cs @@ -14,6 +14,8 @@ namespace TelegramBotBase.Args { public ButtonBase Button { get; set; } + public int Index { get; set; } + public ButtonClickedEventArgs() { @@ -23,6 +25,13 @@ namespace TelegramBotBase.Args public ButtonClickedEventArgs(ButtonBase button) { this.Button = button; + this.Index = -1; + } + + public ButtonClickedEventArgs(ButtonBase button, int Index) + { + this.Button = button; + this.Index = Index; } } diff --git a/TelegramBotBase/Base/ControlBase.cs b/TelegramBotBase/Base/ControlBase.cs index 43af947..234554f 100644 --- a/TelegramBotBase/Base/ControlBase.cs +++ b/TelegramBotBase/Base/ControlBase.cs @@ -67,6 +67,10 @@ namespace TelegramBotBase.Base } + /// + /// Will be called on a cleanup. + /// + /// public virtual async Task Cleanup() { diff --git a/TelegramBotBase/Controls/Hybrid/ButtonGrid.cs b/TelegramBotBase/Controls/Hybrid/ButtonGrid.cs index d92fd38..99c96b4 100644 --- a/TelegramBotBase/Controls/Hybrid/ButtonGrid.cs +++ b/TelegramBotBase/Controls/Hybrid/ButtonGrid.cs @@ -167,67 +167,68 @@ namespace TelegramBotBase.Controls.Hybrid if (!result.IsFirstHandler) return; + if (result.MessageText == null) + return; + var button = HeadLayoutButtonRow?.FirstOrDefault(a => a.Text.Trim() == result.MessageText) ?? SubHeadLayoutButtonRow?.FirstOrDefault(a => a.Text.Trim() == result.MessageText) ?? ButtonsForm.ToList().FirstOrDefault(a => a.Text.Trim() == result.MessageText); - if (button == null) + var index = ButtonsForm.FindRowByButton(button); + + if (button != null) { - if (result.MessageText == null) - return; - - if (result.MessageText == PreviousPageLabel) - { - if (this.CurrentPageIndex > 0) - this.CurrentPageIndex--; - - this.Updated(); - } - else if (result.MessageText == NextPageLabel) - { - if (this.CurrentPageIndex < this.PageCount - 1) - this.CurrentPageIndex++; - - this.Updated(); - } - else if (this.EnableSearch) - { - if (result.MessageText.StartsWith("🔍")) - { - //Sent note about searching - if (this.SearchQuery == null) - { - await this.Device.Send(this.SearchLabel); - } - - this.SearchQuery = null; - this.Updated(); - return; - } - - this.SearchQuery = result.MessageText; - - if (this.SearchQuery != null && this.SearchQuery != "") - { - this.CurrentPageIndex = 0; - this.Updated(); - } - - } - + await OnButtonClicked(new ButtonClickedEventArgs(button, index)); + //Remove button click message + if (this.DeletePreviousMessage) + await Device.DeleteMessage(result.MessageId); + result.Handled = true; return; } - await OnButtonClicked(new ButtonClickedEventArgs(button)); + if (result.MessageText == PreviousPageLabel) + { + if (this.CurrentPageIndex > 0) + this.CurrentPageIndex--; + + this.Updated(); + } + else if (result.MessageText == NextPageLabel) + { + if (this.CurrentPageIndex < this.PageCount - 1) + this.CurrentPageIndex++; + + this.Updated(); + } + else if (this.EnableSearch) + { + if (result.MessageText.StartsWith("🔍")) + { + //Sent note about searching + if (this.SearchQuery == null) + { + await this.Device.Send(this.SearchLabel); + } + + this.SearchQuery = null; + this.Updated(); + return; + } + + this.SearchQuery = result.MessageText; + + if (this.SearchQuery != null && this.SearchQuery != "") + { + this.CurrentPageIndex = 0; + this.Updated(); + } + + } - //Remove button click message - if (this.DeletePreviousMessage) - await Device.DeleteMessage(result.MessageId); - result.Handled = true; } @@ -250,9 +251,11 @@ namespace TelegramBotBase.Controls.Hybrid ?? SubHeadLayoutButtonRow?.FirstOrDefault(a => a.Value == result.RawData) ?? ButtonsForm.ToList().FirstOrDefault(a => a.Value == result.RawData); + var index = ButtonsForm.FindRowByButton(button); + if (button != null) { - await OnButtonClicked(new ButtonClickedEventArgs(button)); + await OnButtonClicked(new ButtonClickedEventArgs(button, index)); result.Handled = true; return; diff --git a/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs b/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs index 1da91b1..9fb8d5f 100644 --- a/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs +++ b/TelegramBotBase/Controls/Hybrid/TaggedButtonGrid.cs @@ -178,12 +178,18 @@ namespace TelegramBotBase.Controls.Hybrid if (!result.IsFirstHandler) return; + if (result.MessageText == null) + return; + var button = HeadLayoutButtonRow?.FirstOrDefault(a => a.Text.Trim() == result.MessageText) ?? SubHeadLayoutButtonRow?.FirstOrDefault(a => a.Text.Trim() == result.MessageText) ?? ButtonsForm.ToList().FirstOrDefault(a => a.Text.Trim() == result.MessageText); - if (result.MessageText == null) - return; + var index = HeadLayoutButtonRow?.IndexOf(button) + ?? SubHeadLayoutButtonRow?.IndexOf(button) + ?? ButtonsForm.ToList().IndexOf(button); + + switch (this.SelectedViewIndex) { @@ -191,7 +197,7 @@ namespace TelegramBotBase.Controls.Hybrid if (button != null) { - await OnButtonClicked(new ButtonClickedEventArgs(button)); + await OnButtonClicked(new ButtonClickedEventArgs(button, index)); //Remove button click message if (this.DeletePreviousMessage) @@ -304,6 +310,10 @@ namespace TelegramBotBase.Controls.Hybrid public async override Task Action(MessageResult result, string value = null) { + //Find clicked button depending on Text or Value (depending on markup type) + if (this.KeyboardType != eKeyboardType.InlineKeyBoard) + return; + if (result.Handled) return; @@ -312,18 +322,17 @@ namespace TelegramBotBase.Controls.Hybrid await result.ConfirmAction(this.ConfirmationText ?? ""); - //Find clicked button depending on Text or Value (depending on markup type) - if (this.KeyboardType != eKeyboardType.InlineKeyBoard) - return; - - var button = HeadLayoutButtonRow?.FirstOrDefault(a => a.Value == result.RawData) ?? SubHeadLayoutButtonRow?.FirstOrDefault(a => a.Value == result.RawData) ?? ButtonsForm.ToList().FirstOrDefault(a => a.Value == result.RawData); + var index = HeadLayoutButtonRow?.IndexOf(button) + ?? SubHeadLayoutButtonRow?.IndexOf(button) + ?? ButtonsForm.ToList().IndexOf(button); + if (button != null) { - await OnButtonClicked(new ButtonClickedEventArgs(button)); + await OnButtonClicked(new ButtonClickedEventArgs(button, index)); result.Handled = true; return; diff --git a/TelegramBotBase/Form/ButtonForm.cs b/TelegramBotBase/Form/ButtonForm.cs index de5cdae..be32f49 100644 --- a/TelegramBotBase/Form/ButtonForm.cs +++ b/TelegramBotBase/Form/ButtonForm.cs @@ -151,6 +151,15 @@ namespace TelegramBotBase.Form return ikb; } + public int FindRowByButton(ButtonBase button) + { + var row = this.Buttons.FirstOrDefault(a => a.Count(b => b == button) > 0); + if (row == null) + return -1; + + return this.Buttons.IndexOf(row); + } + /// /// Returns the first Button with the given value. ///