Renaming TelegramBotBaseTest -> TelegramBotBase.Test
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests
|
||||
{
|
||||
public class ButtonTestForm : AutoCleanForm
|
||||
{
|
||||
|
||||
public ButtonTestForm()
|
||||
{
|
||||
this.Opened += ButtonTestForm_Opened;
|
||||
}
|
||||
|
||||
private async Task ButtonTestForm_Opened(object sender, EventArgs e)
|
||||
{
|
||||
await this.Device.Send("Hello world! (Click 'back' to get back to Start)");
|
||||
}
|
||||
|
||||
public override async Task Action(MessageResult message)
|
||||
{
|
||||
|
||||
var call = message.GetData<CallbackData>();
|
||||
|
||||
await message.ConfirmAction();
|
||||
|
||||
|
||||
if (call == null)
|
||||
return;
|
||||
|
||||
message.Handled = true;
|
||||
|
||||
switch (call.Value)
|
||||
{
|
||||
case "button1":
|
||||
|
||||
await this.Device.Send("Button 1 pressed");
|
||||
|
||||
break;
|
||||
|
||||
case "button2":
|
||||
|
||||
await this.Device.Send("Button 2 pressed");
|
||||
|
||||
break;
|
||||
|
||||
case "button3":
|
||||
|
||||
await this.Device.Send("Button 3 pressed");
|
||||
|
||||
break;
|
||||
|
||||
case "button4":
|
||||
|
||||
await this.Device.Send("Button 4 pressed");
|
||||
|
||||
break;
|
||||
|
||||
case "back":
|
||||
|
||||
var st = new Menu();
|
||||
|
||||
await this.NavigateTo(st);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
message.Handled = false;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override async Task Render(MessageResult message)
|
||||
{
|
||||
|
||||
ButtonForm btn = new ButtonForm();
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("Button 1", new CallbackData("a", "button1").Serialize()), new ButtonBase("Button 2", new CallbackData("a", "button2").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("Button 3", new CallbackData("a", "button3").Serialize()), new ButtonBase("Button 4", new CallbackData("a", "button4").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("Google.com", "google", "https://www.google.com"), new ButtonBase("Telegram", "telegram", "https://telegram.org/"));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("Back", new CallbackData("a", "back").Serialize()));
|
||||
|
||||
await this.Device.Send("Click a button", btn);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Args;
|
||||
using TelegramBotBase.Controls;
|
||||
using TelegramBotBase.Controls.Hybrid;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Controls
|
||||
{
|
||||
public class ButtonGridForm : AutoCleanForm
|
||||
{
|
||||
|
||||
ButtonGrid m_Buttons = null;
|
||||
|
||||
public ButtonGridForm()
|
||||
{
|
||||
this.DeleteMode = TelegramBotBase.Enums.eDeleteMode.OnLeavingForm;
|
||||
|
||||
this.Init += ButtonGridForm_Init;
|
||||
}
|
||||
|
||||
private async Task ButtonGridForm_Init(object sender, InitEventArgs e)
|
||||
{
|
||||
m_Buttons = new ButtonGrid();
|
||||
|
||||
m_Buttons.KeyboardType = TelegramBotBase.Enums.eKeyboardType.InlineKeyBoard;
|
||||
|
||||
ButtonForm bf = new ButtonForm();
|
||||
|
||||
bf.AddButtonRow(new ButtonBase("Back", "back"), new ButtonBase("Switch Keyboard", "switch"));
|
||||
|
||||
bf.AddButtonRow(new ButtonBase("Button1", "b1"), new ButtonBase("Button2", "b2"));
|
||||
|
||||
bf.AddButtonRow(new ButtonBase("Button3", "b3"), new ButtonBase("Button4", "b4"));
|
||||
|
||||
m_Buttons.ButtonsForm = bf;
|
||||
|
||||
m_Buttons.ButtonClicked += Bg_ButtonClicked;
|
||||
|
||||
this.AddControl(m_Buttons);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private async Task Bg_ButtonClicked(object sender, ButtonClickedEventArgs e)
|
||||
{
|
||||
if (e.Button == null)
|
||||
return;
|
||||
|
||||
if (e.Button.Value == "back")
|
||||
{
|
||||
var start = new Menu();
|
||||
await this.NavigateTo(start);
|
||||
}
|
||||
else if (e.Button.Value == "switch")
|
||||
{
|
||||
switch (m_Buttons.KeyboardType)
|
||||
{
|
||||
case TelegramBotBase.Enums.eKeyboardType.ReplyKeyboard:
|
||||
m_Buttons.KeyboardType = TelegramBotBase.Enums.eKeyboardType.InlineKeyBoard;
|
||||
break;
|
||||
case TelegramBotBase.Enums.eKeyboardType.InlineKeyBoard:
|
||||
m_Buttons.KeyboardType = TelegramBotBase.Enums.eKeyboardType.ReplyKeyboard;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
await this.Device.Send($"Button clicked with Text: {e.Button.Text} and Value {e.Button.Value}");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Args;
|
||||
using TelegramBotBase.Controls;
|
||||
using TelegramBotBase.Controls.Hybrid;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Controls
|
||||
{
|
||||
public class ButtonGridPagingForm : AutoCleanForm
|
||||
{
|
||||
|
||||
ButtonGrid m_Buttons = null;
|
||||
|
||||
public ButtonGridPagingForm()
|
||||
{
|
||||
this.DeleteMode = TelegramBotBase.Enums.eDeleteMode.OnLeavingForm;
|
||||
|
||||
this.Init += ButtonGridForm_Init;
|
||||
}
|
||||
|
||||
private async Task ButtonGridForm_Init(object sender, InitEventArgs e)
|
||||
{
|
||||
m_Buttons = new ButtonGrid();
|
||||
|
||||
m_Buttons.KeyboardType = TelegramBotBase.Enums.eKeyboardType.ReplyKeyboard;
|
||||
|
||||
m_Buttons.EnablePaging = true;
|
||||
m_Buttons.EnableSearch = true;
|
||||
|
||||
m_Buttons.HeadLayoutButtonRow = new List<ButtonBase>() { new ButtonBase("Back", "back") };
|
||||
|
||||
var countries = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
|
||||
|
||||
ButtonForm bf = new ButtonForm();
|
||||
|
||||
foreach (var c in countries)
|
||||
{
|
||||
bf.AddButtonRow(new ButtonBase(c.EnglishName, c.EnglishName));
|
||||
}
|
||||
|
||||
m_Buttons.ButtonsForm = bf;
|
||||
|
||||
m_Buttons.ButtonClicked += Bg_ButtonClicked;
|
||||
|
||||
this.AddControl(m_Buttons);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private async Task Bg_ButtonClicked(object sender, ButtonClickedEventArgs e)
|
||||
{
|
||||
if (e.Button == null)
|
||||
return;
|
||||
|
||||
if (e.Button.Value == "back")
|
||||
{
|
||||
var start = new Menu();
|
||||
await this.NavigateTo(start);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
await this.Device.Send($"Button clicked with Text: {e.Button.Text} and Value {e.Button.Value}");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Args;
|
||||
using TelegramBotBase.Controls;
|
||||
using TelegramBotBase.Controls.Hybrid;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Controls
|
||||
{
|
||||
public class ButtonGridTagForm : AutoCleanForm
|
||||
{
|
||||
|
||||
TaggedButtonGrid m_Buttons = null;
|
||||
|
||||
public ButtonGridTagForm()
|
||||
{
|
||||
this.DeleteMode = TelegramBotBase.Enums.eDeleteMode.OnLeavingForm;
|
||||
|
||||
this.Init += ButtonGridTagForm_Init;
|
||||
}
|
||||
|
||||
private async Task ButtonGridTagForm_Init(object sender, InitEventArgs e)
|
||||
{
|
||||
m_Buttons = new TaggedButtonGrid();
|
||||
|
||||
m_Buttons.KeyboardType = TelegramBotBase.Enums.eKeyboardType.ReplyKeyboard;
|
||||
|
||||
m_Buttons.EnablePaging = true;
|
||||
|
||||
m_Buttons.HeadLayoutButtonRow = new List<ButtonBase>() { new ButtonBase("Back", "back") };
|
||||
|
||||
|
||||
var countries = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
|
||||
|
||||
ButtonForm bf = new ButtonForm();
|
||||
|
||||
foreach (var c in countries)
|
||||
{
|
||||
bf.AddButtonRow(new TagButtonBase(c.EnglishName, c.EnglishName, c.Parent.EnglishName));
|
||||
}
|
||||
|
||||
m_Buttons.Tags = countries.Select(a => a.Parent.EnglishName).Distinct().OrderBy(a => a).ToList();
|
||||
m_Buttons.SelectedTags = countries.Select(a => a.Parent.EnglishName).Distinct().OrderBy(a => a).ToList();
|
||||
|
||||
m_Buttons.EnableCheckAllTools = true;
|
||||
|
||||
m_Buttons.DataSource = new TelegramBotBase.Datasources.ButtonFormDataSource(bf);
|
||||
|
||||
m_Buttons.ButtonClicked += Bg_ButtonClicked;
|
||||
|
||||
this.AddControl(m_Buttons);
|
||||
}
|
||||
|
||||
private async Task Bg_ButtonClicked(object sender, ButtonClickedEventArgs e)
|
||||
{
|
||||
if (e.Button == null)
|
||||
return;
|
||||
|
||||
switch (e.Button.Value)
|
||||
{
|
||||
|
||||
case "back":
|
||||
var start = new Menu();
|
||||
await this.NavigateTo(start);
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
await this.Device.Send($"Button clicked with Text: {e.Button.Text} and Value {e.Button.Value}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
using System;
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
using TelegramBotBase.Controls;
|
||||
using TelegramBotBase.Args;
|
||||
using TelegramBotBase.Controls.Inline;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Controls
|
||||
{
|
||||
public class CalendarPickerForm : AutoCleanForm
|
||||
{
|
||||
|
||||
public CalendarPicker Picker { get; set; }
|
||||
|
||||
int? selectedDateMessage { get; set; }
|
||||
|
||||
public CalendarPickerForm()
|
||||
{
|
||||
this.DeleteMode = TelegramBotBase.Enums.eDeleteMode.OnLeavingForm;
|
||||
this.Init += CalendarPickerForm_Init;
|
||||
}
|
||||
|
||||
private async Task CalendarPickerForm_Init(object sender, InitEventArgs e)
|
||||
{
|
||||
this.Picker = new CalendarPicker();
|
||||
this.Picker.Title = "Datum auswählen / Pick date";
|
||||
|
||||
this.AddControl(Picker);
|
||||
}
|
||||
|
||||
|
||||
public override async Task Action(MessageResult message)
|
||||
{
|
||||
|
||||
switch(message.RawData)
|
||||
{
|
||||
case "back":
|
||||
|
||||
var s = new Menu();
|
||||
|
||||
await this.NavigateTo(s);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public override async Task Render(MessageResult message)
|
||||
{
|
||||
String s = "";
|
||||
|
||||
s = "Selected date is " + this.Picker.SelectedDate.ToShortDateString() + "\r\n";
|
||||
s += "Selected month is " + this.Picker.Culture.DateTimeFormat.MonthNames[this.Picker.VisibleMonth.Month - 1] + "\r\n";
|
||||
s += "Selected year is " + this.Picker.VisibleMonth.Year.ToString();
|
||||
|
||||
ButtonForm bf = new ButtonForm();
|
||||
bf.AddButtonRow(new ButtonBase("Back","back"));
|
||||
|
||||
if (selectedDateMessage != null)
|
||||
{
|
||||
await this.Device.Edit(this.selectedDateMessage.Value, s, bf);
|
||||
}
|
||||
else
|
||||
{
|
||||
var m = await this.Device.Send(s, bf);
|
||||
this.selectedDateMessage = m.MessageId;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Args;
|
||||
using TelegramBotBase.Controls;
|
||||
using TelegramBotBase.Controls.Hybrid;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Controls
|
||||
{
|
||||
public class CheckedButtonListForm : AutoCleanForm
|
||||
{
|
||||
|
||||
CheckedButtonList m_Buttons = null;
|
||||
|
||||
public CheckedButtonListForm()
|
||||
{
|
||||
this.DeleteMode = TelegramBotBase.Enums.eDeleteMode.OnLeavingForm;
|
||||
|
||||
this.Init += CheckedButtonListForm_Init;
|
||||
}
|
||||
|
||||
private async Task CheckedButtonListForm_Init(object sender, InitEventArgs e)
|
||||
{
|
||||
m_Buttons = new CheckedButtonList();
|
||||
|
||||
m_Buttons.KeyboardType = TelegramBotBase.Enums.eKeyboardType.InlineKeyBoard;
|
||||
m_Buttons.EnablePaging = true;
|
||||
|
||||
m_Buttons.HeadLayoutButtonRow = new List<ButtonBase>() { new ButtonBase("Back", "back"), new ButtonBase("Switch Keyboard", "switch") };
|
||||
|
||||
m_Buttons.SubHeadLayoutButtonRow = new List<ButtonBase>() { new ButtonBase("No checked items", "$") };
|
||||
|
||||
ButtonForm bf = new ButtonForm();
|
||||
|
||||
for (int i = 0; i < 30; i++)
|
||||
{
|
||||
bf.AddButtonRow($"{i + 1}. Item", i.ToString());
|
||||
}
|
||||
|
||||
m_Buttons.DataSource = new TelegramBotBase.Datasources.ButtonFormDataSource(bf);
|
||||
|
||||
m_Buttons.ButtonClicked += Bg_ButtonClicked;
|
||||
m_Buttons.CheckedChanged += M_Buttons_CheckedChanged;
|
||||
|
||||
this.AddControl(m_Buttons);
|
||||
}
|
||||
|
||||
private async Task M_Buttons_CheckedChanged(object sender, CheckedChangedEventArgs e)
|
||||
{
|
||||
m_Buttons.SubHeadLayoutButtonRow = new List<ButtonBase>() { new ButtonBase($"{m_Buttons.CheckedItems.Count} checked items", "$") };
|
||||
}
|
||||
|
||||
private async Task Bg_ButtonClicked(object sender, ButtonClickedEventArgs e)
|
||||
{
|
||||
if (e.Button == null)
|
||||
return;
|
||||
|
||||
switch (e.Button.Value)
|
||||
{
|
||||
case "back":
|
||||
|
||||
var start = new Menu();
|
||||
await NavigateTo(start);
|
||||
break;
|
||||
|
||||
|
||||
case "switch":
|
||||
switch (m_Buttons.KeyboardType)
|
||||
{
|
||||
case TelegramBotBase.Enums.eKeyboardType.ReplyKeyboard:
|
||||
m_Buttons.KeyboardType = TelegramBotBase.Enums.eKeyboardType.InlineKeyBoard;
|
||||
break;
|
||||
case TelegramBotBase.Enums.eKeyboardType.InlineKeyBoard:
|
||||
m_Buttons.KeyboardType = TelegramBotBase.Enums.eKeyboardType.ReplyKeyboard;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
await Device.Send($"Button clicked with Text: {e.Button.Text} and Value {e.Button.Value}");
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
using System;
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
using TelegramBotBase.Controls;
|
||||
using TelegramBotBase.Args;
|
||||
using TelegramBotBase.Controls.Inline;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Controls
|
||||
{
|
||||
public class MonthPickerForm : AutoCleanForm
|
||||
{
|
||||
|
||||
public MonthPicker Picker { get; set; }
|
||||
|
||||
int? selectedDateMessage { get; set; }
|
||||
|
||||
public MonthPickerForm()
|
||||
{
|
||||
this.DeleteMode = TelegramBotBase.Enums.eDeleteMode.OnLeavingForm;
|
||||
this.Init += MonthPickerForm_Init;
|
||||
}
|
||||
|
||||
private async Task MonthPickerForm_Init(object sender, InitEventArgs e)
|
||||
{
|
||||
this.Picker = new MonthPicker();
|
||||
this.Picker.Title = "Monat auswählen / Pick month";
|
||||
this.AddControl(Picker);
|
||||
}
|
||||
|
||||
|
||||
public override async Task Action(MessageResult message)
|
||||
{
|
||||
|
||||
switch(message.RawData)
|
||||
{
|
||||
case "back":
|
||||
|
||||
var s = new Menu();
|
||||
|
||||
await this.NavigateTo(s);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public override async Task Render(MessageResult message)
|
||||
{
|
||||
String s = "";
|
||||
|
||||
s += "Selected month is " + this.Picker.Culture.DateTimeFormat.MonthNames[this.Picker.SelectedDate.Month - 1] + "\r\n";
|
||||
s += "Selected year is " + this.Picker.VisibleMonth.Year.ToString();
|
||||
|
||||
ButtonForm bf = new ButtonForm();
|
||||
bf.AddButtonRow(new ButtonBase("Back","back"));
|
||||
|
||||
if (selectedDateMessage != null)
|
||||
{
|
||||
await this.Device.Edit(this.selectedDateMessage.Value, s, bf);
|
||||
}
|
||||
else
|
||||
{
|
||||
var m = await this.Device.Send(s, bf);
|
||||
this.selectedDateMessage = m.MessageId;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Args;
|
||||
using TelegramBotBase.Controls;
|
||||
using TelegramBotBase.Controls.Inline;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Controls
|
||||
{
|
||||
public class MultiToggleButtons : AutoCleanForm
|
||||
{
|
||||
public MultiToggleButtons()
|
||||
{
|
||||
this.DeleteMode = TelegramBotBase.Enums.eDeleteMode.OnLeavingForm;
|
||||
|
||||
this.Init += ToggleButtons_Init;
|
||||
}
|
||||
|
||||
private async Task ToggleButtons_Init(object sender, InitEventArgs e)
|
||||
{
|
||||
|
||||
var mtb = new MultiToggleButton();
|
||||
|
||||
mtb.Options = new List<ButtonBase>() { new ButtonBase("Option 1", "1"), new ButtonBase("Option 2", "2"), new ButtonBase("Option 3", "3") };
|
||||
mtb.SelectedOption = mtb.Options.FirstOrDefault();
|
||||
mtb.Toggled += Tb_Toggled;
|
||||
this.AddControl(mtb);
|
||||
|
||||
mtb = new MultiToggleButton();
|
||||
|
||||
mtb.Options = new List<ButtonBase>() { new ButtonBase("Option 4", "4"), new ButtonBase("Option 5", "5"), new ButtonBase("Option 6", "6") };
|
||||
mtb.SelectedOption = mtb.Options.FirstOrDefault();
|
||||
mtb.AllowEmptySelection = false;
|
||||
mtb.Toggled += Tb_Toggled;
|
||||
this.AddControl(mtb);
|
||||
}
|
||||
|
||||
private void Tb_Toggled(object sender, EventArgs e)
|
||||
{
|
||||
var tb = sender as MultiToggleButton;
|
||||
if (tb.SelectedOption != null)
|
||||
{
|
||||
Console.WriteLine(tb.ID.ToString() + " was pressed, and toggled to " + tb.SelectedOption.Value);
|
||||
return;
|
||||
}
|
||||
|
||||
Console.WriteLine("Selection for " + tb.ID.ToString() + " has been removed.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Controls.Hybrid;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Controls
|
||||
{
|
||||
public class MultiViewForm : AutoCleanForm
|
||||
{
|
||||
|
||||
Subclass.MultiViewTest mvt = null;
|
||||
|
||||
ButtonGrid bg = null;
|
||||
|
||||
public MultiViewForm()
|
||||
{
|
||||
this.DeleteMode = TelegramBotBase.Enums.eDeleteMode.OnLeavingForm;
|
||||
this.Init += MultiViewForm_Init;
|
||||
}
|
||||
|
||||
private async Task MultiViewForm_Init(object sender, TelegramBotBase.Args.InitEventArgs e)
|
||||
{
|
||||
mvt = new Subclass.MultiViewTest();
|
||||
|
||||
AddControl(mvt);
|
||||
|
||||
bg = new ButtonGrid();
|
||||
bg.ButtonsForm = new ButtonForm();
|
||||
bg.ButtonsForm.AddButtonRow("Back", "$back$");
|
||||
bg.ButtonClicked += Bg_ButtonClicked;
|
||||
bg.KeyboardType = TelegramBotBase.Enums.eKeyboardType.ReplyKeyboard;
|
||||
AddControl(bg);
|
||||
}
|
||||
|
||||
private async Task Bg_ButtonClicked(object sender, TelegramBotBase.Args.ButtonClickedEventArgs e)
|
||||
{
|
||||
switch(e.Button.Value)
|
||||
{
|
||||
case "$back$":
|
||||
|
||||
var mn = new Menu();
|
||||
await NavigateTo(mn);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Args;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Controls.Subclass
|
||||
{
|
||||
public class MultiViewTest : TelegramBotBase.Controls.Hybrid.MultiView
|
||||
{
|
||||
|
||||
|
||||
public override async Task Action(MessageResult result, string value = null)
|
||||
{
|
||||
|
||||
switch (result.RawData)
|
||||
{
|
||||
case "back":
|
||||
|
||||
this.SelectedViewIndex--;
|
||||
|
||||
break;
|
||||
case "next":
|
||||
|
||||
this.SelectedViewIndex++;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public override async Task RenderView(RenderViewEventArgs e)
|
||||
{
|
||||
|
||||
ButtonForm bf = new ButtonForm();
|
||||
bf.AddButtonRow(new ButtonBase("Back", "back"), new ButtonBase("Next", "next"));
|
||||
|
||||
switch (e.CurrentView)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
|
||||
await Device.Send($"Page {e.CurrentView + 1}", bf);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
await Device.Send("Unknown Page", bf);
|
||||
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Args;
|
||||
using TelegramBotBase.Controls;
|
||||
using TelegramBotBase.Controls.Inline;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Controls
|
||||
{
|
||||
public class ToggleButtons : AutoCleanForm
|
||||
{
|
||||
public ToggleButtons()
|
||||
{
|
||||
this.DeleteMode = TelegramBotBase.Enums.eDeleteMode.OnLeavingForm;
|
||||
|
||||
this.Init += ToggleButtons_Init;
|
||||
}
|
||||
|
||||
private async Task ToggleButtons_Init(object sender, InitEventArgs e)
|
||||
{
|
||||
|
||||
var tb = new ToggleButton();
|
||||
tb.Checked = true;
|
||||
tb.Toggled += Tb_Toggled;
|
||||
|
||||
this.AddControl(tb);
|
||||
|
||||
tb = new ToggleButton();
|
||||
tb.Checked = false;
|
||||
tb.Toggled += Tb_Toggled;
|
||||
|
||||
this.AddControl(tb);
|
||||
|
||||
tb = new ToggleButton();
|
||||
tb.Checked = true;
|
||||
tb.Toggled += Tb_Toggled;
|
||||
|
||||
this.AddControl(tb);
|
||||
|
||||
}
|
||||
|
||||
private void Tb_Toggled(object sender, EventArgs e)
|
||||
{
|
||||
var tb = sender as ToggleButton;
|
||||
Console.WriteLine(tb.ID.ToString() + " was pressed, and toggled to " + (tb.Checked ? "Checked" : "Unchecked"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Form;
|
||||
using TelegramBotBase.Controls;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Args;
|
||||
using TelegramBotBase.Controls.Inline;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Controls
|
||||
{
|
||||
public class TreeViewForms : AutoCleanForm
|
||||
{
|
||||
public TreeView view { get; set; }
|
||||
|
||||
private int? MessageId { get; set; }
|
||||
|
||||
public TreeViewForms()
|
||||
{
|
||||
this.DeleteMode = TelegramBotBase.Enums.eDeleteMode.OnLeavingForm;
|
||||
this.Init += TreeViewForms_Init;
|
||||
}
|
||||
|
||||
private async Task TreeViewForms_Init(object sender, InitEventArgs e)
|
||||
{
|
||||
view = new TreeView();
|
||||
|
||||
var tvn = new TreeViewNode("Cars", "cars");
|
||||
|
||||
tvn.AddNode(new TreeViewNode("Porsche", "porsche", new TreeViewNode("Website", "web", "https://www.porsche.com/germany/"), new TreeViewNode("911", "911"), new TreeViewNode("918 Spyder", "918")));
|
||||
tvn.AddNode(new TreeViewNode("BMW", "bmw"));
|
||||
tvn.AddNode(new TreeViewNode("Audi", "audi"));
|
||||
tvn.AddNode(new TreeViewNode("VW", "vw"));
|
||||
tvn.AddNode(new TreeViewNode("Lamborghini", "lamborghini"));
|
||||
|
||||
view.Nodes.Add(tvn);
|
||||
|
||||
tvn = new TreeViewNode("Fruits", "fruits");
|
||||
|
||||
tvn.AddNode(new TreeViewNode("Apple", "apple"));
|
||||
tvn.AddNode(new TreeViewNode("Orange", "orange"));
|
||||
tvn.AddNode(new TreeViewNode("Lemon", "lemon"));
|
||||
|
||||
view.Nodes.Add(tvn);
|
||||
|
||||
this.AddControl(view);
|
||||
|
||||
}
|
||||
|
||||
public override async Task Action(MessageResult message)
|
||||
{
|
||||
await message.ConfirmAction();
|
||||
|
||||
if (message.Handled)
|
||||
return;
|
||||
|
||||
switch (message.RawData)
|
||||
{
|
||||
case "back":
|
||||
|
||||
message.Handled = true;
|
||||
|
||||
var start = new Menu();
|
||||
|
||||
await this.NavigateTo(start);
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public override async Task Render(MessageResult message)
|
||||
{
|
||||
String s = "";
|
||||
|
||||
s += "Selected Node: " + (this.view.SelectedNode?.Text ?? "(null)") + "\r\n";
|
||||
|
||||
s += "Visible Node: " + (this.view.VisibleNode?.Text ?? "(top)") + "\r\n";
|
||||
|
||||
s += "Visible Path: " + this.view.GetPath() + "\r\n";
|
||||
s += "Selected Path: " + (this.view.SelectedNode?.GetPath() ?? "(null)") + "\r\n";
|
||||
|
||||
ButtonForm bf = new ButtonForm();
|
||||
bf.AddButtonRow(new ButtonBase("Back", "back"));
|
||||
|
||||
if (MessageId != null)
|
||||
{
|
||||
await this.Device.Edit(this.MessageId.Value, s, bf);
|
||||
}
|
||||
else
|
||||
{
|
||||
var m = await this.Device.Send(s, bf);
|
||||
this.MessageId = m.MessageId;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,143 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Telegram.Bot;
|
||||
using Telegram.Bot.Types;
|
||||
using Telegram.Bot.Types.InputFiles;
|
||||
using Telegram.Bot.Types.ReplyMarkups;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests
|
||||
{
|
||||
public class DataForm : AutoCleanForm
|
||||
{
|
||||
|
||||
|
||||
public override async Task SentData(DataResult data)
|
||||
{
|
||||
String tmp = "";
|
||||
InputOnlineFile file;
|
||||
|
||||
switch (data.Type)
|
||||
{
|
||||
case Telegram.Bot.Types.Enums.MessageType.Contact:
|
||||
|
||||
tmp += "Firstname: " + data.Contact.FirstName + "\r\n";
|
||||
tmp += "Lastname: " + data.Contact.LastName + "\r\n";
|
||||
tmp += "Phonenumber: " + data.Contact.PhoneNumber + "\r\n";
|
||||
tmp += "UserId: " + data.Contact.UserId + "\r\n";
|
||||
|
||||
await this.Device.Send("Your contact: \r\n" + tmp, replyTo: data.MessageId);
|
||||
|
||||
break;
|
||||
|
||||
case Telegram.Bot.Types.Enums.MessageType.Document:
|
||||
|
||||
file = new InputOnlineFile(data.Document.FileId);
|
||||
|
||||
await this.Device.SendDocument(file, "Your uploaded document");
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case Telegram.Bot.Types.Enums.MessageType.Video:
|
||||
|
||||
file = new InputOnlineFile(data.Document.FileId);
|
||||
|
||||
await this.Device.SendDocument(file, "Your uploaded video");
|
||||
|
||||
break;
|
||||
|
||||
case Telegram.Bot.Types.Enums.MessageType.Audio:
|
||||
|
||||
file = new InputOnlineFile(data.Document.FileId);
|
||||
|
||||
await this.Device.SendDocument(file, "Your uploaded audio");
|
||||
|
||||
break;
|
||||
|
||||
case Telegram.Bot.Types.Enums.MessageType.Location:
|
||||
|
||||
tmp += "Lat: " + data.Location.Latitude + "\r\n";
|
||||
tmp += "Lng: " + data.Location.Longitude + "\r\n";
|
||||
|
||||
await this.Device.Send("Your location: \r\n" + tmp, replyTo: data.MessageId);
|
||||
|
||||
break;
|
||||
|
||||
case Telegram.Bot.Types.Enums.MessageType.Photo:
|
||||
|
||||
InputOnlineFile photo = new InputOnlineFile(data.Photos.Last().FileId);
|
||||
|
||||
await this.Device.Send("Your image: ", replyTo: data.MessageId);
|
||||
await this.Client.TelegramClient.SendPhotoAsync(this.Device.DeviceId, photo);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
await this.Device.Send("Unknown response");
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public override async Task Action(MessageResult message)
|
||||
{
|
||||
await message.ConfirmAction();
|
||||
|
||||
if (message.Handled)
|
||||
return;
|
||||
|
||||
switch (message.RawData)
|
||||
{
|
||||
case "contact":
|
||||
|
||||
await this.Device.RequestContact();
|
||||
|
||||
break;
|
||||
|
||||
case "location":
|
||||
|
||||
await this.Device.RequestLocation();
|
||||
|
||||
break;
|
||||
|
||||
case "back":
|
||||
|
||||
message.Handled = true;
|
||||
|
||||
var start = new Menu();
|
||||
|
||||
await this.NavigateTo(start);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public override async Task Render(MessageResult message)
|
||||
{
|
||||
ButtonForm bf = new ButtonForm();
|
||||
|
||||
bf.AddButtonRow(new ButtonBase("Request User contact", "contact"));
|
||||
|
||||
bf.AddButtonRow(new ButtonBase("Request User location", "location"));
|
||||
|
||||
bf.AddButtonRow(new ButtonBase("Back", "back"));
|
||||
|
||||
InlineKeyboardMarkup ikv = bf;
|
||||
|
||||
await this.Device.Send("Please upload a contact, photo, video, audio, document or location.", bf);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,163 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using TelegramBotBase.Controls.Hybrid;
|
||||
using TelegramBotBase.Datasources;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Datasources
|
||||
{
|
||||
public class CustomDataSource : ButtonFormDataSource
|
||||
{
|
||||
|
||||
public List<String> Countries = new List<string>() { "Country 1", "Country 2", "Country 3" };
|
||||
|
||||
public CustomDataSource()
|
||||
{
|
||||
loadData();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This method has the example purpose of creating and loading some example data.
|
||||
/// When using a database you do not need this kind of method.
|
||||
/// </summary>
|
||||
private void loadData()
|
||||
{
|
||||
//Exists data source? Read it
|
||||
if (File.Exists(AppContext.BaseDirectory + "countries.json"))
|
||||
{
|
||||
try
|
||||
{
|
||||
var List = Newtonsoft.Json.JsonConvert.DeserializeObject<List<String>>(File.ReadAllText("countries.json"));
|
||||
|
||||
|
||||
Countries = List;
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//If not, create it
|
||||
try
|
||||
{
|
||||
var countries = CultureInfo.GetCultures(CultureTypes.SpecificCultures).Select(a => a.DisplayName).ToList();
|
||||
|
||||
Countries = countries;
|
||||
|
||||
var tmp = Newtonsoft.Json.JsonConvert.SerializeObject(countries);
|
||||
|
||||
File.WriteAllText( AppContext.BaseDirectory + "countries.json", tmp);
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public override ButtonRow ItemAt(int index)
|
||||
{
|
||||
var item = Countries.ElementAt(index);
|
||||
if (item == null)
|
||||
return new ButtonRow();
|
||||
|
||||
return Render(item);
|
||||
}
|
||||
|
||||
public override List<ButtonRow> ItemRange(int start, int count)
|
||||
{
|
||||
var items = Countries.Skip(start).Take(count);
|
||||
|
||||
List<ButtonRow> lst = new List<ButtonRow>();
|
||||
foreach (var c in items)
|
||||
{
|
||||
lst.Add(Render(c));
|
||||
}
|
||||
|
||||
return lst;
|
||||
}
|
||||
|
||||
public override List<ButtonRow> AllItems()
|
||||
{
|
||||
List<ButtonRow> lst = new List<ButtonRow>();
|
||||
foreach (var c in Countries)
|
||||
{
|
||||
lst.Add(Render(c));
|
||||
}
|
||||
return lst;
|
||||
}
|
||||
|
||||
public override ButtonForm PickItems(int start, int count, string filter = null)
|
||||
{
|
||||
List<ButtonRow> rows = ItemRange(start, count);
|
||||
|
||||
ButtonForm lst = new ButtonForm();
|
||||
foreach (var c in rows)
|
||||
{
|
||||
lst.AddButtonRow(c);
|
||||
}
|
||||
return lst;
|
||||
}
|
||||
|
||||
public override ButtonForm PickAllItems(string filter = null)
|
||||
{
|
||||
List<ButtonRow> rows = AllItems();
|
||||
|
||||
ButtonForm bf = new ButtonForm();
|
||||
|
||||
bf.AddButtonRows(rows);
|
||||
|
||||
return bf;
|
||||
}
|
||||
|
||||
public override int CalculateMax(string filter = null)
|
||||
{
|
||||
if (filter == null)
|
||||
return Countries.Count;
|
||||
|
||||
return Countries.Where(a => a.IndexOf(filter, StringComparison.InvariantCultureIgnoreCase) != -1).Count();
|
||||
}
|
||||
|
||||
public override ButtonRow Render(object data)
|
||||
{
|
||||
var s = data as String;
|
||||
if (s == null)
|
||||
return new ButtonRow(new ButtonBase("Empty", "zero"));
|
||||
|
||||
return new ButtonRow(new ButtonBase(s, s));
|
||||
}
|
||||
|
||||
public override int Count
|
||||
{
|
||||
get
|
||||
{
|
||||
return Countries.Count;
|
||||
}
|
||||
}
|
||||
|
||||
public override int ColumnCount
|
||||
{
|
||||
get
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
public override int RowCount
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.Count;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Controls.Hybrid;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Datasources
|
||||
{
|
||||
public class List : FormBase
|
||||
{
|
||||
ButtonGrid __buttons = null;
|
||||
|
||||
public List()
|
||||
{
|
||||
this.Init += List_Init;
|
||||
}
|
||||
|
||||
private async Task List_Init(object sender, TelegramBotBase.Args.InitEventArgs e)
|
||||
{
|
||||
|
||||
__buttons = new ButtonGrid();
|
||||
|
||||
__buttons.EnablePaging = true;
|
||||
__buttons.EnableSearch = false;
|
||||
__buttons.ButtonClicked += __buttons_ButtonClicked;
|
||||
__buttons.KeyboardType = TelegramBotBase.Enums.eKeyboardType.ReplyKeyboard;
|
||||
__buttons.DeleteReplyMessage = true;
|
||||
|
||||
__buttons.HeadLayoutButtonRow = new ButtonRow(new ButtonBase("Back", "back"));
|
||||
|
||||
var cds = new CustomDataSource();
|
||||
__buttons.DataSource = cds;
|
||||
|
||||
AddControl(__buttons);
|
||||
}
|
||||
|
||||
private async Task __buttons_ButtonClicked(object sender, TelegramBotBase.Args.ButtonClickedEventArgs e)
|
||||
{
|
||||
switch(e.Button.Value)
|
||||
{
|
||||
case "back":
|
||||
|
||||
var mn = new Menu();
|
||||
await NavigateTo(mn);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Args;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Groups
|
||||
{
|
||||
public class GroupChange : TelegramBotBase.Form.GroupForm
|
||||
{
|
||||
public GroupChange()
|
||||
{
|
||||
this.Opened += GroupChange_Opened;
|
||||
}
|
||||
|
||||
|
||||
private async Task GroupChange_Opened(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
ButtonForm bf = new ButtonForm();
|
||||
|
||||
bf.AddButtonRow(new ButtonBase("Open GroupChange Test", "groupchange"));
|
||||
bf.AddButtonRow(new ButtonBase("Open WelcomeUser Test", "welcomeuser"));
|
||||
bf.AddButtonRow(new ButtonBase("Open LinkReplace Test", "linkreplace"));
|
||||
|
||||
await this.Device.Send("GroupChange started, click to switch", bf);
|
||||
|
||||
}
|
||||
|
||||
public override async Task Action(MessageResult message)
|
||||
{
|
||||
if (message.Handled)
|
||||
return;
|
||||
|
||||
|
||||
var bn = message.RawData;
|
||||
|
||||
await message.ConfirmAction();
|
||||
message.Handled = true;
|
||||
|
||||
switch (bn)
|
||||
{
|
||||
case "groupchange":
|
||||
|
||||
var gc = new GroupChange();
|
||||
|
||||
await this.NavigateTo(gc);
|
||||
|
||||
break;
|
||||
case "welcomeuser":
|
||||
|
||||
var wu = new WelcomeUser();
|
||||
|
||||
await this.NavigateTo(wu);
|
||||
|
||||
break;
|
||||
case "linkreplace":
|
||||
|
||||
var lr = new LinkReplaceTest();
|
||||
|
||||
await this.NavigateTo(lr);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public override async Task OnGroupChanged(GroupChangedEventArgs e)
|
||||
{
|
||||
await this.Device.Send("Group has been changed by " + e.OriginalMessage.Message.From.FirstName + " " + e.OriginalMessage.Message.From.LastName);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,164 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using Telegram.Bot.Types;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Groups
|
||||
{
|
||||
public class LinkReplaceTest : TelegramBotBase.Form.GroupForm
|
||||
{
|
||||
|
||||
Dictionary<long, int> Counter { get; set; } = new Dictionary<long, int>();
|
||||
|
||||
private const int Maximum = 3;
|
||||
|
||||
|
||||
public LinkReplaceTest()
|
||||
{
|
||||
this.Opened += LinkReplaceTest_Opened;
|
||||
}
|
||||
|
||||
private async Task LinkReplaceTest_Opened(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
ButtonForm bf = new ButtonForm();
|
||||
|
||||
bf.AddButtonRow(new ButtonBase("Open GroupChange Test", "groupchange"));
|
||||
bf.AddButtonRow(new ButtonBase("Open WelcomeUser Test", "welcomeuser"));
|
||||
bf.AddButtonRow(new ButtonBase("Open LinkReplace Test", "linkreplace"));
|
||||
|
||||
await this.Device.Send("LinkReplaceTest started, click to switch", bf);
|
||||
|
||||
}
|
||||
|
||||
public override async Task Action(MessageResult message)
|
||||
{
|
||||
if (message.Handled)
|
||||
return;
|
||||
|
||||
var bn = message.RawData;
|
||||
|
||||
await message.ConfirmAction();
|
||||
message.Handled = true;
|
||||
|
||||
switch (bn)
|
||||
{
|
||||
case "groupchange":
|
||||
|
||||
var gc = new GroupChange();
|
||||
|
||||
await this.NavigateTo(gc);
|
||||
|
||||
break;
|
||||
case "welcomeuser":
|
||||
|
||||
var wu = new WelcomeUser();
|
||||
|
||||
await this.NavigateTo(wu);
|
||||
|
||||
break;
|
||||
case "linkreplace":
|
||||
|
||||
var lr = new LinkReplaceTest();
|
||||
|
||||
await this.NavigateTo(lr);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public override async Task OnMessage(MessageResult e)
|
||||
{
|
||||
var from = e.Message.From.Id;
|
||||
|
||||
if (e.Message.From.IsBot)
|
||||
return;
|
||||
|
||||
//Are urls inside his message ?
|
||||
if (!HasLinks(e.MessageText))
|
||||
return;
|
||||
|
||||
var u = await Device.GetChatUser(from);
|
||||
|
||||
//Don't kick Admins or Creators
|
||||
if (u.Status == Telegram.Bot.Types.Enums.ChatMemberStatus.Administrator | u.Status == Telegram.Bot.Types.Enums.ChatMemberStatus.Creator)
|
||||
{
|
||||
await this.Device.Send("You won't get kicked,...not this time.");
|
||||
return;
|
||||
}
|
||||
|
||||
await e.Device.DeleteMessage(e.MessageId);
|
||||
|
||||
var cp = new ChatPermissions();
|
||||
cp.CanAddWebPagePreviews = false;
|
||||
cp.CanChangeInfo = false;
|
||||
cp.CanInviteUsers = false;
|
||||
cp.CanPinMessages = false;
|
||||
cp.CanSendMediaMessages = false;
|
||||
cp.CanSendMessages = false;
|
||||
cp.CanSendOtherMessages = false;
|
||||
cp.CanSendPolls = false;
|
||||
|
||||
//Collect user "mistakes" with sending url, after 3 he gets kicked out.
|
||||
if (Counter.ContainsKey(from))
|
||||
{
|
||||
Counter[from]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
Counter[from] = 1;
|
||||
}
|
||||
|
||||
|
||||
if (Counter[from] >= 3)
|
||||
{
|
||||
await e.Device.KickUser(from);
|
||||
|
||||
await e.Device.Send(e.Message.From.FirstName + " " + e.Message.From.LastName + " has been removed from the group");
|
||||
}
|
||||
else
|
||||
{
|
||||
await e.Device.RestrictUser(from, cp, DateTime.UtcNow.AddSeconds(30));
|
||||
|
||||
await e.Device.Send(e.Message.From.FirstName + " " + e.Message.From.LastName + " has been blocked for 30 seconds");
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Call onmessage also on edited message, if someone want to spoof a failed message and insert a link.
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
/// <returns></returns>
|
||||
public override async Task OnMessageEdit(MessageResult message)
|
||||
{
|
||||
await OnMessage(message);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// https://stackoverflow.com/a/20651284
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
/// <returns></returns>
|
||||
private bool HasLinks(String str)
|
||||
{
|
||||
var tmp = str;
|
||||
|
||||
var pattern = @"^(http|https|ftp|)\://|[a-zA-Z0-9\-\.]+\.[a-zA-Z](:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*[^\.\,\)\(\s]$";
|
||||
Regex r = new Regex(pattern);
|
||||
|
||||
var matches = r.Matches(tmp);
|
||||
|
||||
return (matches.Count > 0);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
using TelegramBotBase.Args;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Groups
|
||||
{
|
||||
public class WelcomeUser : TelegramBotBase.Form.GroupForm
|
||||
{
|
||||
|
||||
public WelcomeUser()
|
||||
{
|
||||
this.Opened += WelcomeUser_Opened;
|
||||
}
|
||||
|
||||
|
||||
private async Task WelcomeUser_Opened(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
ButtonForm bf = new ButtonForm();
|
||||
|
||||
bf.AddButtonRow(new ButtonBase("Open GroupChange Test", "groupchange"));
|
||||
bf.AddButtonRow(new ButtonBase("Open WelcomeUser Test", "welcomeuser"));
|
||||
bf.AddButtonRow(new ButtonBase("Open LinkReplace Test", "linkreplace"));
|
||||
|
||||
await this.Device.Send("WelcomeUser started, click to switch", bf);
|
||||
|
||||
}
|
||||
|
||||
public override async Task Action(MessageResult message)
|
||||
{
|
||||
if (message.Handled)
|
||||
return;
|
||||
|
||||
var bn = message.RawData;
|
||||
|
||||
await message.ConfirmAction();
|
||||
message.Handled = true;
|
||||
|
||||
switch (bn)
|
||||
{
|
||||
case "groupchange":
|
||||
|
||||
var gc = new GroupChange();
|
||||
|
||||
await this.NavigateTo(gc);
|
||||
|
||||
break;
|
||||
case "welcomeuser":
|
||||
|
||||
var wu = new WelcomeUser();
|
||||
|
||||
await this.NavigateTo(wu);
|
||||
|
||||
break;
|
||||
case "linkreplace":
|
||||
|
||||
var lr = new LinkReplaceTest();
|
||||
|
||||
await this.NavigateTo(lr);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public override async Task OnMemberChanges(MemberChangeEventArgs e)
|
||||
{
|
||||
|
||||
if (e.Type == Telegram.Bot.Types.Enums.MessageType.ChatMembersAdded)
|
||||
{
|
||||
|
||||
await this.Device.Send("Welcome you new members!\r\n\r\n" + e.Members.Select(a => a.FirstName + " " + a.LastName).Aggregate((a, b) => a + "\r\n" + b));
|
||||
|
||||
}
|
||||
else if (e.Type == Telegram.Bot.Types.Enums.MessageType.ChatMemberLeft)
|
||||
{
|
||||
await this.Device.Send(e.Members.Select(a => a.FirstName + " " + a.LastName).Aggregate((a, b) => a + " and " + b) + " has left the group");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,264 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
using TelegramBotBaseTest.Tests.Controls;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests
|
||||
{
|
||||
public class Menu : AutoCleanForm
|
||||
{
|
||||
public Menu()
|
||||
{
|
||||
this.DeleteMode = TelegramBotBase.Enums.eDeleteMode.OnLeavingForm;
|
||||
}
|
||||
|
||||
public override async Task Load(MessageResult message)
|
||||
{
|
||||
|
||||
|
||||
if (message.Message.Chat.Type == Telegram.Bot.Types.Enums.ChatType.Group | message.Message.Chat.Type == Telegram.Bot.Types.Enums.ChatType.Supergroup)
|
||||
{
|
||||
var sf = new TelegramBotBaseTest.Tests.Groups.WelcomeUser();
|
||||
|
||||
await this.NavigateTo(sf);
|
||||
}
|
||||
|
||||
|
||||
await Device.HideReplyKeyboard();
|
||||
}
|
||||
|
||||
public override async Task Action(MessageResult message)
|
||||
{
|
||||
var call = message.GetData<CallbackData>();
|
||||
|
||||
await message.ConfirmAction();
|
||||
|
||||
|
||||
if (call == null)
|
||||
return;
|
||||
|
||||
message.Handled = true;
|
||||
|
||||
switch (call.Value)
|
||||
{
|
||||
case "text":
|
||||
|
||||
var sf = new SimpleForm();
|
||||
|
||||
await this.NavigateTo(sf);
|
||||
|
||||
break;
|
||||
|
||||
case "buttons":
|
||||
|
||||
var bf = new ButtonTestForm();
|
||||
|
||||
await this.NavigateTo(bf);
|
||||
|
||||
break;
|
||||
|
||||
case "progress":
|
||||
|
||||
var pf = new ProgressTest();
|
||||
|
||||
await this.NavigateTo(pf);
|
||||
|
||||
break;
|
||||
|
||||
case "registration":
|
||||
|
||||
var reg = new Register.Start();
|
||||
|
||||
await this.NavigateTo(reg);
|
||||
|
||||
break;
|
||||
|
||||
case "form1":
|
||||
|
||||
var form1 = new TestForm();
|
||||
|
||||
await this.NavigateTo(form1);
|
||||
|
||||
break;
|
||||
|
||||
case "form2":
|
||||
|
||||
var form2 = new TestForm2();
|
||||
|
||||
await this.NavigateTo(form2);
|
||||
|
||||
break;
|
||||
|
||||
case "data":
|
||||
|
||||
var data = new DataForm();
|
||||
|
||||
await this.NavigateTo(data);
|
||||
|
||||
break;
|
||||
|
||||
case "calendar":
|
||||
|
||||
var calendar = new Controls.CalendarPickerForm();
|
||||
|
||||
await this.NavigateTo(calendar);
|
||||
|
||||
break;
|
||||
|
||||
case "month":
|
||||
|
||||
var month = new Controls.MonthPickerForm();
|
||||
|
||||
await this.NavigateTo(month);
|
||||
|
||||
break;
|
||||
|
||||
case "treeview":
|
||||
|
||||
var tree = new Controls.TreeViewForms();
|
||||
|
||||
await this.NavigateTo(tree);
|
||||
|
||||
break;
|
||||
|
||||
case "togglebuttons":
|
||||
|
||||
var tb = new Controls.ToggleButtons();
|
||||
|
||||
await this.NavigateTo(tb);
|
||||
|
||||
break;
|
||||
|
||||
case "multitogglebuttons":
|
||||
|
||||
var mtb = new Controls.MultiToggleButtons();
|
||||
|
||||
await this.NavigateTo(mtb);
|
||||
|
||||
break;
|
||||
|
||||
case "buttongrid":
|
||||
|
||||
var bg = new Controls.ButtonGridForm();
|
||||
|
||||
await this.NavigateTo(bg);
|
||||
|
||||
break;
|
||||
|
||||
case "buttongridfilter":
|
||||
|
||||
var bg2 = new Controls.ButtonGridPagingForm();
|
||||
|
||||
await this.NavigateTo(bg2);
|
||||
|
||||
break;
|
||||
|
||||
case "buttongridtags":
|
||||
|
||||
var bg3 = new Controls.ButtonGridTagForm();
|
||||
|
||||
await this.NavigateTo(bg3);
|
||||
|
||||
break;
|
||||
|
||||
case "multiview":
|
||||
|
||||
var mvf = new MultiViewForm();
|
||||
|
||||
await NavigateTo(mvf);
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case "checkedbuttonlist":
|
||||
|
||||
var cbl = new CheckedButtonListForm();
|
||||
|
||||
await NavigateTo(cbl);
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case "navigationcontroller":
|
||||
|
||||
var nc = new Navigation.Start();
|
||||
|
||||
await NavigateTo(nc);
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case "dynamicbuttongrid":
|
||||
|
||||
var dg = new Datasources.List();
|
||||
|
||||
await NavigateTo(dg);
|
||||
|
||||
break;
|
||||
|
||||
case "notifications":
|
||||
|
||||
var not = new Notifications.Start();
|
||||
await NavigateTo(not);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
message.Handled = false;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public override async Task Render(MessageResult message)
|
||||
{
|
||||
|
||||
ButtonForm btn = new ButtonForm();
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("#1 Simple Text", new CallbackData("a", "text").Serialize()), new ButtonBase("#2 Button Test", new CallbackData("a", "buttons").Serialize()));
|
||||
btn.AddButtonRow(new ButtonBase("#3 Progress Bar", new CallbackData("a", "progress").Serialize()));
|
||||
btn.AddButtonRow(new ButtonBase("#4 Registration Example", new CallbackData("a", "registration").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("#5 Form1 Command", new CallbackData("a", "form1").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("#6 Form2 Command", new CallbackData("a", "form2").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("#7 Data Handling", new CallbackData("a", "data").Serialize()));
|
||||
btn.AddButtonRow(new ButtonBase("#8 Calendar Picker", new CallbackData("a", "calendar").Serialize()));
|
||||
btn.AddButtonRow(new ButtonBase("#9 Month Picker", new CallbackData("a", "month").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("#10 TreeView", new CallbackData("a", "treeview").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("#11 ToggleButtons", new CallbackData("a", "togglebuttons").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("#11.2 MultiToggleButtons", new CallbackData("a", "multitogglebuttons").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("#12 ButtonGrid", new CallbackData("a", "buttongrid").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("#13 ButtonGrid Paging & Filter", new CallbackData("a", "buttongridfilter").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("#14 ButtonGrid Tags (Filter)", new CallbackData("a", "buttongridtags").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("#15 MultiView", new CallbackData("a", "multiview").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("#16 CheckedButtonList", new CallbackData("a", "checkedbuttonlist").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("#17 NavigationController (Push/Pop)", new CallbackData("a", "navigationcontroller").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("#18 Dynamic ButtonGrid (DataSources)", new CallbackData("a", "dynamicbuttongrid").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("#19 Notifications", new CallbackData("a", "notifications").Serialize()));
|
||||
|
||||
await this.Device.Send("Choose your test:", btn);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Form;
|
||||
using TelegramBotBase.Form.Navigation;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Navigation
|
||||
{
|
||||
class CustomController : NavigationController
|
||||
{
|
||||
public CustomController(FormBase form) : base(form)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override Task PushAsync(FormBase form, params object[] args)
|
||||
{
|
||||
Console.WriteLine($"Pushes form (Count on stack {this.Index + 1})");
|
||||
//Device.Send($"Pushes form (Count on stack {this.Index + 1})");
|
||||
|
||||
return base.PushAsync(form, args);
|
||||
}
|
||||
|
||||
|
||||
public override Task PopAsync()
|
||||
{
|
||||
Console.WriteLine($"Pops one form (Count on stack {this.Index + 1})");
|
||||
//Device.Send($"Pops one form (Count on stack {this.Index + 1})");
|
||||
|
||||
return base.PopAsync();
|
||||
}
|
||||
|
||||
public override Task PopToRootAsync()
|
||||
{
|
||||
Console.WriteLine($"Moved back to root (Count on stack {this.Index + 1})");
|
||||
//Device.Send($"Moved back to root (Count on stack {this.Index + 1})");
|
||||
|
||||
return base.PopToRootAsync();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Telegram.Bot.Types;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Navigation
|
||||
{
|
||||
public class Form1 : FormBase
|
||||
{
|
||||
Message msg = null;
|
||||
|
||||
public Form1()
|
||||
{
|
||||
this.Closed += Form1_Closed;
|
||||
}
|
||||
|
||||
private async Task Form1_Closed(object sender, EventArgs e)
|
||||
{
|
||||
if (msg == null)
|
||||
return;
|
||||
|
||||
await Device.DeleteMessage(msg);
|
||||
}
|
||||
|
||||
public override async Task Action(MessageResult message)
|
||||
{
|
||||
if (message.Handled)
|
||||
return;
|
||||
|
||||
await message.ConfirmAction();
|
||||
|
||||
switch (message.RawData)
|
||||
{
|
||||
case "next":
|
||||
|
||||
message.Handled = true;
|
||||
|
||||
var f1 = new Form1();
|
||||
|
||||
await NavigationController.PushAsync(f1);
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case "previous":
|
||||
|
||||
message.Handled = true;
|
||||
|
||||
//Pop's the current form and move the previous one. The root form will be the Start class.
|
||||
await NavigationController.PopAsync();
|
||||
|
||||
break;
|
||||
|
||||
case "root":
|
||||
|
||||
message.Handled = true;
|
||||
|
||||
await NavigationController.PopToRootAsync();
|
||||
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public override async Task Render(MessageResult message)
|
||||
{
|
||||
if (msg != null)
|
||||
return;
|
||||
|
||||
var bf = new ButtonForm();
|
||||
bf.AddButtonRow("Next page", "next");
|
||||
bf.AddButtonRow("Previous page", "previous");
|
||||
bf.AddButtonRow("Back to root", "root");
|
||||
|
||||
msg = await Device.Send($"Choose your options (Count on stack {NavigationController.Index + 1})", bf);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Telegram.Bot.Types;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
using TelegramBotBase.Form.Navigation;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Navigation
|
||||
{
|
||||
public class Start : FormBase
|
||||
{
|
||||
|
||||
Message msg = null;
|
||||
|
||||
public Start()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override async Task Load(MessageResult message)
|
||||
{
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public override async Task Action(MessageResult message)
|
||||
{
|
||||
if (message.Handled)
|
||||
return;
|
||||
|
||||
await message.ConfirmAction();
|
||||
|
||||
switch (message.RawData)
|
||||
{
|
||||
case "yes":
|
||||
|
||||
message.Handled = true;
|
||||
|
||||
//Create navigation controller and navigate to it, keep the current form as root form so we can get back to here later
|
||||
var nc = new CustomController(this);
|
||||
nc.ForceCleanupOnLastPop = true;
|
||||
|
||||
var f1 = new Form1();
|
||||
|
||||
await nc.PushAsync(f1);
|
||||
|
||||
await NavigateTo(nc);
|
||||
|
||||
if (msg == null)
|
||||
return;
|
||||
|
||||
await Device.DeleteMessage(msg);
|
||||
|
||||
|
||||
break;
|
||||
case "no":
|
||||
|
||||
message.Handled = true;
|
||||
|
||||
var mn = new Menu();
|
||||
|
||||
await NavigateTo(mn);
|
||||
|
||||
if (msg == null)
|
||||
return;
|
||||
|
||||
await Device.DeleteMessage(msg);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public override async Task Render(MessageResult message)
|
||||
{
|
||||
var bf = new ButtonForm();
|
||||
|
||||
bf.AddButtonRow("Yes", "yes");
|
||||
bf.AddButtonRow("No", "no");
|
||||
|
||||
msg = await Device.Send("Open controller?", bf);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Notifications
|
||||
{
|
||||
public class Start : AutoCleanForm
|
||||
{
|
||||
bool sent = false;
|
||||
|
||||
public Start()
|
||||
{
|
||||
this.DeleteMode = TelegramBotBase.Enums.eDeleteMode.OnLeavingForm;
|
||||
}
|
||||
|
||||
public override async Task Action(MessageResult message)
|
||||
{
|
||||
if (message.Handled)
|
||||
return;
|
||||
|
||||
switch (message.RawData)
|
||||
{
|
||||
case "alert":
|
||||
|
||||
await message.ConfirmAction("This is an alert.", true);
|
||||
|
||||
break;
|
||||
case "back":
|
||||
|
||||
var mn = new Menu();
|
||||
await NavigateTo(mn);
|
||||
|
||||
break;
|
||||
default:
|
||||
|
||||
await message.ConfirmAction("This is feedback");
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public override async Task Render(MessageResult message)
|
||||
{
|
||||
if (sent)
|
||||
return;
|
||||
|
||||
var bf = new ButtonForm();
|
||||
bf.AddButtonRow("Normal feeback", "normal");
|
||||
bf.AddButtonRow("Alert Box", "alert");
|
||||
bf.AddButtonRow("Back", "back");
|
||||
|
||||
await Device.Send("Choose your test", bf);
|
||||
|
||||
sent = true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Controls.Inline;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests
|
||||
{
|
||||
public class ProgressTest : AutoCleanForm
|
||||
{
|
||||
|
||||
public ProgressTest()
|
||||
{
|
||||
this.DeleteMode = TelegramBotBase.Enums.eDeleteMode.OnLeavingForm;
|
||||
this.Opened += ProgressTest_Opened;
|
||||
this.Closed += ProgressTest_Closed;
|
||||
}
|
||||
|
||||
|
||||
private async Task ProgressTest_Opened(object sender, EventArgs e)
|
||||
{
|
||||
await this.Device.Send("Welcome to ProgressTest");
|
||||
}
|
||||
|
||||
public override async Task Action(MessageResult message)
|
||||
{
|
||||
var call = message.GetData<CallbackData>();
|
||||
|
||||
await message.ConfirmAction();
|
||||
|
||||
|
||||
if (call == null)
|
||||
return;
|
||||
|
||||
ProgressBar Bar = null;
|
||||
|
||||
switch (call.Value)
|
||||
{
|
||||
case "standard":
|
||||
|
||||
Bar = new ProgressBar(0, 100, ProgressBar.eProgressStyle.standard);
|
||||
Bar.Device = this.Device;
|
||||
|
||||
break;
|
||||
|
||||
case "squares":
|
||||
|
||||
Bar = new ProgressBar(0, 100, ProgressBar.eProgressStyle.squares);
|
||||
Bar.Device = this.Device;
|
||||
|
||||
break;
|
||||
|
||||
case "circles":
|
||||
|
||||
Bar = new ProgressBar(0, 100, ProgressBar.eProgressStyle.circles);
|
||||
Bar.Device = this.Device;
|
||||
|
||||
break;
|
||||
|
||||
case "lines":
|
||||
|
||||
Bar = new ProgressBar(0, 100, ProgressBar.eProgressStyle.lines);
|
||||
Bar.Device = this.Device;
|
||||
|
||||
break;
|
||||
|
||||
case "squaredlines":
|
||||
|
||||
Bar = new ProgressBar(0, 100, ProgressBar.eProgressStyle.squaredLines);
|
||||
Bar.Device = this.Device;
|
||||
|
||||
break;
|
||||
|
||||
case "start":
|
||||
|
||||
var sf = new Menu();
|
||||
|
||||
await this.NavigateTo(sf);
|
||||
|
||||
return;
|
||||
|
||||
default:
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
//Render Progress bar and show some "example" progress
|
||||
await Bar.Render(message);
|
||||
|
||||
this.Controls.Add(Bar);
|
||||
|
||||
for (int i = 0; i <= 100; i++)
|
||||
{
|
||||
Bar.Value++;
|
||||
await Bar.Render(message);
|
||||
|
||||
Thread.Sleep(250);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override async Task Render(MessageResult message)
|
||||
{
|
||||
ButtonForm btn = new ButtonForm();
|
||||
btn.AddButtonRow(new ButtonBase("Standard", new CallbackData("a", "standard").Serialize()), new ButtonBase("Squares", new CallbackData("a", "squares").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("Circles", new CallbackData("a", "circles").Serialize()), new ButtonBase("Lines", new CallbackData("a", "lines").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("Squared Line", new CallbackData("a", "squaredlines").Serialize()));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("Back to start", new CallbackData("a", "start").Serialize()));
|
||||
|
||||
await this.Device.Send("Choose your progress bar:", btn);
|
||||
}
|
||||
|
||||
private async Task ProgressTest_Closed(object sender, EventArgs e)
|
||||
{
|
||||
await this.Device.Send("Ciao from ProgressTest");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Register
|
||||
{
|
||||
public class PerForm : AutoCleanForm
|
||||
{
|
||||
public String EMail { get; set; }
|
||||
|
||||
public String Firstname { get; set; }
|
||||
|
||||
public String Lastname { get; set; }
|
||||
|
||||
public async override Task Load(MessageResult message)
|
||||
{
|
||||
if (message.MessageText.Trim() == "")
|
||||
return;
|
||||
|
||||
if (this.Firstname == null)
|
||||
{
|
||||
this.Firstname = message.MessageText;
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.Lastname == null)
|
||||
{
|
||||
this.Lastname = message.MessageText;
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.EMail == null)
|
||||
{
|
||||
this.EMail = message.MessageText;
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public async override Task Action(MessageResult message)
|
||||
{
|
||||
var call = message.GetData<CallbackData>();
|
||||
|
||||
await message.ConfirmAction();
|
||||
|
||||
if (call == null)
|
||||
return;
|
||||
|
||||
switch (call.Value)
|
||||
{
|
||||
case "back":
|
||||
|
||||
var start = new Start();
|
||||
|
||||
await this.NavigateTo(start);
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public async override Task Render(MessageResult message)
|
||||
{
|
||||
if (this.Firstname == null)
|
||||
{
|
||||
await this.Device.Send("Please sent your firstname:");
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.Lastname == null)
|
||||
{
|
||||
await this.Device.Send("Please sent your lastname:");
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.EMail == null)
|
||||
{
|
||||
await this.Device.Send("Please sent your email address:");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
String s = "";
|
||||
|
||||
s += "Firstname: " + this.Firstname + "\r\n";
|
||||
s += "Lastname: " + this.Lastname + "\r\n";
|
||||
s += "E-Mail: " + this.EMail + "\r\n";
|
||||
|
||||
ButtonForm bf = new ButtonForm();
|
||||
bf.AddButtonRow(new ButtonBase("Back", new CallbackData("a", "back").Serialize()));
|
||||
|
||||
await this.Device.Send("Your details:\r\n" + s, bf);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Register
|
||||
{
|
||||
public class PerStep: AutoCleanForm
|
||||
{
|
||||
|
||||
public async override Task Action(MessageResult message)
|
||||
{
|
||||
await message.ConfirmAction();
|
||||
|
||||
switch (message.RawData)
|
||||
{
|
||||
case "start":
|
||||
|
||||
var step1 = new Steps.Step1();
|
||||
|
||||
await this.NavigateTo(step1);
|
||||
|
||||
break;
|
||||
case "back":
|
||||
|
||||
var start = new Start();
|
||||
|
||||
await this.NavigateTo(start);
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public async override Task Render(MessageResult message)
|
||||
{
|
||||
ButtonForm bf = new ButtonForm();
|
||||
bf.AddButtonRow(new ButtonBase("Goto Step 1", "start"));
|
||||
bf.AddButtonRow(new ButtonBase("Back", "back"));
|
||||
|
||||
await this.Device.Send("Register Steps", bf);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Register
|
||||
{
|
||||
public class Start : AutoCleanForm
|
||||
{
|
||||
public Start()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public async override Task Action(MessageResult message)
|
||||
{
|
||||
var call = message.GetData<CallbackData>();
|
||||
|
||||
await message.ConfirmAction();
|
||||
|
||||
|
||||
if (call == null)
|
||||
return;
|
||||
|
||||
switch (call.Value)
|
||||
{
|
||||
case "form":
|
||||
|
||||
var form = new PerForm();
|
||||
|
||||
await this.NavigateTo(form);
|
||||
|
||||
break;
|
||||
case "step":
|
||||
|
||||
var step = new PerStep();
|
||||
|
||||
await this.NavigateTo(step);
|
||||
|
||||
break;
|
||||
case "backtodashboard":
|
||||
|
||||
var start = new Tests.Menu();
|
||||
|
||||
await this.NavigateTo(start);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public async override Task Render(MessageResult message)
|
||||
{
|
||||
|
||||
ButtonForm btn = new ButtonForm();
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("#4.1 Per Form", new CallbackData("a", "form").Serialize()));
|
||||
btn.AddButtonRow(new ButtonBase("#4.2 Per Step", new CallbackData("a", "step").Serialize()));
|
||||
btn.AddButtonRow(new ButtonBase("Back", new CallbackData("a", "backtodashboard").Serialize()));
|
||||
|
||||
await this.Device.Send("Choose your test:", btn);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Register.Steps
|
||||
{
|
||||
public class Data
|
||||
{
|
||||
public String EMail { get; set; }
|
||||
|
||||
public String Firstname { get; set; }
|
||||
|
||||
public String Lastname { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Args;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Register.Steps
|
||||
{
|
||||
public class Step1 : AutoCleanForm
|
||||
{
|
||||
public Data UserData { get; set; }
|
||||
|
||||
public Step1()
|
||||
{
|
||||
this.Init += Step1_Init;
|
||||
}
|
||||
|
||||
private async Task Step1_Init(object sender, InitEventArgs e)
|
||||
{
|
||||
this.UserData = new Data();
|
||||
}
|
||||
|
||||
|
||||
public async override Task Load(MessageResult message)
|
||||
{
|
||||
if (message.Handled)
|
||||
return;
|
||||
|
||||
if (message.MessageText.Trim() == "")
|
||||
return;
|
||||
|
||||
if (this.UserData.Firstname == null)
|
||||
{
|
||||
this.UserData.Firstname = message.MessageText;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public async override Task Render(MessageResult message)
|
||||
{
|
||||
if (this.UserData.Firstname == null)
|
||||
{
|
||||
await this.Device.Send("Please sent your firstname:");
|
||||
return;
|
||||
}
|
||||
|
||||
message.Handled = true;
|
||||
|
||||
var step2 = new Step2();
|
||||
|
||||
step2.UserData = this.UserData;
|
||||
|
||||
await this.NavigateTo(step2);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Register.Steps
|
||||
{
|
||||
public class Step2 : AutoCleanForm
|
||||
{
|
||||
public Data UserData { get; set; }
|
||||
|
||||
|
||||
public async override Task Load(MessageResult message)
|
||||
{
|
||||
if (message.Handled)
|
||||
return;
|
||||
|
||||
if (message.MessageText.Trim() == "")
|
||||
return;
|
||||
|
||||
if (this.UserData.Lastname == null)
|
||||
{
|
||||
this.UserData.Lastname = message.MessageText;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public async override Task Render(MessageResult message)
|
||||
{
|
||||
if (this.UserData.Lastname == null)
|
||||
{
|
||||
await this.Device.Send("Please sent your lastname:");
|
||||
return;
|
||||
}
|
||||
|
||||
message.Handled = true;
|
||||
|
||||
var step3 = new Step3();
|
||||
|
||||
step3.UserData = this.UserData;
|
||||
|
||||
await this.NavigateTo(step3);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests.Register.Steps
|
||||
{
|
||||
public class Step3 : AutoCleanForm
|
||||
{
|
||||
public Data UserData { get; set; }
|
||||
|
||||
public async override Task Load(MessageResult message)
|
||||
{
|
||||
if (message.Handled)
|
||||
return;
|
||||
|
||||
if (message.MessageText.Trim() == "")
|
||||
return;
|
||||
|
||||
if (this.UserData.EMail == null)
|
||||
{
|
||||
this.UserData.EMail = message.MessageText;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public async override Task Action(MessageResult message)
|
||||
{
|
||||
await message.ConfirmAction();
|
||||
|
||||
switch (message.RawData)
|
||||
{
|
||||
case "back":
|
||||
|
||||
var start = new Start();
|
||||
|
||||
await this.NavigateTo(start);
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public async override Task Render(MessageResult message)
|
||||
{
|
||||
if (this.UserData.EMail == null)
|
||||
{
|
||||
await this.Device.Send("Please sent your email:");
|
||||
return;
|
||||
}
|
||||
|
||||
message.Handled = true;
|
||||
|
||||
String s = "";
|
||||
|
||||
s += "Firstname: " + this.UserData.Firstname + "\r\n";
|
||||
s += "Lastname: " + this.UserData.Lastname + "\r\n";
|
||||
s += "E-Mail: " + this.UserData.EMail + "\r\n";
|
||||
|
||||
ButtonForm bf = new ButtonForm();
|
||||
bf.AddButtonRow(new ButtonBase("Back", "back"));
|
||||
|
||||
await this.Device.Send("Your details:\r\n" + s, bf);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests
|
||||
{
|
||||
public class SimpleForm : AutoCleanForm
|
||||
{
|
||||
|
||||
public SimpleForm()
|
||||
{
|
||||
this.DeleteSide = TelegramBotBase.Enums.eDeleteSide.Both;
|
||||
this.DeleteMode = TelegramBotBase.Enums.eDeleteMode.OnLeavingForm;
|
||||
|
||||
this.Opened += SimpleForm_Opened;
|
||||
}
|
||||
|
||||
private async Task SimpleForm_Opened(object sender, EventArgs e)
|
||||
{
|
||||
await this.Device.Send("Hello world! (send 'back' to get back to Start)\r\nOr\r\nhi, hello, maybe, bye and ciao");
|
||||
}
|
||||
|
||||
public override async Task Load(MessageResult message)
|
||||
{
|
||||
//message.MessageText will work also, cause it is a string you could manage a lot different scenerios here
|
||||
|
||||
var messageId = message.MessageId;
|
||||
|
||||
switch (message.Command)
|
||||
{
|
||||
case "hello":
|
||||
case "hi":
|
||||
|
||||
//Send him a simple message
|
||||
await this.Device.Send("Hello you there !");
|
||||
break;
|
||||
|
||||
case "maybe":
|
||||
|
||||
//Send him a simple message and reply to the one of himself
|
||||
await this.Device.Send("Maybe what?", replyTo: messageId);
|
||||
|
||||
break;
|
||||
|
||||
case "bye":
|
||||
case "ciao":
|
||||
|
||||
//Send him a simple message
|
||||
await this.Device.Send("Ok, take care !");
|
||||
break;
|
||||
|
||||
case "back":
|
||||
|
||||
var st = new Menu();
|
||||
|
||||
await this.NavigateTo(st);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests
|
||||
{
|
||||
public class Start : SplitterForm
|
||||
{
|
||||
public override async Task<bool> Open(MessageResult e)
|
||||
{
|
||||
var st = new Menu();
|
||||
await this.NavigateTo(st);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public override async Task<bool> OpenGroup(MessageResult e)
|
||||
{
|
||||
var st = new Groups.LinkReplaceTest();
|
||||
await this.NavigateTo(st);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override Task<bool> OpenChannel(MessageResult e)
|
||||
{
|
||||
return base.OpenChannel(e);
|
||||
}
|
||||
|
||||
public override Task<bool> OpenSupergroup(MessageResult e)
|
||||
{
|
||||
return base.OpenSupergroup(e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Telegram.Bot.Types;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests
|
||||
{
|
||||
public class TestForm : FormBase
|
||||
{
|
||||
|
||||
|
||||
String LastMessage { get; set; }
|
||||
|
||||
public TestForm()
|
||||
{
|
||||
this.Opened += TestForm_Opened;
|
||||
this.Closed += TestForm_Closed;
|
||||
}
|
||||
|
||||
private async Task TestForm_Opened(object sender, EventArgs e)
|
||||
{
|
||||
await this.Device.Send("Welcome to Form 1");
|
||||
}
|
||||
|
||||
private async Task TestForm_Closed(object sender, EventArgs e)
|
||||
{
|
||||
await this.Device.Send("Ciao from Form 1");
|
||||
}
|
||||
|
||||
|
||||
public override async Task Action(MessageResult message)
|
||||
{
|
||||
switch (message.Command)
|
||||
{
|
||||
case "reply":
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case "navigate":
|
||||
|
||||
var tf = new TestForm2();
|
||||
|
||||
await this.NavigateTo(tf);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
if (message.UpdateData == null)
|
||||
return;
|
||||
|
||||
this.LastMessage = message.Message.Text;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override async Task Render(MessageResult message)
|
||||
{
|
||||
if (message.Command == "reply")
|
||||
{
|
||||
|
||||
await this.Device.Send("Last message: " + this.LastMessage);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Telegram.Bot.Types;
|
||||
using Telegram.Bot.Types.ReplyMarkups;
|
||||
using TelegramBotBase.Base;
|
||||
using TelegramBotBase.Extensions.Images;
|
||||
using TelegramBotBase.Form;
|
||||
|
||||
namespace TelegramBotBaseTest.Tests
|
||||
{
|
||||
public class TestForm2 : FormBase
|
||||
{
|
||||
|
||||
|
||||
public TestForm2()
|
||||
{
|
||||
this.Opened += TestForm2_Opened;
|
||||
this.Closed += TestForm2_Closed;
|
||||
}
|
||||
|
||||
private async Task TestForm2_Opened(object sender, EventArgs e)
|
||||
{
|
||||
await this.Device.Send("Welcome to Form 2");
|
||||
}
|
||||
|
||||
private async Task TestForm2_Closed(object sender, EventArgs e)
|
||||
{
|
||||
await this.Device.Send("Ciao from Form 2");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public override async Task Action(MessageResult message)
|
||||
{
|
||||
var call = message.GetData<CallbackData>();
|
||||
|
||||
await message.ConfirmAction();
|
||||
|
||||
await message.DeleteMessage();
|
||||
|
||||
message.Handled = true;
|
||||
|
||||
if (call.Value == "testform1")
|
||||
{
|
||||
|
||||
var tf = new TestForm();
|
||||
|
||||
await this.NavigateTo(tf);
|
||||
}
|
||||
else if (call.Value == "alert")
|
||||
{
|
||||
AlertDialog ad = new AlertDialog("This is a message", "Ok");
|
||||
|
||||
ad.ButtonClicked += async (s, en) =>
|
||||
{
|
||||
var fto = new TestForm2();
|
||||
await this.NavigateTo(fto);
|
||||
};
|
||||
|
||||
await this.NavigateTo(ad);
|
||||
}
|
||||
else if (call.Value == "confirm")
|
||||
{
|
||||
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);
|
||||
};
|
||||
|
||||
await this.OpenModal(pd);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public override async Task Render(MessageResult message)
|
||||
{
|
||||
|
||||
Bitmap bmp = new Bitmap(800, 600);
|
||||
using (Graphics g = Graphics.FromImage(bmp))
|
||||
{
|
||||
|
||||
g.FillRectangle(Brushes.White, 0, 0, bmp.Width, bmp.Height);
|
||||
|
||||
g.DrawString("Test Image", new Font("Arial", 24, FontStyle.Bold, GraphicsUnit.Pixel), Brushes.Black, new PointF(50, 50));
|
||||
|
||||
}
|
||||
|
||||
await this.Device.SetAction(Telegram.Bot.Types.Enums.ChatAction.UploadPhoto);
|
||||
|
||||
ButtonForm btn = new ButtonForm();
|
||||
|
||||
//btn.AddButtonRow(new ButtonBase("Zum Testformular 1", CallbackData.Create("navigate", "testform1")), new ButtonBase("Zum Testformular 1", CallbackData.Create("navigate", "testform1")));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("Information Prompt", CallbackData.Create("navigate", "alert")));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("Confirmation Prompt with event", CallbackData.Create("navigate", "confirm")));
|
||||
|
||||
btn.AddButtonRow(new ButtonBase("Request Prompt", CallbackData.Create("navigate", "prompt")));
|
||||
|
||||
|
||||
await this.Device.SendPhoto(bmp, "Test", "", btn);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user