如何创建快捷函数简化Telegram Bot的BOT.send_message重复调用?
解决方案
方式一:基础快捷函数
直接让快捷函数接收两个参数:message对象(用来获取聊天ID)和要发送的文本内容,逻辑简单直观。
# 定义快捷函数 def send(message, text): BOT.send_message(message.chat.id, text)
修改后的drink函数调用示例:
@BOT.message_handler(commands=['drink']) def drink(message): try: send(message, f'I added {message.text.split(" ", 2)[1]} to your daily intake for today, {fecha_excel}!') except IndexError: send(message, 'IndexError')
方式二:绑定聊天ID的偏函数(更简洁的重复调用)
如果同一个函数内需要多次发送消息,可以用functools.partial预先绑定聊天ID,后续只需传入文本即可:
from functools import partial # 定义获取发送器的函数 def get_sender(message): # 预先绑定当前聊天ID,返回仅需传入文本的发送函数 return partial(BOT.send_message, message.chat.id)
修改后的drink函数调用示例:
@BOT.message_handler(commands=['drink']) def drink(message): sender = get_sender(message) try: sender(f'I added {message.text.split(" ", 2)[1]} to your daily intake for today, {fecha_excel}!') except IndexError: sender('IndexError')
错误原因说明
你之前的send函数参数设计逻辑错误,且调用时大概率直接传入了文本(比如send('IndexError')),导致函数内的message变成了字符串而非Telegram的Message对象,自然无法访问chat.id属性,才会出现"需传入chat对象而非字符串"的报错。
内容的提问来源于stack exchange,提问作者MIKIBURGOS
相关产品推荐
相关产品推荐

