簡體   English   中英

如何將 ConversationHandler 模塊從 Python-Telegram-Bot 遷移到 Telethon

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM