来自回调的猴子补丁对象

时间:2019-06-17 23:22:44

标签: python

注意:我已经搜索并阅读了how to override a method defined in a module of a third party library

Python Telegram机器人库利用回调/处理程序。如果我们定义这个:

self.dispatcher.add_handler(CommandHandler("help", self.help))

然后,self.help()将在特定事件发生时收到参数botupdate

其中一个参数bot具有称为send_message的方法。我想用一个特定的字符串为我的机器人所有消息添加前缀。我不想要想要的东西:

  1. 每次在bot.send_message中手动进行操作。像这样:send_message(text= prefix + " Hello")

  2. 象前面提到的问题的答案中所建议的那样,必须猴子修补bot.send_message方法。除了self.help()之外,我还有其他几种方法,这似乎并不遵守DRY规则。

这里的挑战似乎是每次触发回调时都会收到一个bot的新实例。

我有什么选择?

我以多种方式(混合的args和kwargs)呼叫bot.message()。例如,某些呼叫中可能没有parse_mode

bot.send_message(
            chat_id=update.message.chat_id,
            text=txt,
            parse_mode=telegram.ParseMode.MARKDOWN,
        )

1 个答案:

答案 0 :(得分:1)

如果我的理解正确,则您是直接从代码中调用bot.send_message()。大概是这样的:

bot = Bot(...)
bot.send_message("something")

您可以创建自己的包装函数,该函数接受bot实例和消息,并插入所需的额外文本:

def send_message_plus(bot, message):
    bot.send_message("This is extra " + message)

然后,您只需调用包装函数:

send_message_plus(bot, message)