注意:我已经搜索并阅读了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()
将在特定事件发生时收到参数bot
和update
。
其中一个参数bot
具有称为send_message
的方法。我想用一个特定的字符串为我的机器人所有消息添加前缀。我不想要想要的东西:
每次在bot.send_message
中手动进行操作。像这样:send_message(text= prefix + " Hello")
。
象前面提到的问题的答案中所建议的那样,必须猴子修补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,
)
答案 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)