Telegram Bot批量发消息问题:仅最后一个Chat ID接收消息
解决Telegram Bot仅向最后一个Chat ID发送消息的问题
以下是针对你问题的具体排查和修复方案:
核心问题分析
你的代码出现仅最后一个Chat ID收到消息的情况,大概率是以下两个原因之一:
- 媒体组(
media_group)被重复使用导致耗尽 - 未捕获异常导致循环提前中断
- Bot实例未正确初始化
修复代码示例
from telegram import Bot, InputMediaDocument BOT_TOKEN = "xxxxxx" CHAT_IDs = [-1001xxx,-100177xxx,-100188xxx] # 循环外初始化Bot实例,避免重复创建 bot = Bot(BOT_TOKEN) for CHAT_ID in CHAT_IDs: try: # 关键:每次循环重新生成media_group,不能复用同一个对象 media_group = [ InputMediaDocument(open("your_file1.pdf", "rb")), InputMediaDocument(open("your_file2.png", "rb")) # 根据你的需求添加媒体文件 ] bot.send_media_group(CHAT_ID, media=media_group) # 可选:关闭文件句柄,避免资源泄漏 for media in media_group: media.media.close() except Exception as e: # 捕获异常并打印,避免循环中断,同时排查具体错误 print(f"发送到Chat ID {CHAT_ID}失败: {str(e)}")
关键修复点说明
- 每次循环重新创建media_group:
InputMediaDocument对象在调用send_media_group后内部状态会被修改,无法重复使用,必须在每次循环内重新生成媒体组。 - 添加异常捕获:如果某个Chat ID发送失败(比如权限不足、ID无效、网络波动),未捕获的异常会直接终止循环,导致后续ID无法执行发送操作。
- 循环外初始化Bot:避免在循环内重复创建Bot实例,既浪费资源也可能引发不必要的问题。
内容的提问来源于stack exchange,提问作者Ajesh
相关产品推荐
相关产品推荐

