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.
///