Aleksei Pavlov a09ee4a5fb refactor(tg): единый модуль tgSend для всех публикаций в Telegram
Проблема: scheduledPostsRunner (статьи) и zeroNotesRunner (заметки Зеро)
держали каждый свою копию sendPhoto/sendMessage. Логика разъезжалась —
у статей фото работало через multipart, у заметок ломалось (URL-режим →
'wrong type of web page content'). Чинили в одном месте — в другом
оставалось сломано.

Решение: src/services/tgSend.js — единый источник правды:
  - resolveLocalPhoto: /uploads/* → локальный файл (multipart), внешний → URL
  - tgSend({botToken, chatId, text, photoUrl, replyMarkup, parseMode}):
      фото+caption<=1024 → sendPhoto (multipart для локальных, URL для внешних)
      иначе → sendMessage (текст<=4096)
  - extractTgError: единый разбор ошибок Telegram

zeroNotesRunner и scheduledPostsRunner.publishToTelegram теперь оба зовут
tgSend. Кнопка-на-сайт у статей и reply_markup у заметок сохранены.
parseMode: статьи — Markdown, заметки Зеро — без разметки (текст от первого
лица с произвольными символами не должен падать на parse entities).

VK/MAX публикация не затронута (там свой resolveLocalPhoto/FormData).
2026-06-20 10:43:50 +03:00
2026-05-30 18:27:07 +00:00

zeropost-engine

ZeroPost - zeropost-engine

S
Description
ZeroPost - zeropost-engine
Readme 953 KiB
Languages
JavaScript 100%