[英]How to call method without go to ConversationHandler in python-telegram-bot
[英]How to migrate ConversationHandler module from Python-Telegram-Bot to Telethon
Python-telegram-bot是 HTTP Telegram Bot API 包裝器具有telegram.ext.ConversationHandler模塊,其功能是: “通過管理其他處理程序的四個 Z0B9ABFE67CC352116 與單個用戶進行對話的處理程序”。
我正在從這個python-telegram-bot遷移到Telethon MTProto API 。 我有這個ConversationHandler
來管理對話。 如何在Telethon中創建任何類型的ConversationHandler
。
這是Telethon給出的一些從 python-telegram-bot 遷移的小概述。 他們使用 ptb 示例中的echobot2.py 。 如何使用此示例conversationbot.py 進行遷移。
您可以輕松創建所謂的“有限 state 機器”(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
以自動更改 state 或僅在 state 正確的情況下輸入處理程序,您可以保留 state 以創建一個無效的年齡數字以創建循環)執行任何跳轉到您想要的其他狀態。
這種方法非常靈活和強大,盡管它可能需要一些時間來適應它。 它還有其他好處,比如很容易只保留你需要的數據,但是你想要的。
我不推薦使用 Telethon 1.0 的client.conversation
,因為你很快就會遇到限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.