JTech Tools: el único plugin detrás de JTech Forums (susurros, REQ-PM, Dumbcourse, puente de Telegram, nuestro tema)

:information_source: Resumen Todo JTech Forums se ejecuta sobre Discourse, en un solo plugin: herramientas de moderación, susurros a personas elegidas, REQ-PM, Dumbcourse, un puente con Telegram, listas de hilos de venta, búsqueda inteligente, ventanas emergentes y todo nuestro tema. Cada pieza tiene su propio interruptor.
:hammer_and_wrench: Repositorio 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
:question: Guía de instalación Cómo instalar plugins en Discourse

Hola a todos,

Parte de esto ya ha estado circulando por Meta en fragmentos. Dumbcourse tuvo su propio tema en febrero, @ars18 publicó Mini-mod en abril, y en agosto publiqué una larga respuesta en el hilo de Dumbcourse listando todo lo demás que habíamos metido en un solo plugin. Eso merecía algo mejor que estar enterrado en la publicación #38, así que aquí está la versión adecuada. Con muchas imágenes esta vez.

JTech es un foro de tecnología, principalmente teléfonos, teléfonos plegables, filtros y ROMs, y muchos de nuestros miembros usan teléfonos con teclado a propósito. Cada herramienta aquí existe porque nuestro propio foro la necesitaba.

“¿Por qué es un solo plugin?”

merefield preguntó esto en el hilo de Dumbcourse y es una pregunta justa, así que aquí está la respuesta de antemano.

  • Cada módulo tiene su propio interruptor de encendido/apagado. Algunos están activados de fábrica (Dumbcourse, REQ-PM, las herramientas de moderación), otros esperan por ti (Mini-mod, búsqueda inteligente, Disteleplus, Another SMTP), y algunos de los “activados” no hacen nada hasta que los apuntes a una categoría o tema. Pasa por las pestañas después de instalar y desactiva lo que no quieras.
  • jtech_enabled detiene todo de una vez, incluidos los cambios de permisos y los trabajos en segundo plano. @satonotdead, preguntaste en el tema de Mini-mod por qué Mini-mod seguía funcionando después de que apagaste el paquete. Tenías razón, lo hacía: el código parcheado en el núcleo y los trabajos programados solo comprobaban su propio interruptor. Eso se corrigió desde el 24 de septiembre. Ahora cada módulo también comprueba el interruptor maestro.
  • Apagar las cosas nunca filtra nada. Por ejemplo, desactivar los susurros no hace que un susurro existente sea público.
  • Cada módulo se mantiene separado por dentro: su propio archivo en sub_plugins/, su propia pestaña de configuración, su propia página de documentación. Si solo quieres una cosa, haz un fork y sépalos, adelante. El antiguo repositorio independiente de Mini-mod está archivado, y este es donde se mantiene ahora.

Qué hay dentro

Cada uno está plegado, así que abre lo que parezca interesante. Cada imagen es una pantalla real de nuestro foro a menos que se indique lo contrario. Las cosas privadas (chat de personal, datos de contacto, notas de moderadores) están difuminadas.

Dumbcourse: el foro completo en un teléfono plegable

El foro completo en /dumb, para teléfonos plegables, KaiOS y navegadores Android antiguos que no pueden ejecutar el sitio normal. Está controlado por el pad direccional y el teclado como las propias aplicaciones del teléfono, y sigue funcionando con pantalla táctil y ratón.

  • Lectura: Últimos, Nuevos, No leídos, Top, Calientes, categorías y etiquetas. ↑↓ lee (una publicación larga se desplaza antes de que el foco se mueva), ←→ cambia de pestañas, los temas no leídos se abren en tu primera publicación no leída, y Atrás te lleva exactamente a donde estabas.
  • Acciones: OK en una publicación abre me gusta, reaccionar, responder, citar, marcar, editar, reportar, copiar enlace, cada enlace en la publicación, spoilers y sus imágenes. Hay un compositor a pantalla completa con menciones, emojis, cargas, vista previa y corrección ortográfica opcional (LanguageTool).
  • Teclas: * menú, # búsqueda, 0 ayuda, 3 responder, 5 me gusta, 2/8 página arriba y abajo. Los teléfonos que nombran sus teclas suaves de manera extraña pueden enseñárselos en Preferencias.
  • Iniciar sesión sin escribir una contraseña en un teclado: aprueba el teléfono desde un dispositivo en el que ya estés iniciado sesión, o usa un enlace o código enviado por correo electrónico. Los inicios de sesión sociales y la 2FA también funcionan.
  • Los navegadores antiguos lo encuentran por sí mismos. Un navegador que no puede ejecutar el foro completo se envía a la página correspondiente de Dumbcourse, incluso desde enlaces en correos electrónicos. Los motores de búsqueda no se redirigen.
  • Es ES5 plano, y CI comprueba que siga funcionando en Chrome 30, Firefox 30 y Android 4.4.

