JTech Tools: o único plugin por trás dos JTech Forums (whispers, REQ-PM, Dumbcourse, ponte do Telegram, nosso tema)

:information_source: Resumo Tudo no JTech Forums roda sobre o Discourse, em um único plugin: ferramentas de moderação, sussurros para pessoas específicas, REQ-PM, Dumbcourse, uma ponte para o Telegram, listagens de threads de venda, busca inteligente, pop-ups e todo o nosso tema. Cada parte tem seu próprio interruptor.
:hammer_and_wrench: Repositório 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: Guia de instalação Como instalar plugins no Discourse

Olá a todos,

Parte disso já estava circulando no Meta em fragmentos. O Dumbcourse teve seu próprio tópico em fevereiro, o @ars18 publicou o Mini-mod em abril, e em agosto eu deixei uma resposta longa na thread do Dumbcourse listando tudo o mais que havíamos empacotado em um único plugin. Isso merecia algo melhor do que ficar enterrado na publicação #38, então aqui está a versão adequada. Com muitas imagens desta vez.

O JTech é um fórum de tecnologia, principalmente celulares, celulares com tampa (flip phones), filtros e ROMs, e muitos dos nossos membros usam celulares com teclado intencionalmente. Cada ferramenta aqui existe porque o nosso próprio fórum precisou dela.

“Por que é um único plugin?”

O merefield fez essa pergunta na thread do Dumbcourse e é uma pergunta justa, então aqui está a resposta adiantada.

  • Cada módulo tem seu próprio interruptor de liga/desliga. Alguns vêm ativados por padrão (Dumbcourse, REQ-PM, ferramentas de moderação), outros esperam por você (Mini-mod, busca inteligente, Disteleplus, Another SMTP) e alguns dos “ativados” não fazem nada até você direcioná-los para uma categoria ou tópico. Passe pelas abas após a instalação e desative o que não quiser.
  • jtech_enabled para tudo de uma vez, incluindo as mudanças de permissão e os jobs em segundo plano. @satonotdead, você perguntou no tópico do Mini-mod por que o Mini-mod continuava rodando depois que você desligou o pacote. Você estava certo, ele continuava: código patcheado no core e jobs agendados só verificavam seu próprio interruptor. Isso foi corrigido desde 24 de setembro. Agora, cada módulo verifica também o interruptor mestre.
  • Desligar coisas nunca vaza nada. Desligar os sussurros, por exemplo, não torna um sussurro existente público.
  • Cada módulo é mantido separado internamente: seu próprio arquivo em sub_plugins/, sua própria aba de configurações, sua própria página de documentação. Se você quiser apenas uma coisa, faça um fork e separe, vá em frente. O repositório standalone antigo do Mini-mod está arquivado, e este é o lugar onde ele é mantido agora.

O que tem dentro

Cada um está recolhido, então abra o que parecer interessante. Cada imagem é uma tela real do nosso fórum, a menos que seja dito o contrário. Coisas privadas (chat da equipe, detalhes de contato, notas de moderação) estão borradas.

Dumbcourse: o fórum inteiro em um celular com tampa

O fórum inteiro em /dumb, para celulares com tampa, KaiOS e navegadores Android antigos que não conseguem executar o site normal. Ele é controlado pelo D-pad e teclado, como os próprios apps do celular, e ainda funciona com toque e mouse.

  • Leitura: Últimas, Novas, Não lidas, Topo, Quentes, categorias e tags. ↑↓ lê (uma publicação longa rola antes que o foco se mova), ←→ alterna abas, tópicos não lidos abrem na sua primeira publicação não lida, e Voltar leva você exatamente para onde você estava.
  • Ação: OK em uma publicação abre curtir, reagir, responder, citar, marcar, editar, sinalizar, copiar link, todos os links na publicação, spoilers e suas imagens. Há um editor em tela cheia com menções, emojis, uploads, pré-visualização e verificação ortográfica opcional (LanguageTool).
  • Teclas: * menu, # busca, 0 ajuda, 3 responder, 5 curtir, 2/8 página para cima e para baixo. Celulares que nomeiam suas teclas soft de forma estranha podem ser ensinados nas Preferências.
  • Fazer login sem digitar uma senha em um teclado: aprove o celular de um dispositivo no qual você já está logado, ou use um link ou código enviado por e-mail. Logins sociais e 2FA também funcionam.
  • Navegadores antigos encontram sozinhos. Um navegador que não consegue executar o fórum completo é redirecionado para a página correspondente do Dumbcourse, inclusive de links em e-mails. Motores de busca não são redirecionados.
  • É ES5 puro, e o CI verifica que continue funcionando no Chrome 30, Firefox 30 e Android 4.4.

