gpt4 book ai didi

python - 如何将 ConversationHandler 模块从 Python-Telegram-Bot 迁移到 Telethon

转载 作者:行者123 更新时间:2023-12-03 15:54:37 27 4
gpt4 key购买 nike

Python-telegram-bot这是 HTTP Telegram Bot API 包装器具有 telegram.ext.ConversationHandler模块及其功能是: “通过管理四个其他处理程序集合来与单个用户进行对话的处理程序。”

我正在从这个 python-telegram-bot 迁移到 Telethon MTProto API .我有这个ConversationHandler管理对话。如何创建任何类型的 ConversationHandler在 Telethon。

这是 Telethon 给 migrate from python-telegram-bot 的一些小概述。 .他们使用 echobot2.py从ptb的例子。如何使用此示例进行迁移 conversationbot.py .

最佳答案

您可以轻松创建所谓的“有限状态机”(FSM),它能够区分用户可以发现自己所处的对话的不同状态。

from enum import Enum, auto

# We use a Python Enum for the state because it's a clean and easy way to do it
class State(Enum):
WAIT_NAME = auto()
WAIT_AGE = auto()

# The state in which different users are, {user_id: state}
conversation_state = {}

# ...code to create and setup your client...

@client.on(events.NewMessage)
async def handler(event):
who = event.sender_id
state = conversation_state.get(who)

if state is None:
# Starting a conversation
await event.respond('Hi! What is your name?')
conversation_state[who] = State.WAIT_NAME

elif state == State.WAIT_NAME:
name = event.text # Save the name wherever you want
await event.respond('Nice! What is your age?')
conversation_state[who] = State.WAIT_AGE

elif state == State.WAIT_AGE:
age = event.text # Save the age wherever you want
await event.respond('Thank you!')
# Conversation is done so we can forget the state of this user
del conversation_state[who]

# ...code to keep Telethon running...
使用这种方法,您可以随心所欲。您可以制作自己的装饰器和 return new_state要自动更改状态或仅在状态正确时进入处理程序,您可以保持状态不变以创建循环(例如,如果用户输入了无效的年龄数字),或执行任何跳转到您想要的其他状态。
这种方法非常灵活和强大,尽管它可能需要一些时间来适应它。它还有其他好处,比如很容易只保留你需要的数据,但是你想要的。
我不推荐使用 Telethon 1.0 的 client.conversation因为你很快就会遇到限制。

关于python - 如何将 ConversationHandler 模块从 Python-Telegram-Bot 迁移到 Telethon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62245275/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com