【问题标题】: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”。

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 2010-10-04
    • 1970-01-01
    相关资源
    最近更新 更多