Creación de un sistema para mover temas según criterios dados como una marca de tiempo

Consulte la integración del Bot de IA en Discourse AI - AI bot - Documentation / Site Management - Discourse Meta

Versión corta si no quiere leer toda la historia: Quiero usar el Bot de IA para mover temas basados en la “Fecha de caducidad” comprobando las marcas de tiempo de una publicación.

Así que he estado pensando en formas de mejorar la gestión para mi caso de uso de Discourse. Dirijo una comunidad de juegos de Roblox, y utilizamos Discourse para que nuestro equipo de moderación realice tareas de registro de acciones de moderación del juego y acciones de Discord.

Tenemos varias categorías, incluidas las prohibiciones temporales. Cuando hacemos nuestros registros, se hacen como una publicación, y el moderador rellena un formato e inserta las marcas de tiempo relevantes para la acción realizada, por ejemplo, prohibición de 7 días, p. ej. Duración: 2026-03-01T05:00:00Z2026-03-08T05:00:00Z (La marca de tiempo está aquí)

Desde el lado de la gestión, agregué un “Bans Archivados” para cuando una prohibición ha terminado. Antes… lo adivinó, lo hacíamos a mano, revisando las prohibiciones una vez a la semana.

El otoño pasado, creé una utilidad de Python [ver abajo] que se ejecuta localmente, con la API de Discourse, abre un menú y selecciono qué sección de prohibiciones quiero archivar, y procesa dichas prohibiciones comprobando cada publicación en busca de una marca de tiempo válida y si ese tiempo ha pasado. Funciona bien, pero quería mejorar aún más…

Y aquí estamos… Espero que todavía esté aquí, probablemente podría resumir esto, pero bueno, ¿no se trata Discourse de conversación?

Quiero permitir que mi equipo de moderación, particularmente los de rango más alto, puedan realizar esta tarea, sin necesidad de usar VS o descargar nada en su máquina. Así que intenté hacer una versión de complemento, que admito que usé IA para intentar lograrlo. No estoy seguro de dónde salió mal, intenté revisar la documentación e incluso dar instrucciones para seguir los procesos, pero nada tuvo éxito.

Mi problema con la integración a través de un complemento se estancó por no entender (o la IA) cómo integrar en la Interfaz una interfaz visual (no tan colorida como esta con la versión de python, sino sensible de una manera que pudiera entenderse) p. ej. Un botón grande que diga “Ejecutar proceso de archivo” y utilice la API de moderación (?) para marcar los que no tienen una fecha válida o errores, etc.

Así que… aquí estamos al final de la versión larga… Quiero alguna opinión que no puedo obtener de nadie más que de otro humano, por eso estoy aquí.

  • ¿Tiene el Bot de IA esta capacidad?
  • Si no, ¿qué solución sensata debería intentar?
  • ¿Qué hice mal con la ruta del complemento, que hizo que simplemente no funcionara/fuera doloroso (como los errores comunes que cometió cuando comenzó en esta comunidad?)

Valoro su opinión. Gracias.

1 me gusta

No creo que necesites recurrir a la IA para nada de esto.

Cuando creas estos temas de baneo activo, ¿por qué no creas también un temporizador de tema para moverlo a la categoría correcta después de que pase un tiempo, así es automático?

Además… ¿alguna razón por la que te estés alejando del núcleo de Discourse aquí? Ya tenemos registros para los usuarios baneados, ¿por qué no simplemente dar a tus usuarios de confianza acceso a una consulta de Data Explorer para ver el historial?

El discourse se utiliza para registrar las prohibiciones… Ese es el propósito total. No hay jugadores en el foro… Solo moderadores del juego/discord. No creo que un temporizador de tema funcione ya que los tiempos de prohibición varían. No me estoy alejando tanto del Discourse Core como lo estoy utilizando para un caso de uso específico. (Ver la imagen)

1 me gusta

¡Caso de uso interesante!

Creo que te serviría mejor con algunos cambios:

Mover la expiración de la prohibición a un campo de tema personalizado dedicado

Esto te permitirá validar que cada prohibición tiene una expiración cuando se crea un tema nuevo y facilitará la consulta de las prohibiciones expiradas.

También podrías usar nuestra publicación Introducing Experimental Form Templates, que también te da acceso programático a datos específicos en un tema.

Añadir filtros personalizados /filter

Con el campo personalizado o la plantilla de formulario, ahora es fácil añadir nuevos filtros /filter como prohibiciones expiradas, prohibiciones archivadas, etc. Estos se convertirían entonces en tus listas de trabajo principales para moderadores, y se pueden añadir a la barra lateral para facilitar su uso.

