Create a custom Form by subclassing FormBase
masterIn this framework, user interaction is managed through Form objects. Every user is internally redirected to your designated StartForm (a subclass of FormBase in the TelegramBotBase.Base namespace) when they first interact with the bot.
To build a functional form, you override lifecycle methods and subscribe to events:
Lifecycle Methods
PreLoad(MessageResult message): Invoked during navigation to the form.Load(MessageResult message): Invoked on every Message, Action, or Data received in this context.Edited(MessageResult message): Invoked when a message is edited.Action(MessageResult message): Invoked on button clicks.SentData(DataResult data): Invoked when the user uploads data (Photo, Audio, Video, Contact, Location, Document).Render(MessageResult message): Invoked to render the design or response.
Events
Init: Invoked on initialization, before navigation.Opened: Invoked after the form is opened.Closed: Invoked after the form has been closed.
Interacting with the User
Use this.Device.Send("message") to respond to the user in the current chat. To move to a different form, instantiate the new form and call await this.NavigateTo(newForm).
public class Start : FormBase
{
public Start()
{
Init += Start_Init;
Opened += Start_Opened;
Closed += Start_Closed;
}
private async Task Start_Init(object sender, Args.InitEventArgs e) { }
private async Task Start_Opened(object sender, EventArgs e) { }
private async Task Start_Closed(object sender, EventArgs e) { }
public override async Task PreLoad(MessageResult message) { }
public override async Task Load(MessageResult message)
{
// `Device` is a wrapper for current chat
await this.Device.Send("Hello world!");
}
public override async Task Edited(MessageResult message) { }
public override async Task Action(MessageResult message) { }
public override async Task SentData(DataResult data) { }
public override async Task Render(MessageResult message) { }
// Navigation example
public async Task GoToNext()
{
var form = new TestForm();
await this.NavigateTo(form);
}
}