Ya que el nombre salió la última vez: la ruta es una configuración (dumbcourse_base_path), así que /simple o /lite está a un cambio de distancia.

También tenemos una aplicación de Android que envuelve Dumbcourse para teléfonos con teclado, con notificaciones push. Está configurada para nuestro foro, pero el código está ahí si quieres construir una para el tuyo. Nuestros miembros han estado martillando en el hilo de la app (más de 450 respuestas) y el último gran refresco.

Herramientas de moderación: susurros a personas elegidas, notas privadas, alertas de personal


El susurro y la nota en la fila central son de nuestra documentación, con usuarios ficticios. El resto es la interfaz real.

Susurros a personas específicas. La gente ha estado pidiendo esto en Meta durante años (permitir que el autor de la publicación vea un susurro, susurros para grupos distintos del personal). Responde dentro de un tema solo a unos pocos usuarios, un grupo, o a todos los que tengan una insignia. Solo el personal, el autor y esas personas pueden verlo. No aparece en ninguna otra parte: no en la búsqueda, actividad, correos electrónicos, notificaciones, vistas previas de enlaces, RSS, Dumbcourse ni el puente de Telegram. Las respuestas a un susurro permanecen privadas para las mismas personas automáticamente, y un susurro nunca eleva el tema para nadie más. El personal puede convertir una publicación existente en un susurro o viceversa, y cada cambio se registra en el registro del personal.

Notas privadas. Una nota solo para el personal en un tema, con un hilo de respuestas y una fila de “visto por”. Las notas nuevas aparecen en la campana y en una pestaña de escudo en el menú de usuario, pero solo para el personal que realmente puede ver ese tema.

Alertas de personal. Te avisan cuando otro miembro del personal elimina una publicación, aprueba o rechaza una publicación en cola, o añade una nota a un usuario o a una bandera. Cada tipo tiene su propio interruptor.

Listas de verificación y herramientas de tema. Una lista de verificación que los nuevos miembros marcan antes de su primera publicación (con un registro de quién aceptó qué versión), listas de verificación dirigidas a usuarios específicos o adjuntas a un solo tema, un mensaje de pie de página bajo un tema, una publicación fijada copiada al final, aprobación de respuestas para un solo tema, una nota de “antes de publicar” por categoría, y un selector de insignias para añadir a todos los que tienen una insignia a un MP.

La regla para todo esto: los moderadores no ven todo. Una herramienta nunca muestra a un moderador un MP o una categoría restringida que el núcleo no les mostraría, y las alertas solo van al personal que puede abrir lo que apuntan.

REQ-PM: datos de contacto en lugar de mensajes privados

Nuestro foro no tiene mensajes privados, a propósito. Entonces, ¿cómo se ponen en contacto dos miembros? Se piden mutuamente datos de contacto. (Nuestro hilo de lanzamiento, si quieres ver cómo lo recibieron los miembros.)

  • Presiona REQ-PM en la tarjeta de usuario de alguien, marca lo que te gustaría (teléfono, WhatsApp, correo electrónico, Telegram, Signal…) y envía. No hay casilla de texto, así que no puede convertirse en una puerta trasera para mensajes.
  • Ellos marcan exactamente qué detalles recibes. Cualquiera de los dos lados puede retirar lo que compartieron, en cualquier momento, en silencio. Decir que no también es silencioso: la persona que preguntó solo ve “esperando” y luego “expirado”.
  • /reqpm contiene tus solicitudes, tus contactos (con botones de Llamar / Enviar texto / Chatear), tu propia tarjeta y con quién la has compartido.
  • Privacidad: los valores están cifrados en reposo (AES-256-GCM) y solo se devuelven a su propietario y a las personas que el propietario eligió. No hay pantalla de administración para ellos, y los puntos finales rechazan claves API e impersonación.
