diff --git a/TelegramBotBase/Form/AlertDialog.cs b/TelegramBotBase/Form/AlertDialog.cs
index de24d54..c84b2cc 100644
--- a/TelegramBotBase/Form/AlertDialog.cs
+++ b/TelegramBotBase/Form/AlertDialog.cs
@@ -11,7 +11,7 @@ namespace TelegramBotBase.Form
///
/// A simple prompt dialog with one ok Button
///
- public class AlertDialog : PromptDialog
+ public class AlertDialog : ConfirmDialog
{
public String ButtonText { get; set; }
diff --git a/TelegramBotBase/Form/ConfirmDialog.cs b/TelegramBotBase/Form/ConfirmDialog.cs
new file mode 100644
index 0000000..9081ced
--- /dev/null
+++ b/TelegramBotBase/Form/ConfirmDialog.cs
@@ -0,0 +1,100 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TelegramBotBase.Base;
+
+namespace TelegramBotBase.Form
+{
+ public class ConfirmDialog : FormBase
+ {
+ public String Message { get; set; }
+
+
+ public List Buttons { get; set; }
+
+ private EventHandlerList __Events { get; set; } = new EventHandlerList();
+
+ private static object __evButtonClicked { get; } = new object();
+
+ public ConfirmDialog()
+ {
+
+ }
+
+ public ConfirmDialog(String Message)
+ {
+ this.Message = Message;
+ this.Buttons = new List();
+ }
+
+ public ConfirmDialog(String Message, params ButtonBase[] Buttons)
+ {
+ this.Message = Message;
+ this.Buttons = Buttons.ToList();
+ }
+
+ ///
+ /// Adds one Button
+ ///
+ ///
+ public void AddButton(ButtonBase button)
+ {
+ this.Buttons.Add(button);
+ }
+
+ public override async Task Action(MessageResult message)
+ {
+ var call = message.GetData();
+ if (call == null)
+ return;
+
+ message.Handled = true;
+
+ await message.ConfirmAction();
+
+ await message.DeleteMessage();
+
+ ButtonBase button = this.Buttons.FirstOrDefault(a => a.Value == call.Value);
+
+ if (button == null)
+ {
+ return;
+ }
+
+ OnButtonClicked(new ButtonClickedEventArgs(button));
+ }
+
+
+ public override async Task Render(MessageResult message)
+ {
+ ButtonForm btn = new ButtonForm();
+
+ var buttons = this.Buttons.Select(a => new ButtonBase(a.Text, CallbackData.Create("action", a.Value))).ToList();
+ btn.AddButtonRow(buttons);
+
+ await this.Device.Send(this.Message, btn);
+ }
+
+
+ public event EventHandler ButtonClicked
+ {
+ add
+ {
+ this.__Events.AddHandler(__evButtonClicked, value);
+ }
+ remove
+ {
+ this.__Events.RemoveHandler(__evButtonClicked, value);
+ }
+ }
+
+ public void OnButtonClicked(ButtonClickedEventArgs e)
+ {
+ (this.__Events[__evButtonClicked] as EventHandler)?.Invoke(this, e);
+ }
+
+ }
+}
diff --git a/TelegramBotBase/Form/PromptDialog.cs b/TelegramBotBase/Form/PromptDialog.cs
index b5b2bd9..bb18b4c 100644
--- a/TelegramBotBase/Form/PromptDialog.cs
+++ b/TelegramBotBase/Form/PromptDialog.cs
@@ -12,12 +12,12 @@ namespace TelegramBotBase.Form
{
public String Message { get; set; }
-
- public List Buttons { get; set; }
+ public String Value { get; set; }
private EventHandlerList __Events { get; set; } = new EventHandlerList();
- private static object __evButtonClicked { get; } = new object();
+ private static object __evCompleted { get; } = new object();
+
public PromptDialog()
{
@@ -27,73 +27,50 @@ namespace TelegramBotBase.Form
public PromptDialog(String Message)
{
this.Message = Message;
- this.Buttons = new List();
}
- public PromptDialog(String Message, params ButtonBase[] Buttons)
+ public async override Task Load(MessageResult message)
{
- this.Message = Message;
- this.Buttons = Buttons.ToList();
- }
-
- ///
- /// Adds one Button
- ///
- ///
- public void AddButton(ButtonBase button)
- {
- this.Buttons.Add(button);
- }
-
- public override async Task Action(MessageResult message)
- {
- var call = message.GetData();
- if (call == null)
+ if (message.Handled)
return;
- message.Handled = true;
-
- await message.ConfirmAction();
-
- await message.DeleteMessage();
-
- ButtonBase button = this.Buttons.FirstOrDefault(a => a.Value == call.Value);
-
- if (button == null)
+ if (this.Value == null)
{
- return;
+ this.Value = message.MessageText;
}
- OnButtonClicked(new ButtonClickedEventArgs(button));
- }
+ }
public override async Task Render(MessageResult message)
{
- ButtonForm btn = new ButtonForm();
- var buttons = this.Buttons.Select(a => new ButtonBase(a.Text, CallbackData.Create("action", a.Value))).ToList();
- btn.AddButtonRow(buttons);
+ if (this.Value == null)
+ {
+ await this.Device.Send(this.Message);
+ return;
+ }
- await this.Device.Send(this.Message, btn);
+
+ OnCompleted(new EventArgs());
}
- public event EventHandler ButtonClicked
+ public event EventHandler Completed
{
add
{
- this.__Events.AddHandler(__evButtonClicked, value);
+ this.__Events.AddHandler(__evCompleted, value);
}
remove
{
- this.__Events.RemoveHandler(__evButtonClicked, value);
+ this.__Events.RemoveHandler(__evCompleted, value);
}
}
- public void OnButtonClicked(ButtonClickedEventArgs e)
+ public void OnCompleted(EventArgs e)
{
- (this.__Events[__evButtonClicked] as EventHandler)?.Invoke(this, e);
+ (this.__Events[__evCompleted] as EventHandler)?.Invoke(this, e);
}
}
diff --git a/TelegramBotBaseTest/Tests/TestForm2.cs b/TelegramBotBaseTest/Tests/TestForm2.cs
index 2110a85..2c07fbb 100644
--- a/TelegramBotBaseTest/Tests/TestForm2.cs
+++ b/TelegramBotBaseTest/Tests/TestForm2.cs
@@ -33,7 +33,7 @@ namespace TelegramBaseTest.Tests
}
-
+
public override async Task Action(MessageResult message)
{
@@ -43,6 +43,8 @@ namespace TelegramBaseTest.Tests
await message.DeleteMessage();
+ message.Handled = true;
+
if (call.Value == "testform1")
{
@@ -62,38 +64,28 @@ namespace TelegramBaseTest.Tests
await this.NavigateTo(ad);
}
- else if (call.Value == "prompt")
+ else if (call.Value == "confirm")
{
- PromptDialog pd = new PromptDialog("Please confirm");
-
- pd.ButtonClicked += async (s, en) =>
- {
- if(en.Button.Value == "ok")
- {
- var tf = new TestForm2();
- await pd.NavigateTo(tf);
- }
- else if(en.Button.Value == "cancel")
- {
- var tf = new TestForm2();
- await pd.NavigateTo(tf);
- }
-
- };
-
- pd.AddButton(new ButtonBase("Ok", "ok"));
- pd.AddButton(new ButtonBase("Cancel", "cancel"));
-
- await this.NavigateTo(pd);
- }
- else if (call.Value == "promptevt")
- {
- PromptDialog pd = new PromptDialog("Please confirm", new ButtonBase("Ok", "ok"), new ButtonBase("Cancel", "cancel"));
+ ConfirmDialog pd = new ConfirmDialog("Please confirm", new ButtonBase("Ok", "ok"), new ButtonBase("Cancel", "cancel"));
pd.ButtonClicked += async (s, en) =>
{
var tf = new TestForm2();
-
+
+ await pd.NavigateTo(tf);
+ };
+
+ await this.NavigateTo(pd);
+ }
+ else if (call.Value == "prompt")
+ {
+ PromptDialog pd = new PromptDialog("Please tell me your name ?");
+
+ pd.Completed += async (s, en) =>
+ {
+ await this.Device.Send("Hello " + pd.Value);
+
+ var tf = new TestForm2();
await pd.NavigateTo(tf);
};
@@ -124,9 +116,9 @@ namespace TelegramBaseTest.Tests
btn.AddButtonRow(new ButtonBase("Information Prompt", CallbackData.Create("navigate", "alert")));
- btn.AddButtonRow(new ButtonBase("Confirmation Prompt without event", CallbackData.Create("navigate", "prompt")));
+ btn.AddButtonRow(new ButtonBase("Confirmation Prompt with event", CallbackData.Create("navigate", "confirm")));
- btn.AddButtonRow(new ButtonBase("Confirmation Prompt with event", CallbackData.Create("navigate", "promptevt")));
+ btn.AddButtonRow(new ButtonBase("Request Prompt", CallbackData.Create("navigate", "prompt")));
await this.Device.SendPhoto(bmp, "Test", btn);