Como o nome surgiu da última vez: o caminho é uma configuração (dumbcourse_base_path), então /simple ou /lite está a uma mudança de distância.

Também temos um aplicativo Android que embrulha o Dumbcourse para celulares com teclado, com notificações push. Ele é configurado para o nosso fórum, mas o código está lá se você quiser construir um para o seu. Nossos membros têm batido nele na thread do app (450+ respostas) e na última grande atualização.

Ferramentas de moderação: sussurros para pessoas específicas, notas privadas, alertas para a equipe


O sussurro e a nota na linha do meio são da nossa documentação, com usuários fictícios. O resto é a interface real.

Sussurros para pessoas específicas. As pessoas têm pedido isso no Meta há anos (permitir que o autor da publicação veja um sussurro, sussurros para grupos além da equipe). Responda dentro de um tópico para apenas alguns usuários, um grupo, ou todos que possuem um distintivo. Apenas a equipe, o autor e essas pessoas podem vê-lo. Ele não aparece em nenhum outro lugar: não na busca, atividade, e-mails, notificações, prévias de links, RSS, Dumbcourse ou na ponte do Telegram. Respostas a um sussurro permanecem privadas para as mesmas pessoas automaticamente, e um sussurro nunca destaca o tópico para ninguém mais. A equipe pode transformar uma publicação existente em um sussurro ou vice-versa, e cada mudança vai para o log da equipe.

Notas privadas. Uma nota apenas para a equipe em um tópico, com uma thread de respostas e uma linha de “visto por”. Novas notas aparecem no sino e em uma aba de escudo no menu do usuário, mas apenas para a equipe que pode realmente ver aquele tópico.

Alertas para a equipe. Seja avisado quando outro membro da equipe excluir uma publicação, aprovar ou rejeitar uma publicação na fila, ou adicionar uma nota a um usuário ou a uma sinalização. Cada tipo tem seu próprio interruptor.

Checklists e ferramentas de tópico. Um checklist que novos membros marcam antes de sua primeira publicação (com um log de quem aceitou qual versão), checklists direcionados a usuários específicos ou anexados a um tópico, uma mensagem de rodapé sob um tópico, uma publicação fixada copiada para o fundo, aprovação de respostas para um único tópico, uma nota “antes de postar” por categoria, e um seletor de distintivos para adicionar todos com um distintivo a uma mensagem direta.

A regra para tudo isso: moderadores não veem tudo. Uma ferramenta nunca mostra a um moderador uma mensagem direta ou uma categoria restrita que o core não mostraria a eles, e alertas vão apenas para a equipe que pode abrir o que eles apontam.

REQ-PM: detalhes de contato em vez de mensagens privadas

Nosso fórum não tem mensagens privadas, intencionalmente. Então, como dois membros entram em contato? Eles pedem uns aos outros os detalhes de contato. (Nossa thread de lançamento, se você quiser ver como os membros reagiram.)

  • Pressione REQ-PM no cartão de usuário de alguém, marque o que você gostaria (telefone, WhatsApp, e-mail, Telegram, Signal…), e envie. Não há caixa de texto, então não pode se tornar uma porta dos fundos para mensagens.
  • Eles marcam exatamente quais detalhes você recebe. Qualquer um dos lados pode retomar o que compartilharam, a qualquer momento, silenciosamente. Dizer não é silencioso também: a pessoa que perguntou só vê “aguardando” e depois “expirado”.
  • /reqpm mantém suas solicitações, seus contatos (com botões de Ligar / Mensagem / Chat), seu próprio cartão e com quem você compartilhou.
  • Privacidade: os valores são criptografados em repouso (AES-256-GCM) e retornados apenas ao seu proprietário e às pessoas escolhidas pelo proprietário. Não há tela de administração para eles, e os endpoints recusam chaves de API e personificação.
