mirror of
https://gitverse.ru/kpa39l/vesti.git
synced 2026-09-29 18:05:03 +00:00
50 lines
4.3 KiB
Markdown
50 lines
4.3 KiB
Markdown
## Why
|
||
|
||
Пользователь опубликовал несколько постов через веб-approve в канал @dedinit_vesti
|
||
и увидел, что в канале пост выглядит «как простой агрегатор»:
|
||
|
||
- только ссылка на чужой канал (заголовок-сниппет из первых 120 символов текста),
|
||
- служебная информация по направлениям (📁 направление/язык, 📰 источник, 👁 просмотры),
|
||
- в конце Telegram добавляет предпросмотр ссылки (link preview).
|
||
|
||
Такой репост никому не интересен: не видно ни медиа из оригинального поста, ни
|
||
полного текста, ни комментария модератора — только «голая» ссылка и служебка.
|
||
|
||
## What Changes
|
||
|
||
Формат публикуемого поста (карточка) меняется на «богатый репост»:
|
||
|
||
1. **Медиа из оригинального поста** — если у поста есть media_path (фото/видео),
|
||
оно отправляется **первым сообщением** (sendPhoto/sendVideo), а текст — следующим.
|
||
Сейчас sendPhoto есть, но caption обрезается до 1024 и текст дублируется вторым
|
||
сообщением; видео (content_type=video) вообще не отправляется как медиа (фильтр в card.py).
|
||
|
||
2. **Полный текст поста** — вместо сниппета из первых 120 символов (make_card) или
|
||
summary отправляется полный текст исходного поста (обрезанный до Telegram-лимита 4096).
|
||
|
||
3. **Комментарий модератора** — в веб-форме approve добавляется поле «Комментарий
|
||
(по желанию)»; комментарий публикуется первым (или в начале текста), чтобы в канале
|
||
было видно мнение/контекст редактора, а не только пересказ.
|
||
|
||
4. **Ссылка на оригинал БЕЗ предпросмотра** — ссылка на исходный пост остаётся в тексте,
|
||
но Telegram-предпросмотр ссылки отключается (sendMessage параметр
|
||
`link_preview_options={"is_disabled": True}`), чтобы канал не выглядел как агрегатор
|
||
ссылок с превью.
|
||
|
||
5. **Служебная информация** — частично убирается/переформатируется: направление/язык,
|
||
источник, просмотры больше НЕ обязательны в теле поста (внешняя ссылка на оригинал
|
||
уже даёт контекст). Остаётся атрибуция для своего контента («Дед в АйТи»).
|
||
|
||
## 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-экранирование как текст поста. |