Files
jellybit/docs/research/torrent-bot-message.md
T
av 66d39297c5 docs: проект переведён на канон документов версии 4
- каталог задач: PLAN.md → ROADMAP.md с каноническими секциями, все 44
  записи получили тип, заголовки приведены к форме своего типа
- расхождения, найденные судьями канона: исключения инварианта «источник
  неприкосновенен», инвариант про один активный infohash, UTC в logging.md,
  поведение из architecture.md заменено ссылками на спеки
- триггеры профиля ревью переписаны под умолчание standard
2026-08-06 13:32:06 +03:00

5.9 KiB
Raw Blame History

Формат сообщения торрент-бота

Основной способ добавления загрузки — переслать в jellybit сообщение стороннего торрент-бота (exfreedomist, поиск по rutracker и соседним трекерам). Из сообщения берутся источник (magnet) и контекст для распознавания. Формат чужой, ничем не документирован и может измениться без предупреждения.

Провенанс. Образец снят вручную из личного чата Telegram (сообщение датировано 2026-03-21) и зафиксирован в [BRIEF.md] проекта; второй образец, меньшего размера, живёт константой botMessage в internal/tgbot/parse_test.go и проверяется тестами разборщика. Статистики по вариантам формата нет — наблюдений всего два, и это условие, а не замер.

[BRIEF.md]: перенесён в ../passport.md; полный текст образца — ниже и в истории git.

Образец

[1] #6514485 [rutracker], 2026-03-21 (https://hashurl.ru/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…):
Дюна: Часть вторая / Dune: Part Two (Дени Вильнёв / Denis Villeneuve) [2024, США, Канада, фантастика, WEB-DL 2160p, HDR10+, Dolby Vision] Dub (Bravo Records Georgia, RHS, Jaskier, HDrezka) + MVO (LostFilm, TVShows, Jaskier) + AVO (Сербин, Яроцкий) + (Ukr) + Original (Eng) + Sub (Rus, Eng, Ukr)

✅ (проверено) | 34.82 GB

magnet:?xt=urn:btih:541ADCFF3B6DD5DBA7088EA83317D9D6FAC331D6&tr=http%3A%2F%2Fbt.t-ru.org%2Fann%3Fmagnet&dn=rutracker-topic-6514485

Открыть magnet в вашем клиенте  (https://hashurl.ru/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…)
или получить .torrent: /tr_5c054

Оцените раздачу:
👍: /g_eabdce или 👎🏿: /r_eabdce

[список файлов] (https://download.exfreedomist.com/files/541ADCFF3B6DD5DBA7088EA83317D9D6FAC331D6)

Следить: /us_5c054
Добавить в закладки: /mka_96423

cправка: /help, index (https://exfreedomist.com/stats/)

Что из этого наблюдается

  • Заголовок строки 1 — порядковый номер выдачи, #<topic-id>, имя трекера в квадратных скобках, дата раздачи и ссылка-редирект hashurl.ru с JWT в пути. Токен в ссылке имеет срок жизни (exp в payload) — как долгоживущий идентификатор он не годится.
  • Строка описания — самый ценный кусок: локализованное название, оригинальное название через /, режиссёр в скобках (тоже через /), затем блок в квадратных скобках [год, страны, жанры, качество, HDR…] и перечисление дорожек и субтитров. Именно она уходит контекстом в распознавание.
  • Разделитель / используется одновременно для пары «локализованное / оригинальное» и для пары «имя режиссёра кириллицей / латиницей». По позиции они не различаются — только по тому, что вторая пара стоит в скобках.
  • magnet отдельной строкой, с dn=rutracker-topic-<id> — то есть dn здесь не содержит названия фильма и как имя раздачи бесполезен. Инфохэш в magnet — v1, uppercase hex; нормализуем в lowercase.
  • .torrent не приложен — предлагается командой бота (/tr_…), то есть вторым шагом в чужом чате. Поэтому источник, приходящий этим путём, — практически всегда magnet.
  • Размер раздачи в человекочитаемом виде (34.82 GB) и отметка « (проверено)».
  • Команды бота (/g_…, /r_…, /us_…, /mka_…, /help) и ссылка на список файлов — шум для распознавания, но безвредный: попадают в контекст как есть.
  • Весь текст — недоверенный вход: он полностью составляется чужим ботом по данным трекера и уезжает в промпт LLM. См. ../security.md.

Чего не знаем

  • Насколько формат стабилен: наблюдений два, оба от одного бота, разница между ними — только в наличии строки «сохранённая копия описания раздачи».
  • Как выглядит сообщение для сериала-сезонника и для аниме — образцов не снимали, а именно на них строится самый сложный случай раскладки.
  • Что бот присылает при неудачном поиске и при слишком длинном описании (лимит Telegram на текст сообщения — 4096 символов UTF-16, по документации Bot API sendMessage; сами обрезанные сообщения мы не наблюдали, поведение бота на обрезке неизвестно).