не могу понять как отправить фото с текстом

import telebot
import logging
import time
import os

# Настройка логирования
logging.basicConfig(level=logging.DEBUG, filename='bot_log.txt',
                    format='%(asctime)s - %(levelname)s - %(message)s')

# Замените "YOUR_TOKEN" на ваш токен API
bot = telebot.TeleBot('000000000000000000000000000')

# Имя файла для хранения ID групп
GROUP_IDS_FILE = 'group_ids.txt'

# Список групп, в которые добавлен бот
group_ids = []

# Загружаем ID групп из файла при запуске бота
if os.path.exists(GROUP_IDS_FILE):
    with open(GROUP_IDS_FILE, 'r') as f:
        group_ids = [ (line.strip()) for line in f]

@bot.message_handler(commands=['start'])
def start(message):
    bot.send_message(message.chat.id, "Привет! Я бот для рассылки сообщений.")

@bot.message_handler(content_types=['new_chat_members'])
def handle_new_chat_members(message):
    logging.debug(f"New chat members: {message}")
    for member in message.new_chat_members:
        logging.debug(f"Member ID: {member.id}, Bot ID: {bot.get_me().id}")
        if member.id == bot.get_me().id:
            # Бот добавлен в группу
            group_ids.append(message.chat.id)
            logging.info(f"Бот добавлен в группу {message.chat.id}")
            logging.debug(f"Group IDs: {group_ids}")
            # Сохраняем ID группы в файл
            with open(GROUP_IDS_FILE, 'a') as f:
                f.write(str(message.chat.id) + 'n')
            # Проверяем права бота (только для информационных целей)
            try:
                chat_member = bot.get_chat_member(chat_id=message.chat.id, user_id=bot.get_me().id)
                logging.info(f"Права бота в группе {message.chat.id}: {chat_member.status}")
            except Exception as e:
                logging.error(f"Ошибка получения информации о правах бота: {e}")

            bot.send_message(message.chat.id,
                             "Привет! Я бот для рассылки сообщений. Чтобы отправить сообщение в эту группу, используйте команду /send.")

@bot.message_handler(commands=['send'])
def send_message_to_groups(message):
    # Получаем текст сообщения
    message_text = message.text[6:]  # Убираем команду /send

    # Проверяем, есть ли фото в сообщении
    if message.photo:
        # Получаем ID фото с максимальным разрешением
        photo_file_id = message.photo[-1].file_id

    logging.info(f"Список групп: {group_ids}")

    # Отправляем сообщение в каждую группу из списка
    for group_id in group_ids:
        try:
            if message.photo:
                # Отправляем фото и сообщение
                bot.send_photo(chat_id=group_id, photo=photo_file_id , caption=message_text)
                logging.info(f"Фото и сообщение отправлены в группу {group_id}")
            else:
                # Отправляем только текст
                bot.send_message(chat_id=group_id, text=message_text)
                logging.info(f"Сообщение отправлено в группу {group_id}")
            time.sleep(1)
        except Exception as e:
            logging.error(f"Ошибка отправки сообщения в группу {group_id}: {e}")
            bot.send_message(message.chat.id, "Произошла ошибка при отправке сообщения.")

    # Отправляем сообщение пользователю о завершении рассылки
    bot.send_message(message.chat.id, "Сообщение отправлено в группы!")

@bot.message_handler(commands=['send'])
def send_message_to_groups(message):
    # Получаем текст сообщения
    message_text = message.text[6:]  # Убираем команду /send

    # Проверяем, есть ли фото в сообщении
    if message.photo:
        # Получаем ID фото с максимальным разрешением
        photo_file_id = message.photo[-1].file_id
        print(f"ID фото: {photo_file_id}")

    logging.info(f"Список групп: {group_ids}")
    print(f"Список групп: {group_ids}")

    # Отправляем сообщение в каждую группу из списка
    for group_id in group_ids:
        try:
            print(f"Отправляем в группу {group_id}")
            if message.photo:
                # Отправляем фото и сообщение
                bot.send_photo(chat_id=group_id, photo=photo_file_id, caption=message_text)
                logging.info(f"Фото и сообщение отправлены в группу {group_id}")
            else:
                # Отправляем только текст
                bot.send_message(chat_id=group_id, text=message_text)
                logging.info(f"Сообщение отправлено в группу {group_id}")
            time.sleep(1)
        except Exception as e:
            logging.error(f"Ошибка отправки сообщения в группу {group_id}: {e}")
            bot.send_message(message.chat.id, "Произошла ошибка при отправке сообщения.")

    # Отправляем сообщение пользователю о завершении рассылки
    bot.send_message(message.chat.id, "Сообщение отправлено в группы!")

bot.polling()

Ответы (1 шт):

Автор решения: AnnaBazueva

Фильтр commands=['send'] анализирует только контент типа — message.text,
a если отправить фото с подписью: "/send описание фото..." — фильтр команд просто не сработает.
Т.к., эта строчка содержится в другом атрибуте сообщения: message.caption.

Попробуйте так:

@bot.message_handler(content_types=['photo'])
def handle_send_photo(message):
    # Получаем текст сообщения

    message_text = message.caption[6:]  # Убираем команду /send
    # Проверяем, есть ли фото в сообщении
    photo_file_id = None
    if message.photo:
        # Получаем ID фото с максимальным разрешением
        photo_file_id = message.photo[-1].file_id
    # Отправляем сообщение в каждую группу из списка
    for group_id in group_ids:
        try:
            bot.send_photo(chat_id=group_id, photo=photo_file_id, caption=message_text)
        except Exception as e:
            logging.error(f"Ошибка отправки сообщения в группу {group_id}: {e}")
            bot.send_message(message.chat.id, "Произошла ошибка при отправке сообщения.")
→ Ссылка