Creación de insignia personalizada con reglas personalizadas

Quiero crear una insignia personalizada en la que se agreguen estas reglas, lo que simplemente significa que cuando el usuario logre las siguientes cosas, se le otorgará automáticamente la insignia relacionada correspondiente.
Los usuarios deben lograr estas cosas/reglas a continuación:

  1. El usuario debe haber creado al menos 2 publicaciones.
  2. Los usuarios deben haber subido una foto de perfil.
  3. El usuario debe haber dado “me gusta” a al menos una publicación.

Nota: He visto la creación de algunas insignias con la ayuda de consultas SQL, en realidad soy muy nuevo en esto, así que por favor, indíqueme dónde poner las consultas SQL (si es necesario) para lograr estas reglas anteriores.

1 me gusta

¿Puede ayudar?

4 Me gusta

Oye, esto es realmente útil.
He habilitado la opción de consultas SQL, solo estoy atascado con una pequeña cosa después de eso, estaré listo.

Cómo ver la base de datos porque mi regla de insignia personalizada es compleja, por eso necesito algunas cosas:

  1. Cómo ver la base de datos, para que pueda construir mi propia consulta
  2. Cómo probar estas insignias después de construir las consultas.

Amablemente responda estas 2 cosas después de eso podré dormir en paz.

1 me gusta

La forma más sencilla es instalar el plugin discourse-data-explorer, que proporcionará una interfaz como esta.

3 Me gusta

He instalado el plugin y he ejecutado el siguiente comando SQL que me devuelve los usuarios que cumplen estas 3 reglas, pero no sé cómo convertirlo en un disparador cuando un usuario actúa sobre la publicación.

Comando SQL:
select users.username, user_stats.user_id from user_stats Inner Join users ON user_stats.user_id = users.id where post_count = 2 AND likes_given = 1 AND uploaded_avatar_id > 0

Sigo esta publicación Creating triggered custom badge queries pero todavía no puedo crearlo porque soy muy nuevo en Discourse.

Por favor, ayúdame a solucionarlo, si puedo completar esto una vez, podré crear mis otras insignias personalizadas con menos fricción.
@Lhc_fl

1 me gusta

Este es un código SQL de “Trigger: Actualizar diario”;

SELECT st.user_id user_id, current_timestamp granted_at
FROM user_stats st
JOIN users u
ON st.user_id = u.id
WHERE st.post_count >= 2 AND st.likes_given >= 1 AND u.uploaded_avatar_id > 0

Los otros triggers dependen de algo específico y no recomiendo usarlos a menos que encuentres un experto en SQL. (Yo mismo no estoy familiarizado con SQL)

3 Me gusta

Muchas gracias por esto, solo tengo tres preguntas básicas:

  1. ¿Qué son las tablas st y u y cuál es el uso de ambas tablas y por qué estas tablas no son visibles en la pestaña del plugin explorador?

  2. ¿Cuándo se ejecutará esta actualización diaria del disparador, para ser específico, pregunto sobre la hora?

  3. ¿Cuál es el uso de Ejecutar consulta de revocación diariamente?

1 me gusta

Con respecto a 1?, esos son nombres de alias de tabla.

¿Ves la línea FROM user_stats st? Eso le dice a la consulta que st es la abreviatura de la tabla user_stats.

Lo mismo ocurre en la declaración JOIN donde dice users u. Está diciendo que en la consulta u es un alias de la tabla users en esa consulta. Los alias se utilizan para simplificar las consultas y usar menos escritura, lo que reduce las posibilidades de errores.

Con respecto a 3, si habilita esa opción, si un usuario ya no califica para una insignia según la consulta, se eliminará la insignia de su cuenta.

3 Me gusta

Gracias por aclarar mis dudas, ahora solo queda el segundo punto.

  1. ¿Cuándo se ejecutará esta actualización de disparador diaria? Específicamente, pregunto sobre la hora.

Ups. Pensé que había respondido eso.

La consulta se ejecuta cada 24 horas según la hora del día en que inició el contenedor. Así que tengo una instancia que la ejecuta alrededor de las 0:00 UTC (aproximadamente) y otra instancia la ejecuta un poco después de las 6:00 UTC.

¿Podemos cambiar los horarios en los que se ejecuta esta consulta o podemos modificar esta consulta para que se active cuando el usuario actúa sobre una publicacióno cuandoel usuario edita o crea una publicación`?
Si es posible, por favor, cambie la consulta, ya que soy nuevo en este sistema de Discourse. Si puede ayudarme una vez, la próxima vez podré crear mi propia insignia personalizada.