не могу понять как отправить фото с текстом
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, "Произошла ошибка при отправке сообщения.")