我正在使用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: someone@gmail.com
Bot: Account verification request is sent.

如您所见,我必须完成3个步骤才能完成验证请求过程.有没有一种方法可以在一个处理器中完成此任务?有没有办法等待用户的回复?

我try 用全局Map<int, dynamic>来实现这一点,以便user_id针对验证过程状态.但是,这似乎太复杂了.

推荐答案

最常见的解决方案是使用数据库并存储验证步骤状态,就像您try 使用Map<int, dynamic map 一样.

但是,对于Televse,您只需通过Conversation个API即可完成这一任务.首先,创建一个Conversation实例.

final conv = Conversation(bot); 

现在您可以在conv对象中使用不同的waitFor种方法来等待用户的响应.每个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

    // ...
  });

希望这有帮助!

Dart相关问答推荐

如何使用 dart 将 Uint8list 转换为 List

禁用 ListView 滚动

Flutter Expansion Tile -- 标题 colored颜色 变化和尾随动画箭头 colored颜色 变化

如何在Flatter中导入intl库?

如何在 Flutter 的小部件树中将新的 MaterialPageRoute 作为子项打开

在 Dart 中,是否可以有一个 const 闭包映射?

如何在Flutter中返回异步函数的值?

参数类型PointerEvent不能分配给参数类型PointerDownEvent

用百分比将小部件放置在堆栈中

如何从Flatter应用程序中导航到网页?(OAuth)

在小部件上显示对话框

如何在 Dart 2 中clone复杂对象

Dart 工厂构造函数 - 它与const构造函数有何不同

Dart如何将逗号添加到字符串编号

使用 Dart 解析 URI 以提取查询参数

方法级联如何在 dart 中准确工作?

如何在 Dart 中连接两个字符串?

在 Dart 中没有换行符的 print()?

将方法或值添加到 dart 中的枚举

如何在 Dart 中执行运行时类型判断?