| Сводка | Всё на JTech Forums работает поверх Discourse в одном плагине: инструменты модератора, шёпоты выбранным людям, REQ-PM, Dumbcourse, мост с Telegram, списки в темах продаж, умный поиск, всплывающие окна и вся наша тема оформления. У каждого элемента есть свой переключатель. | |
| Репозиторий | GitHub - TripleU613/JtechTools: The plugin behind JTech Forums: moderator tools and whispers, REQ-PM, Dumbcourse for flip phones, a Telegram bridge, sale-thread listings, smart search, pop-ups and the JTech theme. Every module has its own switch. · GitHub | |
| Гид по установке | Как установить плагины в Discourse |
Всем привет,
Часть из этого уже обсуждалась на Meta по отдельности. Dumbcourse получил свою тему ещё в феврале, @ars18 опубликовал Mini-mod в апреле, а в августе я оставил долгий ответ в теме Dumbcourse, перечисляя всё остальное, что мы втиснули в один плагин. Это заслуживало лучшего, чем быть похороненным в 38-м посте, поэтому вот правильная версия. В этот раз с большим количеством картинок.
JTech — это форум о технологиях, в основном о телефонах, раскладушках, фильтрах и прошивках, и многие наши участники намеренно используют телефоны с клавиатурой. Каждый инструмент здесь существует, потому что наш собственный форум в нём нуждался.
«Почему это один плагин?»
merefield задал этот вопрос в теме Dumbcourse, и это справедливый вопрос, поэтому вот ответ сразу.
- У каждого модуля есть свой переключатель вкл/выкл. Некоторые включены по умолчанию (Dumbcourse, REQ-PM, инструменты модератора), другие ждут вашего решения (Mini-mod, умный поиск, Disteleplus, Another SMTP), а некоторые из «включённых» ничего не делают, пока вы не укажете на них категорию или тему. После установки пройдите по вкладкам и отключите то, что вам не нужно.
jtech_enabledостанавливает всё разом, включая изменения разрешений и фоновые задачи. @satonotdead, вы спросили в теме Mini-mod, почему Mini-mod продолжал работать после того, как вы отключили пакет. Вы были правы, так и было: код, внедрённый в ядро, и запланированные задачи проверяли только собственный переключатель. Это исправлено с 24 сентября. Теперь каждый модуль проверяет и главный переключатель.- Отключение ничего не утекает. Например, отключение шёпотов не делает существующий шёпот публичным.
- Каждый модуль поддерживается отдельно внутри: свой файл в
sub_plugins/, своя вкладка настроек, своя страница документации. Если вам нужна только одна вещь, форкните её и выделите отдельно, пожалуйста. Старый отдельный репозиторий Mini-mod заархивирован, и теперь он поддерживается здесь.
Что внутри
Каждый раздел свёрнут, поэтому раскрывайте то, что кажется интересным. Каждая картинка — это реальный экран с нашего форума, если не указано иное. Конфиденциальная информация (чат персонала, контактные данные, заметки модераторов) размыта.
Dumbcourse: весь форум на раскладушке
Весь форум по адресу /dumb, для раскладушек, KaiOS и старых браузеров Android, которые не могут запустить обычный сайт. Он управляется D-pad и клавиатурой, как собственные приложения телефона, и всё ещё работает с сенсорным экраном и мышью.
- Чтение: Latest, New, Unread, Top, Hot, категории и теги. ↑↓ листает (долгий пост прокручивается, прежде чем фокус сместится), ←→ переключает вкладки, непрочитанные темы открываются на вашем первом непрочитанном посте, а Back возвращает вас ровно туда, откуда вы пришли.
- Действия: OK на посте открывает лайк, реакцию, ответ, цитату, закладку, редактирование, флаг, копирование ссылки, все ссылки в посте, спойлеры и его изображения. Есть полноэкранный редактор с упоминаниями, эмодзи, загрузками, предпросмотром и опциональной проверкой орфографии (LanguageTool).
- Клавиши:
*меню,#поиск,0справка,3ответ,5лайк,2/8страница вверх и вниз. Телефоны, которые странно называют свои мягкие клавиши, можно научить этому в Настройках. - Вход без ввода пароля на клавиатуре: подтвердите телефон с устройства, на котором вы уже вошли, или используйте ссылку или код по электронной почте. Социальные входы и 2FA тоже работают.
- Старые браузеры находят его сами. Браузер, который не может запустить полный форум, перенаправляется на соответствующую страницу Dumbcourse, включая ссылки из писем. Поисковые системы не перенаправляются.
Это чистый ES5, и CI проверяет, что он продолжает работать на Chrome 30, Firefox 30 и Android 4.4.
Поскольку в прошлый раз всплыл вопрос о названии: путь — это настройка (dumbcourse_base_path), так что /simple или /lite — в одном изменении.
У нас также есть приложение для Android, которое оборачивает Dumbcourse для телефонов с клавиатурой, с push-уведомлениями. Оно настроено для нашего форума, но код есть, если вы хотите собрать своё. Наши участники активно его тестировали в теме приложения (более 450 ответов) и в последнем большом обновлении.
Инструменты модератора: шёпоты выбранным людям, частные заметки, оповещения персонала
Шёпот и заметка в среднем ряду из нашей документации, с вымышленными пользователями. Остальное — реальный интерфейс.
Шёпоты конкретным людям. Люди просили об этом на Meta годами (позволить автору поста видеть шёпот, шёпоты для групп, кроме персонала). Отвечайте внутри темы только нескольким пользователям, группе или всем, имеющим значок. Видеть это могут только персонал, автор и эти люди. Это не отображается нигде else: не в поиске, активности, письмах, уведомлениях, предпросмотре ссылок, RSS, Dumbcourse или мосте Telegram. Ответы на шёпот автоматически остаются частными для тех же людей, и шёпот никогда не поднимает тему для других. Персонал может превратить существующий пост в шёпот или обратно, и каждое изменение попадает в журнал персонала.
Частные заметки. Частная заметка персонала на теме, с веткой ответов и строкой «просмотрено». Новые заметки отображаются в колокольчике и во вкладке щита в меню пользователя, но только для персонала, который действительно может видеть эту тему.
Оповещения персонала. Получайте уведомления, когда другой член персонала удаляет пост, одобряет или отклоняет пост в очереди или добавляет заметку к пользователю или флагу. У каждого типа есть свой переключатель.
Чек-листы и инструменты темы. Чек-лист, который новые участники отмечают перед первым постом (с журналом того, кто принял какую версию), чек-листы для конкретных пользователей или привязанные к одной теме, сообщение в футере под темой, закреплённый пост, скопированный вниз, одобрение ответов для одной темы, заметка «перед тем как постить» для каждой категории и выборщик значков для добавления всех со значком в ЛС.
Правило для всего этого: модераторы не видят всё. Инструмент никогда не показывает модератору ЛС или ограниченную категорию, которую ядро не показало бы ему, а оповещения уходят только персоналу, который может открыть то, на что они указывают.
REQ-PM: контактные данные вместо личных сообщений
На нашем форуме нет личных сообщений, намеренно. Так как же два участника связываются? Они просят друг у друга контактные данные. (Наша тема запуска, если хотите увидеть, как участники это приняли.)
-
Нажмите REQ-PM на карточке пользователя, отметьте то, что хотите (телефон, WhatsApp, email, Telegram, Signal…), и отправьте. Нет поля для текста, поэтому это не может стать задними дверями для сообщений.
-
Они отмечают точно, какие данные вы получаете. Любая сторона может забрать то, что поделилась, в любое время, молча. Отказ тоже молчалив: тот, кто спросил, видит только «ожидание», а затем «истекло».
-
/reqpmхранит ваши запросы, ваши контакты (с кнопками Позвонить / Написать / Чат), вашу собственную карточку и с кем вы делились. -
Приватность: значения шифруются при хранении (AES-256-GCM) и возвращаются только их владельцу и тем людям, которых выбрал владелец. Нет админ-экрана для них, и конечные точки отклоняют API-ключи и имперсонацию.
Формат списков: темы продаж, которые остаются аккуратными
Реальное объявление из нашей темы продаж телефонов и компьютеров.
У нас есть одна большая тема «телефоны и компьютеры на продажу», и раньше это был хаос из «ещё в наличии?» и «напишите в ЛС». Теперь, в выбранных вами темах, каждый пост должен быть объявлением в формате темы, иначе он отклоняется (с причиной) до сохранения.
- Участники получают кнопку Создать объявление вместо Ответить. Она открывает форму с полем для каждого раздела (товар, количество, состояние, характеристики, самовывоз или доставка), вариантами выбора состояния и обычным редактором для изображений и заметок.
- Объявления отображаются как карточки, как на картинке выше. Продавец (или персонал) может пометить одно как проданное, и тогда оно бледнеет и зачёркивается.
- Нет ссылок на другие сайты. Номера телефонов и email в порядке, и покупатели используют кнопку REQ-PM продавца вместо ответа.
- Персонал освобождён, и старые посты не трогаются.
Disteleplus: чат персонала, связанный в обе стороны с Telegram
Это выросло во целое дело. Не у всего нашего персонала было (или хотелось) WhatsApp, и не у всех был Telegram. Так что: однокомнатный чат внутри Discourse, который зеркалится в обе стороны с группой Telegram.
- В Discourse: панель или полная страница с ответами, правками, реакциями, голосовыми заметками, опросами, файлами, упоминаниями, поиском, предпросмотром ссылок и индикаторами набора текста. Текст сообщений шифруется в базе данных. Не требует официального плагина Chat.
- В Telegram: связанные люди публикуются под своим форумным аккаунтом, а все остальные отображаются под своим именем Telegram. Опционально можно анонсировать новые посты форума в группу и зеркалировать очередь проверки в тему Reports с кнопками Одобрить / Отклонить, которые работают для персонала прямо там в Telegram.
- Настройка занимает около пяти минут: создайте бота через
@BotFather, добавьте его в группу как админа, вставьте токен, нажмите Register webhook.
Если вам нужно связать каналы Discourse Chat с Telegram, посмотрите Discourse-Telegram chat bridge или Discourse Chat Bridge (Telegram) вместо этого. Наш — одна комната персонала, без Chat.
Тема JTech (поставляется с плагином)
Собственная тема нашего форума теперь поставляется с плагином. Пересборка устанавливает её и держит в актуальном состоянии, но она никогда не становится по умолчанию. Вы включаете её сами в Customize → Themes.
Она чёрно-белая, с тонкими границами, скруглёнными углами и шрифтом Geist. Светлая и тёмная темы — точные противоположности, а есть более мягкая JTech Dim для тех, кому OLED-чёрный кажется слишком резким.
- Карточки тем вместо строк таблицы, с первой картинкой рядом с заголовком и Quick look для чтения темы, не покидая списка.
- Командное меню по ⌘K / Ctrl+K, которое перескакивает на страницы, категории, темы и людей, с перечислением горячих клавиш рядом с каждой командой.
- Баннер на главной странице с планетой из точек, которая вращается, следует за вашей мышью и остаётся неподвижной для тех, кто запросил уменьшенное движение на своём устройстве. Плюс переработанные шапка, боковая панель, профили, карточки пользователей, страница входа и страница «О нас».
- Она заменяет около дюжины компонентов темы, которые мы раньше запускали, теперь каждый из них — настройка: режим чтения, оглавление для гайдов, кнопка печати/PDF, QR-код в Share, голосовые сообщения из редактора, значки постов, кнопка Copy-as-Markdown, фильтр ответов, поиск из выделенного текста, предупреждение об ответе в закрытой теме и многое другое. Наш форум теперь работает с нулём компонентов темы.
- Мы потратили глупое количество времени на доступность: контраст WCAG AA для серого текста во всех трёх палитрах, видимые кольца фокуса на каждом контроле, более крупные области касания на телефонах, режим высокого контраста Windows, языки справа налево и телефоны шириной 320px.
Помельче: Mini-mod, Dislike, умный поиск, всплывающие окна, Another SMTP, переводчик
Всплывающие окна на рабочем столе (из нашей документации, вымышленные пользователи).
- Mini-mod. Несколько дополнительных прав для людей, которые модерируют одну категорию через группу: создание и редактирование категорий, перемещение тем, теги. У каждого права есть свой переключатель, и ни одно из них не выходит за рамки того, что этот человек уже может видеть. Это также может забирать права, например, повторное открытие закрытых тем. В оригинальной теме @ars18 больше, и вот такой запрос на который он отвечает.
- Dislike. В выбранных вами категориях лайки перестают учитываться: нет уведомления, нет истории «полученных лайков», и они не учитываются на лидерборде. Вы также можете полностью скрыть кнопку там или разрешить лайкать только некоторым группам.
- Умный поиск. Когда поиск находит почти ничего, он тихо пробует снова с синонимами, так что «k8s» находит «kubernetes», а «js» находит «javascript». Он использует WordNet плюс небольшой список технического жаргона, работает в процессе без API-ключей, сохраняет все фильтры и разрешения, и возвращается к обычному поиску, если что-то пойдёт не так.
- Всплывающие окна на рабочем столе. Маленькая карточка в углу, когда приходит уведомление. Каждый участник подключается сам, оно тихо во время «Не беспокоить» и работает с клавиатурой и скринридером.
- Another SMTP. Отправлять почту форума через другой почтовый сервер, чем тот, что в
app.yml, настраивается из админки. - Правки переводчика. Для сайтов, всё ещё использующих старый плагин discourse-translator с Google: направить его запросы на ваш собственный прокси.
Установка
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/TripleU613/JtechTools.git jtech-tools
Сохраняйте имя папки jtech-tools, в нижнем регистре. Discourse строит URL таблицы стилей из него.
Затем пересоберите и перейдите в Admin → Plugins → Jtech Tools. Есть одна вкладка на модуль, и страница документации каждого модуля говорит, что настроить первым.
Мы отслеживаем main на Discourse 2026.8 и новее, а .discourse-compatibility фиксирует старые версии. В CHANGELOG указано, что изменилось и что стоит проверить после обновления.
Честность
Мы — админ-команда форума, а не магазин Discourse. Значительная часть этого была создана с помощью ИИ. То, что делает меня уверенным в том, чтобы делиться этим, — это защитные ограждения: правила в репозитории, которым должен следовать каждый изменения (сначала разрешения, никогда не выходить за рамки того, что разрешает ядро, ничего, что ядро уже делает), около 1700 тестов в 119 файлах спецификаций, которые запускаются на каждом PR, и большая часть этого работает на нашем собственном форуме каждый день. Будут ещё баги и странные крайние случаи. Пожалуйста, сообщайте нам, когда найдёте один.
Проблемы и PR очень приветствуются на GitHub. Проблемы безопасности отправляются в частном порядке через SECURITY.md.
Спасибо @ars18 и Shalom Karr, которые построили большую часть этого со мной, всем на JTech, кто сообщал о багах и пробовал недоделанные вещи, и людям в темах Dumbcourse и Mini-mod, чьи вопросы сделали это лучше.
наслаждайтесь ![]()









