【问题标题】:PythonBot - pass argument to command hanlderPython Bot - 将参数传递给命令处理程序
【发布时间】:2018-01-14 05:31:32
【问题描述】:
我正在玩一点 Python Telegram Bot,我想将通过先前计算获得的参数传递给我的处理程序,例如:
def my_handler(bot, update, param):
print(param)
def main():
res = some_function()
updater.dispatcher.add_handler(CommandHandler('cmd', my_handler))
如何将参数传递给处理程序?
【问题讨论】:
标签:
python
telegram-bot
python-telegram-bot
【解决方案1】:
在 python-telegram-bot 版本 12 中,参数作为列表位于属性 CallbackContext.args 中。这是一个通用示例:
def my_handler(update, context):
print(context.args)
def main():
res = some_function()
updater.dispatcher.add_handler(CommandHandler('cmd', my_handler))
一个简单的例子是将两个整数相加:
import logging
from config import tgtoken
from telegram.ext import Updater, CommandHandler
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO)
logger = logging.getLogger(__name__)
def error(update, context):
"""Log Errors caused by Updates."""
logger.warning('Update "%s" caused error "%s"', update, context.error)
def sum(update, context):
try:
number1 = int(context.args[0])
number2 = int(context.args[1])
result = number1+number2
update.message.reply_text('The sum is: '+str(result))
except (IndexError, ValueError):
update.message.reply_text('There are not enough numbers')
def main():
updater = Updater(tgtoken, use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler("sum", sum))
dp.add_error_handler(error)
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
如果您发送/sum 1 2,您的机器人将回复The sum is: 3
【解决方案2】:
如果您想将用户通过命令发送的参数传递给处理程序调用的函数,您应该添加pass_args=True 参数,它将返回用户作为列表发送的参数。
所以你的代码应该是:
def my_handler(bot, update, args):
for arg in args:
print(arg)
def main():
res = some_function()
updater.dispatcher.add_handler(CommandHandler('cmd', my_handler, pass_args=True))
我没查过
如果您正在寻找一种方法将您从另一个处理程序获取的内容传递给与同一用户相关的处理程序,该库有一个很好的参数,称为“chat_data”和“user_data”。