You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建快捷函数简化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 16:32:32