Création de badge personnalisé avec des règles personnalisées

Je souhaite créer un badge personnalisé auquel ces règles seront ajoutées, ce qui signifie simplement que lorsqu’un utilisateur accomplit les actions ci-dessous, le badge correspondant lui sera attribué automatiquement.
Les utilisateurs doivent accomplir les actions/règles ci-dessous :

  1. L’utilisateur doit avoir créé au moins 2 publications.
  2. L’utilisateur doit avoir téléchargé une photo de profil.
  3. L’utilisateur doit avoir aimé au moins une publication.

Remarque : J’ai vu la création de certains badges à l’aide de requêtes SQL. En fait, je suis très nouveau dans ce domaine, alors pourriez-vous s’il vous plaît me dire où placer les requêtes SQL (si nécessaire) pour réaliser ces règles ci-dessus.

1 « J'aime »

Est-ce que cela peut aider ?

4 « J'aime »

Salut, c’est vraiment utile.
J’ai activé l’option de requêtes SQL, il ne me reste qu’une petite chose et je serai prêt.

Comment visualiser la base de données car ma règle de badge personnalisée est complexe, c’est pourquoi j’ai besoin de quelques éléments :

  1. Comment visualiser la base de données, afin que je puisse construire ma propre requête
  2. Comment tester ces badges après avoir construit les requêtes.

Merci de répondre à ces 2 points, après quoi je pourrai dormir paisiblement.

1 « J'aime »

La manière la plus simple est d’installer le plugin discourse-data-explorer, qui fournira une interface comme celle-ci.

3 « J'aime »

J’ai installé le plugin et exécuté la commande SQL ci-dessous, qui me donne les utilisateurs qui remplissent ces 3 règles, mais je ne sais pas comment la convertir en un déclencheur lorsque l’utilisateur agit sur le post.

Commande 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

Je suis ce post Creating triggered custom badge queries mais je n’arrive toujours pas à créer le badge car je suis vraiment nouveau sur Discourse.

Merci de m’aider à résoudre ce problème, si je peux le faire une fois, je pourrai créer mes autres badges personnalisés plus facilement.
@Lhc_fl

1 « J'aime »

Ceci est un code SQL de « Déclencheur : Mise à jour quotidienne » ;

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

Les autres déclencheurs dépendent de quelque chose de spécifique, et je ne recommande pas de les utiliser à moins que vous ne trouviez un expert en SQL. (Je ne suis pas moi-même familier avec SQL)

3 « J'aime »

Merci beaucoup pour cela, j’ai juste trois questions de base -

  1. Qu’est-ce que la table st et u et quelle est l’utilité de ces deux tables et pourquoi ces tables ne sont-elles pas visibles dans l’onglet du plugin explorer

  2. Quand cette mise à jour du déclencheur quotidienne s’exécutera-t-elle, pour être précis, je demande l’heure.

  3. Quelle est l’utilité de Exécuter la requête de révocation quotidiennement

1 « J'aime »

En ce qui concerne 1 ?, ce sont des alias de table.

Voyez-vous la ligne FROM user_stats st ? Cela indique à la requête que st est l’abréviation de la table user_stats.

Il en va de même pour l’instruction JOIN où il est indiqué users u. Cela signifie que dans la requête, u est un alias pour la table users dans cette requête. Les alias sont utilisés pour simplifier les requêtes afin de réduire la saisie, ce qui diminue les risques d’erreurs.

En ce qui concerne 3, si vous activez cette option, alors si un utilisateur ne remplit plus les conditions pour un badge en fonction de la requête, le badge sera retiré de son compte.

3 « J'aime »

Merci d’avoir clarifié mes doutes, il ne reste plus que le deuxième point

  1. Quand cette mise à jour du déclencheur s’exécutera-t-elle quotidiennement, pour être précis, je demande l’heure.

Oups. Je pensais avoir répondu à ça.

La requête s’exécute toutes les 24 heures en fonction de l’heure à laquelle vous avez démarré le conteneur. J’ai donc une instance qui l’exécute vers 0h00 UTC (environ) et une autre instance l’exécute un peu après 6h00 UTC.

Pouvons-nous modifier les horaires d’exécution de cette requête ou la modifier pour qu’elle se déclenche « lorsqu’un utilisateur agit sur un article » ou lorsqu’« un utilisateur modifie ou crée un article » ?
Si possible, veuillez modifier la requête car je suis nouveau dans ce système de discussion. Si vous pouvez m’aider une fois, je pourrai créer mon propre badge personnalisé la prochaine fois.