【问题标题】:Python telegram bot FiltersPython 电报机器人过滤器
【发布时间】:2020-07-13 02:49:20
【问题描述】:

我一直在制作一个机器人,我使用filters=Filters.privatefor start_command 然后我在MessageHandler 中使用它,它是代码: dp.add_handler(CommandHandler('start', start_command, filters=Filters.private)) dp.add_handler(MessageHandler(Filters.private, start_keyboard_answers))

它工作得很好,但问题是我需要在第二个过滤器内制作另一个过滤器,代码应该是这样的:

dp.add_handler(CommandHandler('start', start_command, filters=Filters.private)) dp.add_handler(MessageHandler(Filters.private, start_keyboard_answers, filters=Filters.private)) dp.add_handler(MessageHandler(Filters.private, start_keyboard_answers))

但这是不可能的,我在第二行有两个过滤器 我该如何处理? 如果你想知道我在做什么,我会把完整的项目放在这里(我在第二个键盘之后寻找其他按钮,就像我对第一个和第二个所做的一样):

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

BOT_TOKEN = ''

def start_command(update, context):
    chat_id = update.message.chat.id
    context.bot.send_message(
        chat_id=chat_id,
        text='Hey, welcome to Chocolate Coffee!'
    )
    keyboard = [
        ['Make an Order']
    ]
    context.bot.send_message(
        chat_id=chat_id,
        text='How can I help you?',
        reply_markup=ReplyKeyboardMarkup(keyboard, one_time_keyboard=True, resize_keyboard=True)
    )

def start_keyboard_answers(update, context):
    message_text = str(update.message.text)
    if message_text.lower() == 'make an order':
        update.message.reply_text(
            text='Okay :)',
            quote=True
        )
        keyboard = [
            ['breakfast'],
            ['coffee'],
            ['milkshake'],
            ['colddrink'],
            ['food'],
            ['mocktail'],
            ['icecream'],
            ['organic'],
            ['smoothi'],
            ['glossy'],
            ['tea']
        ]
        chat_id = update.message.chat.id
        context.bot.sendMessage(chat_id,"ok, then?",reply_markup = ReplyKeyboardMarkup(keyboard, one_time_keyboard=True, resize_keyboard=True))
        
        message_text = str(update.message.text)
        import pdb; pdb.set_trace()
        if message_text.lower() == 'breakfast':
            update.message.reply_text(
                text='Okay :)',
                quote=True
            )
def main():
    updater = Updater(token=BOT_TOKEN, use_context=True)
    dp = updater.dispatcher

    dp.add_handler(CommandHandler('start', start_command, filters=Filters.private))
    dp.add_handler(MessageHandler(Filters.private, start_keyboard_answers))

    updater.start_polling()
    print('Started!')
    updater.idle()

if __name__ == "__main__":
    main()

【问题讨论】:

    标签: python telegram-bot python-telegram-bot


    【解决方案1】:

    MessageHandler 的第一个参数是filters

    我们可以使用按位运算符(& - AND、| - OR、~ - NOT)链接多个过滤器,并将其作为第一个参数传递。像这样,

    MessageHandler(filters = Filters.private & Filters.chat([ADMINS ID here]), callbacks = who_do_you_wanna_call_here)
    

    或者干脆

    MessageHandler(Filters.private & Filters.command, start_cmd_ck)
    

    虽然从代码中,我可以看出您需要ConversationHandler 来安排与用户的分步对话。在这里查看example

    【讨论】:

      猜你喜欢
      • 2020-10-28
      • 1970-01-01
      • 2017-08-18
      • 2019-03-09
      • 2022-01-01
      • 2021-02-21
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      相关资源
      最近更新 更多