1 回答
TA贡献1966条经验 获得超4个赞
我计划conversation
在该库的未来版本中删除该方法,因为正如您所看到的,很快就会遇到很大的限制,因为将基于回调的事件方法与命令式对话风格混合起来很困难。我建议您改用FSM 风格的对话。您应该能够轻松地调整该答案的代码以“等待数字”:
from enum import Enum, auto
class State(Enum):
WAIT_DIGITS = auto()
conversation_state = {}
@client.on(events.NewMessage)
async def handler(event):
who = event.sender_id
state = conversation_state.get(who)
if state is None:
await event.respond('Please send digits!')
conversation_state[who] = State.WAIT_DIGITS
elif state == State.WAIT_DIGITS:
if event.text.isdigit():
digits = event.text
await event.respond(f'Thanks for your digits! {digits}')
del conversation_state[who]
else:
await event.respond('Please only send digits, not letters')
您可以轻松地为此添加更多抽象(根据状态为其他函数构建自己的装饰器,或者只是将每个状态的代码分离到另一个函数,使用它们的返回值作为下一个状态等)。
添加回答
举报