Formato de listagem: threads de venda que permanecem organizadas


Uma listagem real da nossa thread de venda de celulares e computadores.

Temos uma grande thread “celulares e computadores para venda”, e costumava ser uma bagunça de “ainda disponível?” e “me chame no privado”. Agora, nos tópicos que você escolher, cada publicação deve ser uma listagem no formato da thread, ou será rejeitada (com o motivo) antes de ser salva.

  • Os membros recebem um botão Criar listagem em vez de Responder. Ele abre um formulário com uma caixa para cada seção (item, quantidade, condição, especificações, retirada ou envio), opções para escolher a condição, e o editor normal para imagens e notas.
  • As listagens aparecem como cartões como o acima. O vendedor (ou a equipe) pode marcar uma como vendida, e então ela se esmaece e é riscada.
  • Sem links para outros sites. Números de telefone e e-mails estão bem, e os compradores usam o botão REQ-PM do vendedor em vez de responder.
  • A equipe está isenta, e publicações antigas são deixadas sozinhas.
Disteleplus: um chat da equipe espelhado nos dois sentidos com o Telegram

Este cresceu para algo grande. Nem toda a nossa equipe tinha (ou queria) WhatsApp, e nem todo mundo tinha Telegram também. Então: um chat de uma sala dentro do Discourse que é espelhado nos dois sentidos com um grupo do Telegram.

  • No Discourse: uma gaveta ou uma página completa com respostas, edições, reações, notas de voz, enquetes, arquivos, menções, busca, prévias de links e indicadores de digitação. O texto da mensagem é criptografado no banco de dados. Ele não precisa do plugin oficial de Chat.
  • No Telegram: pessoas vinculadas postam como sua conta do fórum e todos os outros aparecem com seu nome do Telegram. Opcionalmente, você pode anunciar novas publicações do fórum no grupo, e espelhar a fila de revisão em um tópico de Relatórios com botões Aprovar / Negar que funcionam para a equipe ali mesmo no Telegram.
  • A configuração leva cerca de cinco minutos: crie um bot com o @BotFather, adicione-o ao grupo como administrador, cole o token, pressione Registrar webhook.

Se o que você quer é espelhar canais do Discourse Chat para o Telegram, veja Discourse-Telegram chat bridge ou Discourse Chat Bridge (Telegram) em vez disso. O nosso é uma sala de equipe, sem Chat.

O tema JTech (ele vem com o plugin)

O próprio tema do nosso fórum agora vem com o plugin. Uma reconstrução o instala e mantém atualizado, mas ele nunca se torna o padrão. Você o ativa você mesmo em Personalizar → Temas.

É preto e branco, com bordas finas, cantos arredondados e a fonte Geist. Claro e escuro são exatos opostos, e há um JTech Dim mais suave para pessoas que acham o preto OLED muito agressivo.

  • Cartões de tópico em vez de linhas de tabela, com a primeira imagem ao lado do título e Olhar rápido para ler um tópico sem sair da lista.
  • Um menu de comandos em ⌘K / Ctrl+K que pula para páginas, categorias, tópicos e pessoas, com atalhos de teclado listados ao lado de cada comando.
  • Um banner na página inicial com um planeta de pontos que gira, segue seu mouse e fica parado para qualquer pessoa que peça ao dispositivo movimento reduzido. Mais um cabeçalho, barra lateral, perfis, cartões de usuário, página de login e página sobre redesenhados.
  • Ele substitui cerca de uma dúzia de componentes de tema que costumávamos usar, cada um agora uma configuração: modo de leitor, uma tabela de conteúdos para guias, um botão de imprimir/PDF, um código QR em Compartilhar, mensagens de voz do editor, distintivos de publicação, um botão Copiar como Markdown, um filtro de respostas, busca do texto selecionado, o aviso de resposta de tópico fechado, e mais. Nosso fórum agora roda com zero componentes de tema.
  • Gastamos uma quantidade absurda de tempo em acessibilidade: contraste WCAG AA em texto cinza em todos os três paletas, anéis de foco que você realmente pode ver em cada controle, alvos de toque maiores em celulares, modo de alto contraste do Windows, idiomas da direita para a esquerda, e celulares de 320px de largura.
