Criando um sistema para mover tópicos com base em critérios como um timestamp

Consulte a integração do Bot de IA em Discourse AI - AI bot - Documentation / Site Management - Discourse Meta

Versão Curta caso você não queira ler a história toda: Eu quero usar o Bot de IA para mover tópicos com base na “data de expiração”, verificando os carimbos de data/hora de uma postagem.

Então, tenho pensado em maneiras de melhorar o gerenciamento para o meu caso de uso do Discourse. Eu administro uma comunidade de jogos Roblox, e utilizamos o Discourse para nossa equipe de Moderação realizar tarefas de registro de ações de moderação do Jogo e ações do Discord.

Temos várias categorias, incluindo banimentos temporários. Quando fazemos nossos registros, eles são feitos como uma postagem, e o moderador preenche um formato e insere os carimbos de data/hora relevantes para a ação realizada, por exemplo, banimento de 7 dias, por exemplo, Duração: 2026-03-01T05:00:00Z2026-03-08T05:00:00Z (Carimbo de data/hora está aqui)

Do lado do gerenciamento, adicionei um Banimentos Arquivados para quando um banimento termina. Antes… você adivinhou, fazíamos isso manualmente, verificando os banimentos uma vez por semana.

No outono passado, criei uma utilidade python [veja abaixo] que roda localmente, com a API do Discourse, ela abre um menu e eu seleciono qual seção de banimentos quero arquivar, e ela processa esses banimentos verificando cada postagem em busca de um carimbo de data/hora válido e se esse tempo passou. Funciona bem, mas eu queria melhorar ainda mais…

E aqui estamos… Espero que você ainda esteja aqui, provavelmente poderia resumir isso, mas ei, discourse é sobre conversa, certo?

Quero capacitar minha equipe de moderação, particularmente os de patente mais sênior, a realizar essa tarefa, sem a necessidade de usar VS ou baixar algo para suas máquinas. Então, tentei fazer uma versão de plugin, que admito que usei IA para tentar realizar. Não tenho certeza onde errei, tentei olhar a documentação e até dar instruções para seguir os processos, mas nada foi bem-sucedido.

Meu problema com a integração via plugin foi paralisado pela falta de compreensão (ou da IA) de como integrar à Interface uma interface visual (não tão colorida quanto esta com a versão python, mas sensata de uma forma que pudesse ser entendida) por exemplo, Um botão grande que diz Executar processo de Arquivamento e utiliza a API de moderação (?) para sinalizar aqueles sem data válida ou erros, etc.

Então… aqui estamos no final da versão longa… Quero alguma opinião que não posso obter de mais ninguém além de outro humano, é por isso que estou aqui.

  • O Bot de IA tem essa capacidade?
  • Se não, qual solução sensata devo tentar?
  • O que fiz de errado no caminho do plugin, que fez com que simplesmente não funcionasse/fosse doloroso (como erros comuns que você cometeu quando começou nesta comunidade?)

Agradeço sua opinião. Obrigado.

1 curtida

Eu não acho que você precise recorrer à IA para nada disso.

Ao criar esses tópicos de banimento ativo, por que não criar também um temporizador de tópico para movê-lo para a categoria correta depois que um certo tempo passar, assim é automático.

Além disso… algum motivo para você estar se afastando do núcleo do Discourse aqui, nós já temos logs para usuários banidos, por que não simplesmente dar aos seus usuários confiáveis acesso a uma consulta do Data Explorer para ver o histórico?

O fórum é usado para registrar os banimentos… Esse é o propósito total. Nenhum jogador está no fórum… Apenas moderadores do jogo/discord. Eu não acho que um temporizador de tópico funcionaria, já que os banimentos variam em tempo. Eu não estou tanto me afastando do Discourse Core quanto o utilizando para um caso de uso específico. (Veja a imagem)

1 curtida

Caso de uso interessante!

Eu acredito que você se sairia melhor com algumas mudanças:

Mover a expiração do banimento para um campo de tópico personalizado dedicado

Isso permitirá que você valide que todo banimento tem uma expiração ao criar um novo tópico e facilitará a consulta de banimentos expirados.

Você também pode usar nosso Apresentando Modelos de Formulário Experimentais, que também oferece acesso programático a dados específicos em um tópico.

Adicionar filtros personalizados /filter

Com o campo personalizado ou o modelo de formulário, agora é fácil adicionar novos filtros /filter, como banimentos expirados, banimentos arquivados, etc. Estes se tornariam suas principais listas de trabalho para moderadores e podem ser adicionados à barra lateral para facilitar o uso.

