如何在 Telegram Bot 中等待用户的回复?

问题描述 投票:0回答:1

我正在使用 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 针对验证过程状态。但是,看起来太复杂了。

dart telegram-bot
1个回答
0
投票

最常见的解决方案是使用数据库并存储您的验证步骤状态,就像您尝试使用

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

    // ...
  });

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.