Проблема может быть связана с тем, как вы обрабатываете фотографии в медиагруппе и одиночные фотографии. В вашем коде есть две основные части для отправки фото:
Обработка медиагруппы (если в сообщении есть атрибут media_group).
Обработка одиночных фото (если есть атрибут photo).
Потенциальные проблемы и предложения:
Отправка фотографий 4 раза: Возможно, проблема кроется в том, как вы отправляете фотографии для одиночных фото. В цикле по message.photo вы отправляете каждый элемент (который может быть несколько раз разрешен Telegram API с разными размерами), что может привести к многократной отправке одних и тех же фото.
Решение: Если это одиночное фото (не медиагруппа), попробуйте отправлять только первое фото (или лучше обрабатывать их, если оно несколько раз пришло в разных разрешениях).
Модифицируйте блок обработки одиночного фото:
elif message.photo:
# Отправляем только первое фото (если их несколько)
first_photo = message.photo[-1] # Это самое лучшее (которое имеет наибольшее разрешение)
for admin in admins:
bot.send_photo(admin.telegram_id, first_photo.file_id)
sleep(1)
bot.send_message(manager_chat_id, "Фото отправлены админам.")
Здесь я выбрал message.photo[-1], так как Telegram отправляет фото в нескольких размерах, и последним идет самое лучшее по качеству.
Логика обработки медиагруппы: Код для обработки медиагруппы выглядит нормальным, но есть небольшой нюанс: если media_group не является пустым, вы отправляете все фото одновременно. Однако если возникнут какие-то проблемы с первой фотографией, она может не попасть в группу. Убедитесь, что все фотографии из медиагруппы действительно добавляются в список и корректно отправляются.
В принципе, логика отправки медиагруппы выглядит правильной:
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,
}
if idx == 0:
media_item_data['caption'] = 'Ваш текст здесь'
media.append(media_item_data)
# Отправка медиагруппы
for admin in admins:
if media:
bot.send_media_group(admin.telegram_id, media)
sleep(1)
bot.send_message(manager_chat_id, "Медиагруппа отправлена админам.")
Пример исправленного кода:
def process_photo(message, task_id, manager_chat_id):
try:
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,
}
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, "Медиагруппа отправлена админам.")
# Обработка одиночного фото
elif message.photo:
# Отправляем только самое лучшее фото
first_photo = message.photo[-1] # Лучшее качество
for admin in admins:
bot.send_photo(admin.telegram_id, first_photo.file_id)
sleep(1)
bot.send_message(manager_chat_id, "Фото отправлены админам.")
else:
bot.send_message(manager_chat_id, "Фото или медиагруппа не были найдены.")
except Exception as e:
logger.error(f"Ошибка при обработке фотографии или медиагруппы для задачи {task_id}: {e}")
bot.send_message(manager_chat_id, "Произошла ошибка при обработке фото или медиагруппы.")
Важные моменты:
В случае одиночного фото выбирайте только самое лучшее фото, которое имеет наибольшее разрешение (по индексу -1).
В случае медиагруппы вы правильно собираете и отправляете все фото в группе, но внимательно следите за их количеством и корректностью.
Также убедитесь, что ваш бот правильно обрабатывает различные варианты данных, которые могут прийти с фотографиями.
Обработка медиагруппы (если в сообщении есть атрибут media_group).
Обработка одиночных фото (если есть атрибут photo).
Потенциальные проблемы и предложения:
Отправка фотографий 4 раза: Возможно, проблема кроется в том, как вы отправляете фотографии для одиночных фото. В цикле по message.photo вы отправляете каждый элемент (который может быть несколько раз разрешен Telegram API с разными размерами), что может привести к многократной отправке одних и тех же фото.
Решение: Если это одиночное фото (не медиагруппа), попробуйте отправлять только первое фото (или лучше обрабатывать их, если оно несколько раз пришло в разных разрешениях).
Модифицируйте блок обработки одиночного фото:
Здесь я выбрал message.photo[-1], так как Telegram отправляет фото в нескольких размерах, и последним идет самое лучшее по качеству.
Логика обработки медиагруппы: Код для обработки медиагруппы выглядит нормальным, но есть небольшой нюанс: если media_group не является пустым, вы отправляете все фото одновременно. Однако если возникнут какие-то проблемы с первой фотографией, она может не попасть в группу. Убедитесь, что все фотографии из медиагруппы действительно добавляются в список и корректно отправляются.
В принципе, логика отправки медиагруппы выглядит правильной:
Пример исправленного кода:
Важные моменты:
В случае одиночного фото выбирайте только самое лучшее фото, которое имеет наибольшее разрешение (по индексу -1).
В случае медиагруппы вы правильно собираете и отправляете все фото в группе, но внимательно следите за их количеством и корректностью.
Также убедитесь, что ваш бот правильно обрабатывает различные варианты данных, которые могут прийти с фотографиями.