Formato de lista: hilos de venta que se mantienen ordenados


Una lista real de nuestro hilo de venta de teléfonos y computadoras.

Tenemos un gran hilo de “teléfonos y computadoras en venta”, y solía ser un desastre de “¿aún disponible?” y “mandame un MP”. Ahora, en los temas que elijas, cada publicación debe ser una lista en el formato del hilo, o se rechaza (con la razón) antes de ser guardada.

  • Los miembros obtienen un botón Crear lista en lugar de Responder. Abre un formulario con una casilla para cada sección (artículo, cantidad, condición, especificaciones, recogida o envío), opciones para elegir la condición, y el editor normal para imágenes y notas.
  • Las listas aparecen como tarjetas como la de arriba. El vendedor (o el personal) puede marcar una como vendida, y luego se desvanece y se tacha.
  • Sin enlaces a otros sitios. Los números de teléfono y correos electrónicos están bien, y los compradores usan el botón REQ-PM del vendedor en lugar de responder.
  • El personal está exento, y las publicaciones antiguas se dejan en paz.
Disteleplus: un chat de personal puenteado en ambas direcciones con Telegram

Este se convirtió en toda una cosa. No todo nuestro personal tenía (o quería) WhatsApp, y no todos tenían Telegram tampoco. Así que: un chat de una sola sala dentro de Discourse que se refleja en ambas direcciones con un grupo de Telegram.

  • En Discourse: un cajón o una página completa con respuestas, ediciones, reacciones, notas de voz, encuestas, archivos, menciones, búsqueda, vistas previas de enlaces e indicadores de escritura. El texto del mensaje está cifrado en la base de datos. No necesita el plugin oficial de Chat.
  • En Telegram: las personas a las que has vinculado publican con su cuenta de foro y todos los demás aparecen con su nombre de Telegram. Opcionalmente, puedes anunciar nuevas publicaciones del foro en el grupo, y reflejar la cola de revisión en un tema de Informes con botones Aprobar / Denegar que funcionan para el personal justo ahí en Telegram.
  • La configuración toma unos cinco minutos: crea un bot con @BotFather, añádelo al grupo como administrador, pega el token, presiona Registrar webhook.

Si lo que quieres es puentear canales de Discourse Chat a Telegram, mira Discourse-Telegram chat bridge o Discourse Chat Bridge (Telegram) en su lugar. El nuestro es una sola sala de personal, sin Chat.

El tema de JTech (se distribuye con el plugin)

El tema propio de nuestro foro ahora se distribuye con el plugin. Una reconstrucción lo instala y lo mantiene actualizado, pero nunca se convierte en el predeterminado. Lo activas tú mismo bajo Personalizar → Temas.

Es blanco y negro, con bordes finos, esquinas redondeadas y la fuente Geist. Claro y oscuro son opuestos exactos, y hay un JTech Dim más suave para personas que encuentran el negro OLED demasiado duro.

  • Tarjetas de tema en lugar de filas de tabla, con la primera imagen junto al título y Vista rápida para leer un tema sin salir de la lista.
  • Un menú de comandos en ⌘K / Ctrl+K que salta a páginas, categorías, temas y personas, con atajos de teclado listados junto a cada comando.
  • Un banner de portada con un planeta de puntos que gira, sigue tu ratón y se queda quieto para cualquiera que pida a su dispositivo movimiento reducido. Además, un encabezado, barra lateral, perfiles, tarjetas de usuario, página de inicio de sesión y página de acerca de rediseñados.
  • Reemplaza alrededor de una docena de componentes de tema que solíamos usar, cada uno ahora es una configuración: modo de lectura, un índice para guías, un botón de imprimir/PDF, un código QR en Compartir, mensajes de voz del compositor, insignias de publicación, un botón de Copiar como Markdown, un filtro de respuestas, búsqueda desde texto seleccionado, la advertencia de respuesta de tema cerrado, y más. Nuestro foro ahora funciona con cero componentes de tema.
  • Gastamos una cantidad ridícula de tiempo en accesibilidad: contraste WCAG AA en texto gris en las tres paletas, anillos de enfoque que realmente puedes ver en cada control, objetivos de toque más grandes en teléfonos, modo de alto contraste de Windows, idiomas de derecha a izquierda, y teléfonos de 320px de ancho.
