4.3 KiB
Why
Пользователь опубликовал несколько постов через веб-approve в канал @dedinit_vesti и увидел, что в канале пост выглядит «как простой агрегатор»:
- только ссылка на чужой канал (заголовок-сниппет из первых 120 символов текста),
- служебная информация по направлениям (📁 направление/язык, 📰 источник, 👁 просмотры),
- в конце Telegram добавляет предпросмотр ссылки (link preview).
Такой репост никому не интересен: не видно ни медиа из оригинального поста, ни полного текста, ни комментария модератора — только «голая» ссылка и служебка.
What Changes
Формат публикуемого поста (карточка) меняется на «богатый репост»:
-
Медиа из оригинального поста — если у поста есть media_path (фото/видео), оно отправляется первым сообщением (sendPhoto/sendVideo), а текст — следующим. Сейчас sendPhoto есть, но caption обрезается до 1024 и текст дублируется вторым сообщением; видео (content_type=video) вообще не отправляется как медиа (фильтр в card.py).
-
Полный текст поста — вместо сниппета из первых 120 символов (make_card) или summary отправляется полный текст исходного поста (обрезанный до Telegram-лимита 4096).
-
Комментарий модератора — в веб-форме approve добавляется поле «Комментарий (по желанию)»; комментарий публикуется первым (или в начале текста), чтобы в канале было видно мнение/контекст редактора, а не только пересказ.
-
Ссылка на оригинал БЕЗ предпросмотра — ссылка на исходный пост остаётся в тексте, но Telegram-предпросмотр ссылки отключается (sendMessage параметр
link_preview_options={"is_disabled": True}), чтобы канал не выглядел как агрегатор ссылок с превью. -
Служебная информация — частично убирается/переформатируется: направление/язык, источник, просмотры больше НЕ обязательны в теле поста (внешняя ссылка на оригинал уже даёт контекст). Остаётся атрибуция для своего контента («Дед в АйТи»).
Impact
publisher/card.py— построение текста карточки (полный текст + комментарий + ссылка- атрибуция, служебка по минимуму).
services/publisher/app/telegram.py— поддержка видео (sendVideo), параметрlink_preview_optionsдля sendMessage; send_photo с полным caption без обрезания (или без дублирования текста).services/publisher/app/main.py— Card модель: +comment; передача link_preview_options.web/app.py(approve) — чтение комментария из формы, проброс в card.web/templates/candidates.html— поле ввода комментария в форме approve.publisher/card.py— фильтр медиа: разрешить video (mp4), не только картинки.- Rollback: вернуть прежний make_card и вызовы; карточки станут как раньше.
- Безопасность: комментарий — пользовательский ввод → HTML-экранирование как текст поста.