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

Telegram机器人无法发送管理员提供的照片问题求助

问题分析与修复方案

你的代码存在几个关键问题,导致无法正常发送照片,以下是具体分析和修复方案:

核心问题点

  1. 错误传递照片参数:message.photo是一个包含多分辨率照片对象的列表,不能直接传入send_photo接口,必须提取照片的file_id字段。
  2. 宽泛异常捕获:直接使用except:会掩盖所有错误,无法定位真实问题(比如用户拉黑机器人、ID无效等)。
  3. 未处理频率限制:批量发送消息时,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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:52:45