我与可能是一个非常简单的问题不一致,但是我刚刚开始研究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函数中,我将发送方的用户名设置为value,而键是我认为将由同一发送方输入的“对象”。问题是,我只想使用/ add命令将“对象”作为键,并将用户名作为值都添加,并且我希望组中的每个成员都可以这样做(所以应该每个成员都可以为其他成员添加“对象”)。但是我不知道是否可以同步方式在同一个函数(在本例中为/ add命令)中添加两个消息处理程序,即要求用户添加密钥,等待响应,然后然后只有然后才要求添加该值,这意味着第二个send_message仅应在用户输入键之后出现。
答案 0 :(得分:1)
对于您来说,ConversationHandler似乎是最合理的解决方案。您需要规划您的对话流程。您在对话中想要什么状态(步骤)?
看看ConversationHandler的回购简单示例:ConversationHandler State Diagram
您可以使用不同的过滤器类型来确保获得所需的对象类型,请参见Filters Module
我相信他们的example code正是您所需要的。
答案 1 :(得分:0)
如果您要提问并等待python-telegram-bot的答复,则可以使用ConversationHandler