Los más pequeños: Mini-mod, Dislike, búsqueda inteligente, ventanas emergentes, Another SMTP, traductor


Ventanas emergentes de escritorio (de nuestra documentación, usuarios ficticios).

  • Mini-mod. Algunos derechos adicionales para personas que moderan una categoría a través de un grupo: crear y editar categorías, mover temas, etiquetas. Cada derecho tiene su propio interruptor, y ninguno de ellos alcanza más allá de lo que esa persona ya puede ver. También puede quitar derechos, como reabrir temas cerrados. El tema original de @ars18 tiene más, y aquí está el tipo de solicitud a la que responde.
  • Dislike. En las categorías que elijas, los me gusta dejan de contar: sin notificación, sin historial de “me gusta recibidos”, y no cuentan en la tabla de clasificación. También puedes ocultar el botón allí completamente, o solo dejar que algunos grupos den me gusta.
  • Búsqueda inteligente. Cuando una búsqueda encuentra casi nada, intenta silenciosamente de nuevo con sinónimos, así que “k8s” encuentra “kubernetes” y “js” encuentra “javascript”. Usa WordNet más una pequeña lista de jerga técnica, se ejecuta en proceso sin claves API, mantiene todos los filtros y permisos, y vuelve a la búsqueda normal si algo sale mal.
  • Ventanas emergentes de escritorio. Una pequeña tarjeta en la esquina cuando llega una notificación. Cada miembro se inscribe, está silenciosa durante No molestar, y funciona con teclado y lector de pantalla.
  • Another SMTP. Enviar correo del foro a través de un servidor de correo diferente al de app.yml, configurado desde la administración.
  • Ajustes del traductor. Para sitios que aún usan el antiguo plugin discourse-translator con Google: apunta sus solicitudes a tu propio proxy.

Instalación

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/TripleU613/JtechTools.git jtech-tools

Mantén el nombre de la carpeta jtech-tools, en minúsculas. Discourse construye la URL de la hoja de estilo a partir de él.

Luego reconstruye y ve a Administración → Plugins → Jtech Tools. Hay una pestaña por módulo, y la página de documentación de cada módulo dice qué configurar primero.

Seguimos main en Discourse 2026.8 y versiones más nuevas, y .discourse-compatibility fija versiones más antiguas. El CHANGELOG dice qué cambió y lo que vale la pena revisar después de una actualización.

Siendo honestos sobre esto

Somos el equipo de administración de un foro, no una tienda de Discourse. Una buena parte de esto se construyó con ayuda de IA. Lo que me hace estar bien compartiendo son las barreras de protección: reglas en el repositorio que cada cambio debe seguir (permisos primero, nunca alcanzar más allá de lo que el núcleo permite, nada que el núcleo ya haga), alrededor de 1,700 pruebas en 119 archivos de especificación que se ejecutan en cada PR, y la mayor parte de esto funcionando en nuestro propio foro cada día. Todavía habrá errores y casos de borde extraños. Por favor, díganos cuando encuentre uno.

Los problemas y PRs son muy bienvenidos en GitHub. Los problemas de seguridad se envían en privado a través de SECURITY.md.

Gracias a @ars18 y Shalom Karr, que construyeron una gran parte de esto conmigo, a todos en JTech que reportaron errores y probaron cosas a medio terminar, y a las personas en los hilos de Dumbcourse y Mini-mod cuyas preguntas lo hicieron mejor.

disfruten :lion:

7 Me gusta