Telegram机器人无法发送管理员提供的照片问题求助
问题分析与修复方案
你的代码存在几个关键问题,导致无法正常发送照片,以下是具体分析和修复方案:
核心问题点
- 错误传递照片参数:
message.photo是一个包含多分辨率照片对象的列表,不能直接传入send_photo接口,必须提取照片的file_id字段。 - 宽泛异常捕获:直接使用
except:会掩盖所有错误,无法定位真实问题(比如用户拉黑机器人、ID无效等)。 - 未处理频率限制:批量发送消息时,Telegram会限制请求频率,短时间内发送过多会被拦截。
修复后的代码
from aiogram.exceptions import TelegramError import asyncio @dp.message_handler(state='send_photo') async def send(message: types.Message, state: FSMContext): # 先判断是否收到有效照片 if not message.photo: await bot_name.send_message(message.from_user.id, '未接收到有效照片!') await state.finish() return # 提取最高分辨率照片的file_id photo_file_id = message.photo[-1].file_id users = data.get_user() success_num = 0 fail_num = 0 for el in users: user_id = el[0] try: await bot_name.send_photo(user_id, photo_file_id) if int(el[1]) != 1: data.set_active(user_id, 1) success_num += 1 # 增加发送间隔,规避Telegram频率限制 await asyncio.sleep(0.5) except TelegramError as e: print(f"给用户{user_id}发送失败: {str(e)}") data.set_active(user_id, 0) fail_num += 1 await bot_name.send_message( message.from_user.id, f'命令执行完成!成功发送{success_num}条,失败{fail_num}条。' ) await state.finish()
额外排查建议
- 确认
data.get_user()返回的el[0]是合法的整数类型Telegram用户ID - 检查目标用户是否拉黑了机器人,拉黑状态下无法发送消息
- 查看控制台输出的异常信息,根据具体错误进一步定位问题
内容的提问来源于stack exchange,提问作者Zervan
相关产品推荐
相关产品推荐

