Задать вопрос
  • Как отправить несколько фото через телеграм-бот?

    @pavlik321
    Проблема может быть связана с тем, как вы обрабатываете фотографии в медиагруппе и одиночные фотографии. В вашем коде есть две основные части для отправки фото:

    Обработка медиагруппы (если в сообщении есть атрибут 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).
    В случае медиагруппы вы правильно собираете и отправляете все фото в группе, но внимательно следите за их количеством и корректностью.
    Также убедитесь, что ваш бот правильно обрабатывает различные варианты данных, которые могут прийти с фотографиями.
    Написано
  • Как открыть Android приложение на Linux без wayland?

    @pavlik321 Автор вопроса
    rPman, google-android-tools-installer позволяет не устанавливать SDK, или как?
    Написано
  • Имитация работы на ПК (клавиатура и мышь) с помощью скрипта на Python (примеры)?

    @pavlik321
    Не должен, если немного зашумлять движения мыши, и рандомизировать скорость ввода
    Написано
  • IP-адреса устройств(модемов), пк и провайдера?

    @pavlik321
    Lis25, Если ответ решает вопрос, Вы можете отметить его решением
    Написано
  • Что будет если сделать 2 одинаковых домена в разных зонах?

    @pavlik321
    Если ввести com.ru, то он перенаправит тебя на другой сайт: https://faitid.org/, что-то все остальные сайты продолжают работать
    Написано
  • Где найти очные курсы по программированию микроконтроллеров, и прочим необходимым для этого навыкам в СПБ?

    @pavlik321
    Большая часть людей микроконтроллеры и не только их, изучает по интернету самостоятельно, поэтому желание и научиться, и людей найти - не получится
    Написано