Здравствуйте. Есть данный код, но он не работает для Aiogram версии 2.25.1, потому что нет такого типа MEDIA_GROUP.
import logging, asyncio
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters import Command
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.types import ParseMode, InputFile
from aiogram.utils import executor
# Устанавливаем уровень логирования
logging.basicConfig(level=logging.INFO)
# Создаем бота и диспетчер
bot = Bot(token='')
dp = Dispatcher(bot, storage=MemoryStorage())
# Определяем состояния
class SaleForm(StatesGroup):
waiting_for_description = State()
waiting_for_media_group = State()
# Обработчик команды /sale
@dp.message_handler(Command('sale'))
async def cmd_sale(message: types.Message):
# Спрашиваем у пользователя описание товара
await message.answer('Введите описание товара, который вы хотите продать:')
# Переходим в состояние ожидания описания товара
await SaleForm.waiting_for_description.set()
# Обработчик текстового сообщения в состоянии ожидания описания товара
@dp.message_handler(state=SaleForm.waiting_for_description)
async def process_description(message: types.Message, state: FSMContext):
# Сохраняем описание товара в контексте
async with state.proxy() as data:
data['description'] = message.text
# Добавляем @username пользователя в конец описания товара
data['description'] += f'nn@{message.from_user.username}'
# Сохраняем id пользователя в контексте
data['user_id'] = message.from_user.id
# Спрашиваем у пользователя медиа группу товара
await message.answer('Пришлите медиа группу товара:')
# Переходим в состояние ожидания медиа группы товара
await SaleForm.waiting_for_media_group.set()
# Обработчик медиа группы в состоянии ожидания медиа группы товара
@dp.message_handler(content_types=types.ContentType.MEDIA_GROUP, state=SaleForm.waiting_for_media_group)
async def process_media_group(message: types.Message, state: FSMContext):
# Сохраняем медиа группу товара в контексте
async with state.proxy() as data:
data['media_group_id'] = message.media_group_id
# Отправляем сообщение с описанием товара и медиа группой админам
await bot.send_media_group(chat_id='-1001856694423', media=message.media_group, caption=data['description'], reply_markup=types.InlineKeyboardMarkup().add(types.InlineKeyboardButton('Подтвердить', callback_data='confirm'), types.InlineKeyboardButton('Отказать', callback_data='reject')))
# Отправляем сообщение пользователю о том, что его объявление отправлено на модерацию
await bot.send_message(chat_id=data['user_id'], text='Ваше объявление отправлено на модерацию')
# Обработчик нажатия на кнопку "Подтвердить"
@dp.callback_query_handler(lambda c: c.data == 'confirm')
async def process_confirm(callback_query: types.CallbackQuery, state: FSMContext):
# Получаем данные из контекста
async with state.proxy() as data:
# Отправляем сообщение пользователю о том, что его объявление подтверждено
await bot.send_message(chat_id=data['user_id'], text='Ваше объявление подтверждено')
# Опубликовываем объявление в канале
await bot.send_media_group(chat_id='-1001952596331', media=callback_query.message.media_group, caption=callback_query.message.caption, parse_mode=ParseMode.HTML)
# Обработчик нажатия на кнопку "Отказать"
@dp.callback_query_handler(lambda c: c.data == 'reject')
async def process_reject(callback_query: types.CallbackQuery, state: FSMContext):
# Получаем данные из контекста
async with state.proxy() as data:
# Отправляем сообщение пользователю о том, что его объявление отклонено
await bot.send_message(chat_id=data['user_id'], text='Вам отказано в объявлении')
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)