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

如何修复aiogram机器人重复发送同一张照片的问题

解决aiogram机器人重复发送照片问题

你的代码核心问题是在消息处理器内部嵌套注册另一个消息处理器:每次用户发送“Загрузить фото”触发func5时,都会向Dispatcher注册一个新的photo_handler。后续用户发送照片时,所有已注册的photo_handler都会执行,导致同一张照片被重复发送多次。

解决方案:使用FSM状态机跟踪对话流程

采用aiogram的有限状态机(FSM)来管理用户的对话状态,这是处理这类分步引导场景的标准方案,能彻底避免重复注册处理器的问题。

修正后的完整代码

from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.utils import executor

# 定义对话状态类
class PhotoUpload(StatesGroup):
    waiting_for_photo = State()

# 初始化Bot和Dispatcher(替换为你的机器人Token)
API_TOKEN = '你的机器人Token'
storage = MemoryStorage()
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot, storage=storage)

@dp.message_handler(text="Загрузить фото")  
async def func5(message: types.Message):
    if message.chat.type == "private" and message.from_user.language_code == 'ru':
        await message.answer('Отправьте мне фото и, после проверки, оно будет загружено в PofTW') 
        # 将用户状态切换为「等待上传照片」
        await PhotoUpload.waiting_for_photo.set()

# 仅响应处于「等待上传照片」状态的用户发送的照片
@dp.message_handler(content_types=['photo'], state=PhotoUpload.waiting_for_photo)
async def photo_handler(message: types.Message, state: FSMContext):
    photo_id = message.photo[-1].file_id
    # 兼容无username的用户
    answer_user_name = message.chat.username or '匿名用户'
    photo_caption = f'Автор фото - {answer_user_name}' 
    # 替换为你的目标群组ID
    await bot.send_photo(chat_id='目标群组ID', photo=photo_id, caption=photo_caption, protect_content=True)
    # 重置状态,避免后续照片被误触发
    await state.finish()
    await message.answer('Фото успешно отправлено!')

if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)

关键说明

  1. 状态标记:用PhotoUpload.waiting_for_photo标记用户是否处于等待上传照片的状态,photo_handler只会处理处于该状态的用户消息,不会响应无关的照片发送。
  2. 状态重置:处理完照片后调用await state.finish()清除用户状态,确保下次交互不会残留旧状态。
  3. 全局注册:所有处理器都是全局注册,不会重复添加,从根源解决了重复执行的问题。

内容的提问来源于stack exchange,提问作者Kris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:20:24