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);