Python 电报机器人过滤器
Python telegram bot Filters
我一直在制作一个机器人,我将 filters=Filters.private
用于 start_command 然后我在 MessageHandler
中使用它,它是代码:
dp.add_handler(CommandHandler('start', start_command, 过滤器=Filters.private))
dp.add_handler(MessageHandler(Filters.private, start_keyboard_answers))
它工作得很好,但问题是我需要在第二个过滤器中制作另一个过滤器,代码应该是这样的:
dp.add_handler(CommandHandler('start', start_command, 过滤器=Filters.private))
dp.add_handler(MessageHandler(Filters.private, start_keyboard_answers, 过滤器=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()
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 查看这个
我一直在制作一个机器人,我将 filters=Filters.private
用于 start_command 然后我在 MessageHandler
中使用它,它是代码:
dp.add_handler(CommandHandler('start', start_command, 过滤器=Filters.private))
dp.add_handler(MessageHandler(Filters.private, start_keyboard_answers))
它工作得很好,但问题是我需要在第二个过滤器中制作另一个过滤器,代码应该是这样的:
dp.add_handler(CommandHandler('start', start_command, 过滤器=Filters.private)) dp.add_handler(MessageHandler(Filters.private, start_keyboard_answers, 过滤器=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()
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 查看这个