Всем привет! <br/> Помогите, пожалуйста, разобраться в проблеме. У меня есть бот, в котором менеджер должен отправлять фото админу для проверки, но вместо этого отправляется только одно фото, и оно повторяется 4 раза. Не могу понять, в чем ошибка и что я упустил. <br/> Буду благодарен за помощь! <br/> <br/> <pre><code class="python">def process_photo(message, task_id, manager_chat_id):
"""
Обрабатывает полученную медиагруппу (фото) и пересылает их администраторам.
"""
try:
# Логируем объект message
logger.debug(f"Полученное сообщение: {message}")
# Получаем список администраторов
admins = CustomUser.objects.filter(status='admin')
# Если это медиагруппа
if hasattr(message, 'media_group') and message.media_group:
media = []
# Собираем фото из медиагруппы
for idx, media_item in enumerate(message.media_group):
if media_item.media_type == 'photo':
media_item_data = {
'type': 'photo',
'media': media_item.file_id,
}
# Если это первое фото, добавляем caption
if idx == 0:
media_item_data['caption'] = 'Ваш текст здесь'
media.append(media_item_data)
# Логируем медиагруппу
logger.debug(f"Медиагруппа для отправки: {media}")
# Отправляем медиагруппу администраторам
for admin in admins:
if media:
bot.send_media_group(admin.telegram_id, media)
sleep(1)
bot.send_message(manager_chat_id, "Медиагруппа отправлена админам.")
Судя по вашему коду, проблема может заключаться в том, как вы обрабатываете медиагруппу. В зависимости от используемой библиотеки для работы с Telegram API (например, `python-telegram-bot` или `telebot`), способ получения и отправки медиагрупп может отличаться.
Ваш код пытается собрать медиагруппу из `message.media_group`, но обработка медиагрупп в Telegram может потребовать несколько иного подхода. Вместо того чтобы собирать `file_id` из медиагруппы, следует работать с объектами сообщения правильно.
Вот корректированный пример, который может помочь вам исправить ситуацию:
```python
def process_photo(message, task_id, manager_chat_id):
"""
Обрабатывает полученную медиагруппу (фото) и пересылает их администраторам.
"""
try:
# Логируем объект message
logger.debug(f"Полученное сообщение: {message}")
# Получаем список администраторов
admins = CustomUser.objects.filter(status='admin')
# Если это медиагруппа
if hasattr(message, 'media_group') and message.media_group:
media = []
# Собираем фото из медиагруппы
for idx, media_item in enumerate(message.media_group):
if media_item.media_type == 'photo':
media_item_data = media_item.media # Используем сам объект медиапредставления
# Если это первое фото, добавляем caption
if idx == 0:
media.append((media_item_data.file_id, 'Ваш текст здесь'))
else:
media.append(media_item_data.file_id)
# Логируем медиагруппу
logger.debug(f"Медиагруппа для отправки: {media}")
# Отправляем медиагруппу администраторам
for admin in admins:
if media:
bot.send_media_group(admin.telegram_id, media)
sleep(1)
bot.send_message(manager_chat_id, "Медиагруппа отправлена админам.")
except Exception as e:
logger.error(f"Ошибка при обработке фото: {e}")
```
Как вы можете заметить, здесь мы изменили подход к формированию списка `media`. Мы используем `media_item.media`, чтобы получить нужное относительное представление медиаконтента. Кроме того, мы добавляем caption только к первому элементу и добавляем только `file_id` для остальных, когда это необходимо.
Пожалуйста, протестируйте этот код и проверьте, решит ли он вашу проблему. Убедитесь также, что вы используете правильные параметры для отправки группы медиафайлов в зависимости от используемой библиотеки Telegram.
Накосячил в том, что не читал документацию API телеграма, не разбирался, а притащил сюда бред от чатжпт и хочешь, чтобы за тебя разбирались.