我正在使用 Televerse 在 Dart 中构建 Telegram Bot。我想实现用户验证过程。我正在考虑这样的流程:
Bot: What is your name?
User: John Doe
Bot: Send me your contact
User: [Contact]
Bot: Finally, add your recovery email.
User: [email protected]
Bot: Account verification request is sent.
如您所见,我必须完成 3 个步骤才能完成验证请求流程。有没有一种方法可以在一个处理程序中完成此操作?有什么办法可以等待用户的回复吗?
我尝试使用全局
Map<int, dynamic>
来实现此功能,以便 user_id 针对验证过程状态。但是,看起来太复杂了。
最常见的解决方案是使用数据库并存储您的验证步骤状态,就像您尝试使用
Map<int, dynamic
地图一样。
但是,使用 Televerse,您可以简单地通过
Conversation
API 来完成此操作。首先,创建一个 Conversation 实例。
final conv = Conversation(bot);
现在您可以在
waitFor
对象内使用不同的 conv
方法来等待用户的响应。每个 waitFor
方法的返回值都是可为空的 Context
(Context?
)。
这是一个示例代码:
bot.command('verification', (ctx) async {
// Ask name
ctx.reply("What's your name?");
final nameCtx = await conv.waitForTextMessage(chatId: ctx.id);
// Save / Validate name
// Ask for contact
await nameCtx?.reply(
"Send me your contact.",
replyMarkup: Keyboard().requestContact("Send Contact").resized(),
);
final contactCtx = await conv.waitForContactMessage(chatId: ctx.id);
// Verify and validate contact
// ...
});
希望这有帮助!