0

我正在构建一个电报机器人,我试图让用户填写有关事件的详细信息并将它们存储在本身在列表中的字典中。

但是我希望它是链接对话。我希望它看起来像:

用户:/创建

bot-reply:你想怎么称呼它?

用户回复:克里斯的生日

机器人回复:什么时候?

用户回复:2021 年 8 月 11 日

bot-reply: 2021 年 8 月 11 日事件 Chris 生日已保存!

为此,我计划使用文档中所述的ForceReply

如果您想在不牺牲隐私模式的情况下创建用户友好的分步界面,这将非常有用。

问题是文档似乎没有解释如何处理响应。

目前我的代码如下所示:

@app.on_message(filters.command('create'))
async def create_countdown(client, message):
    global countdowns
    countdown = {
        'countdown_id': str(uuid4())[:8],
        'countdown_owner_id': message.from_user.id,
        'countdown_onwner_username': message.from_user.username,
        }
    try:
        await message.reply('What do you want to name the countdown?', 
                            reply_markup=ForceReply()
        )

    except FloodWait as e:
        await asyncio.sleep(e.x)

通过查看表单,我发现了这样的选项: python telegram bot ForceReply 回调 ,这正是我正在寻找的,但他们使用不同的库,如 python-telegram-bot,允许他们使用 ConversationHandler。它似乎不是热解图的一部分

如何使用热解图创建用户友好的分步界面

4

1 回答 1

1

Pyrogram 没有 ConversationHandler。

您可以dict将用户 ID 用作键,并将他们所处的状态用作值,然后您可以使用该状态字典作为参考,以了解您的用户在对话中的位置。

Dan:(Pyrogram 创建者)
lib 中还没有类似对话的功能。一种方法是使用用户 ID 作为键将状态保存到字典中。在采取行动之前检查字典,以便您知道您的用户在哪一步,并在他们成功完成一项操作后更新它
https://t.me/pyrogramchat/213488

于 2021-11-29T12:37:57.937 回答