Restringir publicaciones en una categoría hasta que den "me gusta" a un tema

Buenas tardes. Tengo una categoría de Compra/Venta/Intercambio en mi sitio que me gustaría restringir para publicar hasta que un miembro dé “me gusta” al tema de las reglas. Le pregunté al Bot de IA y me dio algunas instrucciones. Sin embargo, parece que requiere Automatización de Discourse, que solo está disponible en planes alojados.

¿Hay alguna manera de hacer esto en mi plataforma autohospedada?

Hola, en realidad está incluido de forma gratuita con la edición comunitaria. Puedes activarlo en la pestaña Plugins.

2 Me gusta

No importa. Descubrí que puedo añadir el complemento de Automatización de Discord manualmente…

1 me gusta

Hmm, ¿quizás con Discourse Policy y los permisos de grupo?

  • add-users-to-group: acepta un único grupo como entrada; los usuarios que acepten la política se añadirán automáticamente a este grupo (cuando la política se revoque manualmente o si se actualiza la versión de la política, el/los usuario(s) se eliminará(n) del grupo)
2 Me gusta

Lo descubrí (con la ayuda de ask.discourse.org).

Tuve que habilitar la consulta SQL de insignias y luego crear una insignia que se asigna cuando alguien le da “me gusta” a la publicación específica. Luego creé un grupo que la Automatización de Discord asigna automáticamente en función de que un usuario tenga la insignia. Le di al grupo “todos” solo acceso de lectura a la categoría para que solo puedan reaccionar. Le di al grupo personalizado acceso completo.

2 Me gusta

¡Genial, gracias por compartir los detalles!
Ahora puedes marcar tu publicación como tu solución. :grin:

1 me gusta

Voy a hacer una pequeña reseña sobre exactamente lo que hice cuando llegue a casa, por si alguien más quiere saberlo. Luego marcaré eso como la solución.

3 Me gusta

Por si a alguien más le interesa hacer esto, aquí hay una breve descripción de lo que hice:

  1. Primero, debes habilitar Badge SQL a través de la CLI del servidor de Discourse:
./launcher enter app
rails c
SiteSetting.enable_badge_sql = true
  1. A continuación, encuentra el ID del tema con el que los miembros deben interactuar para obtener la insignia. En mi caso, el ID del tema es 117
  2. A continuación, encuentra el ID del tema con el que los miembros deben interactuar para obtener la insignia. En mi caso, el ID del tema es 117

Screenshot 2026-02-27 113204

  1. Crea tu Insignia Personalizada:
    1. Admin > Insignias > Nueva
    2. Nombra la insignia como quieras (ej. Lector de Reglas B/S/T)
    3. Elige un tipo de insignia, un ícono y dale una descripción
    4. Si seguiste el Paso 1, verás un cuadro de consulta donde puedes escribir una consulta SQL. Pega esta consulta (cambia p.topic_id = 117 por el ID de tu tema):
      1. SELECT DISTINCT ON (pa.user_id)
          pa.user_id,
          pa.post_id,
          pa.created_at granted_at
        FROM post_actions pa
        JOIN posts p ON pa.post_id = p.id AND p.post_number = 1
        WHERE pa.post_action_type_id = 2
          AND p.topic_id = 117
          AND (:backfill OR pa.post_id IN (:post_ids))
        
    5. Asegúrate de que Ejecutar consulta de revocación diariamente y La consulta tiene como objetivo publicaciones estén marcadas.
    6. El disparador debe configurarse como Cuando un usuario actúa sobre una publicación
  2. Ahora creamos la Automatización
    1. Primero crea un nuevo grupo para que se añadan los miembros. El mío se llama simplemente bst_rules_agreed, y está configurado para que solo los propietarios del grupo y los moderadores puedan ver la membresía. No necesita ningún efecto de Nivel de Confianza.
    2. A continuación, ve a Plugins > Automatización
      1. Añade una nueva automatización
        1. Elige Membresía de Grupo de Usuario a través de Insignia
        2. Disparador: Recurrente
          1. Recurrencia: Lo tengo configurado cada 1 hora. Elige lo que tenga sentido para ti.
          2. Elige una fecha de inicio
        3. Opciones de Script:
          1. Insignia: Elige la insignia que creaste arriba
          2. Grupo: Elige el grupo que creaste arriba

Eso es todo. Ahora deberías tener un sistema que asegure que los miembros hayan aceptado las reglas de la categoría antes de que puedan publicar en ella.

Mi próxima exploración es ver si hay una manera de ocultar todos los temas excepto las reglas a cualquiera que no esté en ese grupo. Pero, este sistema básico es suficiente por ahora.

3 Me gusta

Se sugirió una solución alternativa en el tema para el complemento de temas privados. La estoy moviendo aquí.

1 me gusta

¡Gracias por este complemento! Estaba buscando una forma de proporcionar un sistema básico de emisión de tickets en nuestra comunidad.

También estoy pensando en usar esto en mi categoría de Compra/Venta/Intercambio. Actualmente lo tengo configurado para que todos puedan leer los temas, pero solo las personas de un grupo específico puedan responder y crear. El flujo de trabajo actual es: el miembro reconoce que leyó las reglas dándole “me gusta” a la publicación. Una vez que le dan “me gusta” a la publicación, se les otorga una insignia personalizada. Discourse Automate los agrega al grupo basándose en la insignia.

Esto evita que las personas que no han aceptado las reglas publiquen en la categoría. Sin embargo, todavía pueden ver/leer todas las publicaciones.

Entonces, ¿funcionaría si elimino a todos de la categoría y solo dejo ese grupo personalizado en la pestaña de seguridad? Mientras tenga publicaciones del grupo de Administrador siempre visibles, ¿las personas que no están en el grupo personalizado aún podrán ver y dar “me gusta” a las reglas? Luego, una vez que le den “me gusta” y sean agregados al grupo, ¿todo se abrirá para ellos?

Eso no es lo que este complemento pretendía hacer.

Tu caso de uso se puede implementar sin este complemento, utilizando en su lugar el Complemento de política de Discourse, que tiene la capacidad de añadir a los usuarios que aceptaron la política a un grupo.

Revisé el complemento Policy antes de meterme en el lío de la forma en que terminé asignando la membresía del grupo. La razón por la que no me gusta Policy para esto es porque tiene que aplicarse a un grupo. Tendría que aplicarlo a algo como trust_level_1 para asegurarme de que todos los que quieren ser parte de B/S/T lo vean. Pero no todo el mundo quiere participar en B/S/T. No quiero acosarlos con otra cosa para hacer clic (aunque sea rápido) si no están interesados en ello.

  • crear un grupo “solicitantes de BST” y un grupo “miembros de BST”
  • hacer que “solicitantes de BST” sea un grupo al que se pueda unir libremente
  • tener una política que se aplique a “solicitantes de BST” y añada a “miembros de BST”
  • conceder acceso a la categoría a “miembros de BST”

La gente se unirá a “solicitantes de BST”, aceptará la política y se convertirá en miembro de “miembros de BST”. Complicado, pero menos complicado que activar una máquina de Rube Goldberg completa al dar “me gusta” a una publicación.

1 me gusta

2 publicaciones se fusionaron en un tema existente: Private Topics Plugin

Esto también podría funcionar. Lo investigaré. ¡¡Gracias!! Soy realmente nuevo en Discourse, así que estoy aprendiendo las formas.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.