簡體   English   中英

帶python-telegram-bot庫的Telegram機器人

[英]Telegram bot with python-telegram-bot library

我對可能是一個非常簡單的問題並不滿意,但是我剛剛開始研究Telegram API,特別是python-telegram-bot庫,因此如果這是一個幼稚的問題,請原諒我。 簡而言之,我想做一個非常簡單的漫游器,它允許組中的成員將“對象”(如通用對象,而不是python對象)添加到列表中,並擁有對象的成員的名稱(此通過/ add命令完成)。 我將對象存儲為字典的鍵,字典的值是成員的名稱。 到目前為止,這是我想出的代碼:

import logging
from telegram.ext import Updater
from telegram.ext import CommandHandler
from telegram.ext import MessageHandler, Filters

list_of_stuff = {}

updater = Updater(token='698307431:AAG9kExmheQ5hLvBieJNtsTqV9M4U_GNFv0') 

dispatcher = updater.dispatcher


logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)

updater.start_polling()

def start(bot,update):
    bot.send_message(chat_id=update.message.chat_id, text="I'm a bot, please talk to me!")  

def obj(bot, update):
    list_of_stuff[update.message.text] = update.message.from_user.username

def unknown(bot, update):
    bot.send_message(chat_id=update.message.chat_id, text="Sorry, I didn't understand that command.")

def add(bot, update):
    bot.send_message(chat_id=update.message.chat_id, text="Choose an object.")
    dispatcher.add_handler(MessageHandler(Filters.text, obj))


dispatcher.add_handler(CommandHandler('start', start))

dispatcher.add_handler(CommandHandler('add',add))

dispatcher.add_handler(MessageHandler(Filters.command, unknown))

如您所見,存在一個問題:在obj函數中,我將發送方的用戶名設置為值,而鍵是我認為將由同一發送方輸入的“對象”。 問題是,我只想使用/ add命令將“對象”作為鍵,並將用戶名作為值都添加,並且我希望組中的每個成員都可以這樣做(所以應該每個成員都可以為其他成員添加“對象”)。 但是我不知道是否可以同步方式在同一個函數(在本例中為/ add命令)中添加兩個消息處理程序,即要求用戶添加密鑰,等待響應,然后然后只有然后才要求添加該值,這意味着第二個send_message僅應在用戶輸入鍵之后出現。

對於您來說,ConversationHandler似乎是最合理的解決方案。 您需要規划您的對話流程。 您在對話中需要什么狀態(步驟)?

看一下ConversationHandler的倉庫簡單示例: ConversationHandler狀態圖

  • 灰色框是狀態
  • 紅色框是發給用戶的消息
  • 綠框是命令/鍵盤選擇

您可以使用不同的過濾器類型來確保獲得所需的對象類型,請參閱過濾器模塊

我相信他們的示例代碼滿足您的需求。

如果您想提出問題並等待python-telegram-bot的響應,則可以使用ConversationHandler

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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