Insignia de Discourse-Math

¿Alguien puede pensar en una forma de otorgar automáticamente una insignia personalizada por publicar una ecuación renderizada usando el plugin discourse-math?

No tengo ni idea de por dónde empezar.

5 Me gusta

Hola @agf1997

Estoy de acuerdo en que el plugin de matemáticas de Discourse está muy bien hecho y es un gran añadido para un sitio.

Una opción sería contratar a un desarrollador de plugins de Discourse para que modifique el plugin de matemáticas y actualice un campo personalizado en la base de datos cuando un miembro del foro lo utilice.

Luego, podrías crear una consulta sencilla en la base de datos (en el área de administración de insignias) para emitir insignias.

Espero que esto te ayude.

3 Me gusta

Definitivamente no es una función crítica para la misión. Solo buscaba una forma sencilla de resaltar a las personas que utilizan la función de formateo matemático para animar a otros a usarla también.

1 me gusta

Hola @agf1997

Para eso necesitarás el código del plugin, como mencioné.

Esto indica que tienes dos opciones:

  1. Modificar o ampliar el plugin de matemáticas tú mismo
  2. Contratar a alguien para que modifique o amplíe el plugin de matemáticas por ti

Sea cual sea la dirección que decidas tomar, necesitas modificar o ampliar el plugin de matemáticas para actualizar un campo personalizado en la base de datos cuando un miembro del foro utilice el plugin.

Espero que esto ayude.

2 Me gusta

Sí, puedes tener insignias para publicaciones de Math exitosas sin necesidad de modificar el plugin.

Primero, necesitarás habilitar SQL de insignias ya no se puede editar por defecto en tu sitio.

Después, crea una nueva insignia que se active con la siguiente consulta:

SELECT user_id, MIN(id) AS post_id, current_timestamp AS granted_at 
FROM badge_posts
WHERE cooked LIKE '%<span class="math">%' AND (:backfill OR id IN (:post_ids) )
GROUP BY user_id
7 Me gusta

¡Hola @Falco!

Esa es una consulta de insignia realmente buena.

Pregunta:

¿Tienes una lista de todos los :símbolos de Discourse que se pueden usar en una consulta de insignia para ayudar a activarla?

La razón por la que pregunto es que veo que usaste :backfill y :post_id, y cuando miro este enlace, veo otros :símbolos de Ruby:

¿Existe una referencia concisa de los símbolos de Ruby de Discourse que se pueden usar en una consulta de insignia?

Sí encontré esto, relacionado con los disparadores de insignias (después de tu publicación anterior), que fue muy útil:

En ese artículo de Discourse, se mencionan estos ayudantes de disparador:

  • :user_ids
  • :post_ids
  • :backfill

¿Son estos tres “todos los que hay”?

¡Muchas gracias por tu ayuda!

3 Me gusta

@Falco ¡Genial! Una pregunta rápida… ¿esto debería funcionar en publicaciones anteriores? Cuando hago clic en “Vista previa de insignias otorgadas” obtengo “No hay insignias que asignar”.

Al hacer clic en “Vista previa con plan de consulta” obtengo

GroupAggregate  (cost=2021.68..2021.70 rows=1 width=16)
  Group Key: p.user_id
  ->  Sort  (cost=2021.68..2021.68 rows=1 width=8)
        Sort Key: p.user_id
        ->  Nested Loop  (cost=0.28..2021.67 rows=1 width=8)
              Join Filter: (t.category_id = c.id)
              ->  Nested Loop  (cost=0.28..2017.97 rows=1 width=12)
                    ->  Seq Scan on posts p  (cost=0.00..2009.66 rows=1 width=12)
                          Filter: ((deleted_at IS NULL) AND (cooked ~~ '%<span class="math">%'::text) AND (post_type = ANY ('{1,2,3}'::integer[])))
                    ->  Index Scan using topics_pkey on topics t  (cost=0.28..8.30 rows=1 width=8)
                          Index Cond: (id = p.topic_id)
                          Filter: ((deleted_at IS NULL) AND visible)
              ->  Seq Scan on categories c  (cost=0.00..3.35 rows=28 width=4)
                    Filter: (allow_badges AND (NOT read_restricted))