Для отправки медиа-группы, состоящей из двух фото, вы можете использовать метод `send_media_group` из библиотеки Aiogram. Вот пример кода:
```python
from aiogram import Bot, Dispatcher
from aiogram.types import InputFile, MediaGroup
bot = Bot(token='your_token')
dp = Dispatcher(bot)
async def send_media_group():
# Передайте file_id или путь к файлу в InputFile
photo1 = InputFile('path_to_first_photo.jpg')
photo2 = InputFile('path_to_second_photo.jpg')
# Создайте список с объектами MediaGroup
media_group = MediaGroup()
media_group.attach_photo(photo1)
media_group.attach_photo(photo2)
# Отправьте медиа-группу
await bot.send_media_group(chat_id='your_chat_id', media=media_group)
# Запустите функцию отправки медиа-группы
dp.run_until_disconnected(send_media_group)
```
Относительно отложенного постинга с использованием двух изображений, вы можете использовать функцию `schedule` из библиотеки `aiogram.contrib.fsm_storage.redis`. Вот пример кода:
```python
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.redis import RedisStorage2
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.utils import executor
from datetime import datetime, timedelta
bot = Bot(token='your_token')
dp = Dispatcher(bot, storage=RedisStorage2())
class PostState(StatesGroup):
photo1 = State()
photo2 = State()
@dp.message_handler(commands=['start'])
async def start_handler(message: types.Message):
await message.reply('Отправьте первое изображение:')
await PostState.photo1.set()
@dp.message_handler(state=PostState.photo1, content_types=types.ContentTypes.PHOTO)
async def process_photo1(message: types.Message, state: FSMContext):
# Вызываем эту функцию с задержкой 10 минут
await scheduled_post(message, state, timedelta(minutes=10))
@dp.message_handler(state=PostState.photo2, content_types=types.ContentTypes.PHOTO)
async def process_photo2(message: types.Message, state: FSMContext):
# Отправляем сообщение с двумя фотографиями
await bot.send_media_group(chat_id='your_chat_id', media=[
types.InputMediaPhoto(message.photo[0].file_id),
types.InputMediaPhoto(message.photo[1].file_id)
])
# Reset the state
await state.finish()
async def scheduled_post(message: types.Message, state: FSMContext, delay: timedelta):
now = datetime.now()
scheduled_time = now + delay
# Сохраняем информацию о событии в контексте состояния
await state.update_data(
chat_id=message.chat.id,
photo1_file_id=message.photo[0].file_id,
scheduled_time=scheduled_time
)
# Ожидаем задержку
await asyncio.sleep(delay.total_seconds())
data = await state.get_data()
chat_id = data['chat_id']
photo1_file_id = data['photo1_file_id']
scheduled_time = data['scheduled_time']
# Проверяем, прошло ли уже запланированное время
if datetime.now() >= scheduled_time:
# Отправляем сообщение с первым изображением
await bot.send_photo(chat_id=chat_id, photo=photo1_file_id)
# Запрашиваем второе изображение
await message.reply('Отправьте второе изображение:')
await PostState.photo2.set()
# Запускаем бота
executor.start_polling(dp, skip_updates=True)
```
В этом примере, при получении команды `/start`, бот будет запрашивать первое изображение у пользователя и вызывать функцию `scheduled_post` с задержкой в 10 минут. В этой функции мы сохраняем информацию о событии (chat_id, file_id первого изображения и время запланированной публикации) в состоянии и ожидаем задержку. По истечении задержки,