Automatizar banimentos como um todo?

A peça final seria fazer com que o Discourse criasse automaticamente os banimentos no Roblox e no Discord sempre que um tópico fosse criado, e também remover automaticamente os banimentos quando eles expirassem.

Isso é bem fácil de fazer com um trabalho recorrente e acesso à API.


Se você tiver um Configurar um Ambiente de Desenvolvimento Local do Discourse, você pode até mesmo passar minha postagem aqui como uma especificação para o Claude Code e ele a construirá em minutos.

3 curtidas

Essa é uma visão bem interessante! Vou dar uma olhada nisso! Particularmente nos campos personalizados e nos modelos. Obrigado pela sua opinião!

Mais contexto, já que parece que estou intrigando vocês com o meu caso de uso… E eu gosto de contribuir com ideias para outras comunidades de jogos encontrarem no futuro…

Eu realmente tenho um caso de uso bem único. Usamos o Trello por anos, mas devido às limitações que eles começaram a impor, estava ficando muito desorganizado. Tivemos que usar 10 espaços de trabalho para abrigar toda a nossa equipe. (Sem mencionar que eles começaram a restringir os níveis de acesso a um recurso pago também)

Então, com a luta contínua contra as mudanças no modelo de negócios, foi muito mais fácil fazer a transição para uma solução auto-hospedada. Eu tentei outros softwares no estilo kanban, mas com o uso de testes anteriores do Discourse, e o fato de ser de código aberto e usar práticas mais modernas para o backend das coisas, eu simplesmente não resisti a usá-lo, e estou sempre maravilhado com as realizações e o crescimento que continuam nesta plataforma como um todo. Setembro marca meu aniversário de 2 anos desde a mudança, e criamos mais de 6.000 tópicos!

O recurso que eu estava tentando imitar era um semelhante àquela época, que era uma automação para mover de uma lista para outra em um gatilho específico (para nós, era a data final). Infelizmente, é um recurso premium que eu nem consigo mais demonstrar.

image

Voltarei aqui assim que terminar de explorar e informarei como foi/o que fiz, especialmente para o bem de outros que veem uma ideia para um uso semelhante!

2 curtidas

Depois que seu plugin estiver funcionando, você também poderá visualizar como costumava fazer, graças ao Kanban Board

2 curtidas

Bem, estou de volta… com um bom progresso. Dediquei cerca de 6,5 horas a isto.

Comecei com alguns conceitos baseados nas suas sugestões, mas tive alguns contratempos que me levaram a outra direção, mas espero que, em conceito, ainda seja uma ótima ideia!

Originalmente, eu ia usar Formulários de Modelo (Template Forms), mas não fiquei muito satisfeito com o preenchimento entre cada resposta em linha. Eu estava procurando mais um formato como o meu conjunto atual. Também não fiquei feliz em ter que escrever tudo manualmente no código, o que me afastou.

Fiz o port do meu script Python para um Plugin do Discourse (Observe que a IA foi usada para a maior parte do port). Tive alguns problemas para começar, e agora que está operacional, ainda preciso ajustá-lo. O design está um pouco desajeitado, e provavelmente alguns outros pequenos problemas. Eu não sou muito bom em Ruby, então a revisão nisso é um esforço de melhor boa vontade.

Então, sobre o plugin…

Conceito/propósito: A capacidade de mover tópicos mais rapidamente de uma categoria para outra por meio de gatilhos específicos.

Vem com dois modos de operação, que são Manual e Automatizado (agendado).
Para construir o gatilho, você pode selecionar as categorias de destino/origem e, em seguida, refinar por especificações adicionais, por exemplo, tags. A chamada final/o gatilho real, além dos filtros de refinamento, é acionado pela data/hora de término (ou início), Fechado, Resolvido, Arquivado.

Há também um recurso de logs (registros) incluindo o tópico que está sendo movido, e você pode decidir por quanto tempo os logs ficam disponíveis.

Eu ainda não testei completamente os gatilhos de fechado, resolvido ou arquivado até esta resposta.
Assim que eu o organizar um pouco mais e testá-lo mais para garantir que tudo funcione, ficarei feliz em publicá-lo para que outros possam acessá-lo na categoria de plugins, mas por enquanto, vou deixá-lo apenas no GitHub. Eu também provavelmente preciso voltar e verificar as permissões para que nem todos possam executá-lo. Ou permitir especificamente que isso seja alternado.

Sinta-se à vontade para me dizer o que você acha, ou se estou absolutamente maluco fazendo isso.

Fonte: https://github.com/jdc20181/DiscourseTopicMigrationTool