¿Automatizar las prohibiciones en su totalidad?

La pieza final sería hacer que Discourse cree automáticamente las prohibiciones en Roblox y Discord cada vez que se crea un tema, y también que elimine automáticamente las prohibiciones cuando expiren.

Esto es bastante fácil de hacer con un trabajo recurrente y acceso a la API.


Si tienes un Set up a local Discourse Development Environment, incluso puedes pasar mi publicación aquí como especificación a Claude Code y lo construirá en minutos.

3 Me gusta

¡Esa es una perspectiva bastante interesante! ¡Le echaré un vistazo! Particularmente a los campos personalizados y las plantillas. ¡Gracias por su opinión!

Más antecedentes, ya que parece que los estoy intrigando con mi caso de uso… Y me gusta aportar ideas para que otras comunidades de juegos las encuentren en los próximos años…

De hecho, tengo un caso de uso bastante único. Usamos Trello durante años, pero debido a las limitaciones que comenzaron a imponer, se estaba volviendo demasiado descuidado. Tuvimos que usar 10 espacios de trabajo para albergar a todo nuestro equipo. (Sin mencionar que también comenzaron a restringir los niveles de acceso a una función de pago)

Así que, con la lucha continua con los cambios en el modelo de negocio, fue mucho más fácil hacer la transición a una solución autohospedada. Probé otro software de estilo kanban, pero con el uso de prueba anterior de Discourse, y el hecho de que es de código abierto y utiliza prácticas más modernas para el backend, simplemente no pude resistirme a usarlo, y siempre me asombran los logros y el crecimiento que continúa con esta plataforma en general. Septiembre es mi segundo aniversario desde el cambio, ¡y hemos creado más de 6,000 temas!

La característica que estaba tratando de imitar era una similar a la de esa época, que era una automatización para pasar de una lista a otra con un desencadenante específico (así que para nosotros era la fecha final). Desafortunadamente, es una característica premium que ya ni siquiera puedo demostrar.

image

Volveré aquí una vez que termine de explorar y les haré saber cómo va/qué hice, especialmente por el bien de otros que vean una idea para un uso similar.

2 Me gusta

Una vez que tengas tu complemento en funcionamiento, también deberías poder visualizar como solías hacerlo gracias al Tablero Kanban

2 Me gusta

Bueno, aquí estoy de vuelta… con bastantes avances. He dedicado unas 6.5 horas a esto.

Comencé con algunos conceptos basados en tus sugerencias, pero tuve algunos inconvenientes que finalmente me llevaron a otra dirección, ¡pero espero que en concepto siga siendo una gran idea!

Originalmente iba a usar Formularios de Plantilla (Template Forms), pero no estaba muy satisfecho con el relleno entre cada respuesta en línea. Buscaba más un formato como el que tengo actualmente. Tampoco me gustaba tener que escribirlo todo manualmente en el código, lo que me hizo cambiar de opinión.

He portado mi script de Python a un Plugin de Discourse (Tenga en cuenta que se utilizó IA para la mayor parte del portado). Tuve algunos problemas para empezar, y ahora que está operativo, todavía necesito ajustarlo. El diseño es un poco tosco, y probablemente algunos otros problemas menores. No soy muy bueno con Ruby, así que la revisión en ese aspecto es un esfuerzo máximo.

Así que, sobre el plugin…

Concepto/propósito: La capacidad de mover temas más rápido de una categoría a otra mediante desencadenantes específicos.

Viene con dos modos de operación, que son Manual y Automatizado (programado).
Para construir el desencadenante, puedes seleccionar las categorías de destino/origen, y luego reducirlo mediante especificaciones adicionales, por ejemplo, etiquetas. La llamada final/el desencadenante real, aparte de los filtros de reducción, es que activa el conjunto actual de desencadenantes por hora/fecha de finalización (o inicio), Cerrado, Resuelto, Archivado.

También hay una función de registros que incluye el tema que se mueve, y puedes decidir cuánto tiempo están disponibles los registros.

Hasta esta respuesta, no he probado completamente los desencadenantes de cerrado, resuelto o archivado.
Una vez que lo organice un poco más y lo pruebe más a fondo para asegurarme de que todo funcione, con gusto lo publicaré para que otros puedan acceder a él en la categoría de plugins, pero por ahora, solo lo dejaré en GitHub. Probablemente también necesite revisar los permisos para que no cualquiera pueda ejecutarlo. O permitir específicamente que eso se pueda activar/desactivar.

No dudes en hacerme saber tus pensamientos, o si estoy absolutamente loco haciendo esto.

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