Отправка поста в канал и написание комментария через Telebot python

Цель: автоматизировать процесс публикации поста в Telegram-канале и ответа на его пересланную копию в отдельном чате(обсуждении канала). Это может пригодиться для модерации, обсуждения контента или организации обратной связи. Искал информацию в интернете как сделать чтобы бот(Telebot) писал комментарии под постом, но не нашел.
Для корректной работы бота необходимо:
Получить ID основной группы
Получить ID обсуждения канала
⚠️ Обсуждение должно быть привязано к группе, иначе бот не сможет реагировать на пересланные сообщения. Чтобы убедиться, что обсуждение подключено, откройте меню канала (три точки) и проверьте наличие опции «Просмотреть обсуждение».
Для чего это нужно?
Чтобы сразу отправлять правила чата в обсуждение поста
Добавлять дополнительную информацию
Возможность персонализированных комментариев и многое другое

Вот пример кода который я сделал:
import telebot
import time
TOKEN = 'TOKEN'
GROUP_ID = -11111111
CHAT_ID = -1111111111
bot = telebot.TeleBot(TOKEN, parse_mode="HTML")
# Хранилище ID сообщения из канала
forwarded_message_id = None
def send_post_with_photo(bot, caption, photo_paths, comment):
global forwarded_message_id
# Первый пост в канал
with open(photo_paths[0], 'rb') as first_photo:
msg = bot.send_photo(GROUP_ID, first_photo, caption=caption)
original_msg_id = msg.message_id
print(f"Отправлено в канал. Ждём пересланное сообщение с ID {original_msg_id}...")
# Ожидаем появления пересланного сообщения в чате
for _ in range(30): # 30 секунд таймаут
updates = bot.get_updates(offset=-1)
for update in updates:
if update.message:
msg = update.message
if msg.chat.id == CHAT_ID and msg.forward_from_chat and msg.forward_from_message_id == original_msg_id:
forwarded_message_id = msg.message_id
print(f"Пересланное сообщение найдено: {forwarded_message_id}")
break
if forwarded_message_id:
break
time.sleep(1)
if not forwarded_message_id:
print("Пересланное сообщение не найдено.")
return
# 📎 Ответ медиагруппой
media_group = []
for index, photo in enumerate(photo_paths[1:5], start=1):
if index == 1:
media_group.append(telebot.types.InputMediaPhoto(open(photo, 'rb'), caption=comment))
else:
media_group.append(telebot.types.InputMediaPhoto(open(photo, 'rb')))
bot.send_media_group(chat_id=CHAT_ID, reply_to_message_id=forwarded_message_id, media=media_group)
# Запуск
photo_paths = ["photo1.jpg", "photo2.jpg", "photo3.jpg", "photo4.jpg", "photo5.jpg"]
caption = "Новый пост в канале"
comment = "Comment"
send_post_with_photo(bot, caption, photo_paths, comment)
Как работает бот:
Открывается первый файл из
photo_paths
Отправляется фото с заголовком в канал по
GROUP_ID
Сохраняется
message_id
этого сообщения — он нужен позже для поиска пересланного варианта
for _ in range(30):
updates = bot.get_updates(offset=-1)
...
Бот в течение 30 секунд запрашивает новые обновления
Ищет сообщение в
CHAT_ID
, которое было переслано из канала и имеетforward_from_message_id
, совпадающий с оригинальнымЕсли находит — сохраняет
message_id
пересланного сообщения
bot.send_media_group(chat_id=CHAT_ID, reply_to_message_id=forwarded_message_id, media=media_group)
Формируется медиагруппа из оставшихся фото
Первое фото в группе получает ответ
comment
какcaption
, остальные — просто изображенияМедиагруппа отправляется в чат, в ответ на пересланное сообщение, как полноценный комментарий
Итог
Ты получаешь:
Оригинальный пост в канале
Автоматический ответ бота в чате, привязанный к пересланному сообщению