Os menores: Mini-mod, Dislike, busca inteligente, pop-ups, Another SMTP, tradutor


Pop-ups em desktop (da nossa documentação, usuários fictícios).

  • Mini-mod. Alguns direitos extras para pessoas que moderam uma categoria através de um grupo: criar e editar categorias, mover tópicos para dentro, tags. Cada direito tem seu próprio interruptor, e nenhum deles alcança além do que aquela pessoa já pode ver. Ele também pode tirar direitos de alguém, como reabrir tópicos fechados. O tópico original do @ars18 tem mais, e aqui está o tipo de solicitação que ele responde.
  • Dislike. Nas categorias que você escolher, curtir para de contar: sem notificação, sem histórico de “curtidas recebidas”, e elas não contam no ranking. Você também pode ocultar o botão lá completamente, ou apenas deixar alguns grupos curtirem.
  • Busca inteligente. Quando uma busca encontra quase nada, ela tenta novamente silenciosamente com sinônimos, então “k8s” encontra “kubernetes” e “js” encontra “javascript”. Ela usa WordNet mais uma pequena lista de jargão técnico, roda em processo sem chaves de API, mantém todos os filtros e permissões, e volta para a busca normal se algo der errado.
  • Pop-ups em desktop. Um pequeno cartão no canto quando uma notificação chega. Cada membro opta por entrar, é silencioso durante Não Perturbe, e funciona com teclado e leitor de tela.
  • Another SMTP. Envie e-mails do fórum através de um servidor de e-mail diferente daquele em app.yml, configurado da administração.
  • Ajustes do tradutor. Para sites ainda no antigo plugin discourse-translator com Google: direcione suas requisições para o seu próprio proxy.

Instalando

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

Mantenha o nome da pasta jtech-tools, em minúsculas. O Discourse constrói a URL da folha de estilo a partir dele.

Depois reconstrua e vá para Admin → Plugins → Jtech Tools. Há uma aba por módulo, e a página de documentação de cada módulo diz o que configurar primeiro.

Acompanhamos o main no Discourse 2026.8 e mais novo, e o .discourse-compatibility fixa versões mais antigas. O CHANGELOG diz o que mudou e o que vale a pena verificar após uma atualização.

Sendo honesto sobre isso

Somos a equipe de administração de um fórum, não uma loja de Discourse. Uma parte justa disso foi construída com ajuda de IA. O que me faz ficar bem em compartilhá-lo são as barreiras de proteção: regras no repositório que toda mudança deve seguir (permissões primeiro, nunca alcançar além do que o core permite, nada que o core já faça), cerca de 1.700 testes em 119 arquivos de especificação que rodam em cada PR, e a maior parte rodando no nosso próprio fórum todos os dias. Ainda haverá bugs e casos de borda estranhos. Por favor, nos avise quando encontrar um.

Issues e PRs são muito bem-vindos no GitHub. Problemas de segurança vão em privado através do SECURITY.md.

Obrigado ao @ars18 e Shalom Karr, que construíram um grande pedaço disso comigo, a todos no JTech que relataram bugs e testaram coisas pela metade, e às pessoas nas threads do Dumbcourse e Mini-mod cujas perguntas o tornaram melhor.

divirtam-se :lion:

7 curtidas