Inviter des badges en s'invitant soi-même

Description et preuves

Récemment, dans la version 2.9.0beta2, les utilisateurs qui ont déjà un compte peuvent cliquer sur les liens d’invitation. Mais j’ai généré des liens d’invitation, j’ai cliqué dessus et il a été dit que je m’étais invité moi-même et comme je suis TL2+ et que j’ai cliqué sur 5 liens d’invitation différents, j’ai reçu le badge Champion. Vous pouvez voir une capture d’écran ci-dessous. Ceux-ci se trouvent sur le forum Replit EDU et vous pouvez consulter mon profil ici.

J’ai également créé un lien d’invitation sur le forum Codecademy et il est indiqué que je m’y suis invité moi-même, ce que vous pouvez voir ci-dessous. Consultez mon profil ici.

Étapes de reproduction

Atteignez TL2+ (par défaut), créez des liens d’invitation que vous cliquez ensuite. Il sera indiqué que vous vous êtes invité vous-même sur votre profil et que vous avez accepté votre invitation, comme montré ci-dessus. Et si vous créez suffisamment de liens d’invitation, vous recevrez les badges Campaigner et Champion.

4 « J'aime »

Ça fonctionne pour moi aussi ici. Maintenant, mon profil indique que j’ai été invité par moi-même.

6 « J'aime »

Et vous devriez recevoir le badge de promoteur. (J’ai oublié de le mentionner dans le message original car je l’avais déjà avant cela)

2 « J'aime »

Merci d’avoir signalé cela ! En concevant cette fonctionnalité, j’ai oublié de penser comme un méchant. :supervillain:

@dan des idées sur la façon de résoudre ce problème ?

6 « J'aime »

Je n’ai jamais regardé le code de discourse personnellement, mais quelque chose comme ceci pourrait fonctionner. (Ceci est en JS car c’est ce que je connais le mieux)

if (invter != invitee) {
  inviter_count++
}
3 « J'aime »

Ce bug est maintenant corrigé. Merci encore @not-ethan de l’avoir signalé ! Si vous remarquez quoi que ce soit d’anormal avec le système d’invitation, faites-le nous savoir. Nous y travaillons activement.

5 « J'aime »

Réouverture car j’ai perdu de vue un MP de @not-ethan. @dan, si cela ne vous dérange pas, pourriez-vous m’aider ?

Puis-je avoir un lien vers le commit ou la PR pour la correction ? Je suis juste curieux de savoir quelle était la correction.

5 « J'aime »

@tobiaseigen @dan Je pense avoir trouvé le PR FIX: Do not increase invite count for current user by udan11 · Pull Request #15952 · discourse/discourse · GitHub

4 « J'aime »

Rouvert à la demande de @not-ethan. Y a-t-il eu une régression d’une manière ou d’une autre ?

1 « J'aime »

Après des tests supplémentaires, je ne rencontre ce problème que sur Replit Ask :


Mais pas sur meta ou sur un autre forum, tout ce qui est dit est que Ethan a accepté votre invitation mais cela n’accorde pas les badges.

1 « J'aime »

Laissez tomber, j’ai juste obtenu les badges ici sur Meta et sur cet autre forum. Cela a pris environ 12 heures.

3 « J'aime »

Je confirme.

1 « J'aime »

Salut tout le monde,

Il y a un bug qui permet de créer un code d’invitation et de l’échanger soi-même, ce qui permet d’obtenir les badges d’invitation, ce qui est gênant. Ceci a été mentionné par @not-ethan et une pull request a été faite, mais le bug est toujours actif. Mon idée était que si quelqu’un utilise un code d’invitation pour le web, mais que cette personne est connectée, le code échoue !

2 « J'aime »

Merci d’avoir soulevé ce point à nouveau, Urias. Nous cherchons à ne pas trop toucher au système d’invitation pour le moment, car il est complexe et des modifications peuvent avoir des conséquences imprévues et non planifiées.

Y a-t-il un moyen de contourner ce problème en modifiant la manière dont le badge est attribué ? Par exemple, si la personne qui utilise l’invitation est déjà membre, n’attribuez pas le badge de l’initiateur à la personne qui a créé l’invitation ?

Cela me semble être un problème qui existe probablement depuis longtemps et qui est passé inaperçu. Une autre réponse pourrait être de considérer cela comme un “ne rien faire, fonctionne comme prévu” et de laisser les modérateurs de la communauté s’en occuper s’ils sont préoccupés par des personnes abusant de cette méthode pour obtenir plus de badges.

4 « J'aime »

Mon SQL a probablement besoin d’être vérifié :slightly_smiling_face:, mais je pense que vous pourriez ajouter cette ligne à la requête de badge pour l’empêcher d’être accordée aux personnes qui se sont invitées elles-mêmes - AND i.invited_by_id <> u2.id

Donc quelque chose comme ceci :

SELECT u.id user_id, current_timestamp granted_at 
FROM users u 
WHERE u.id IN (
  SELECT invited_by_id 
  FROM invites i 
  JOIN invited_users iu ON iu.invite_id = i.id 
  JOIN users u2 ON u2.id = iu.user_id 
  WHERE i.deleted_at IS NULL
  AND i.invited_by_id <> u2.id
  AND u2.active 
  AND u2.trust_level >= 0 
  AND u2.silenced_till IS NULL 
  GROUP BY invited_by_id 
  HAVING COUNT(*) >= 1 
) AND u.active AND u.silenced_till IS NULL AND u.id > 0 AND
(:backfill OR u.id IN (:user_ids) ) 	
4 « J'aime »

Génial ! Cela fait un moment que je n’ai pas joué avec le système de badges, mais en regardant maintenant, je ne vois pas les badges liés aux invitations dans l’interface d’administration des badges. Peut-être s’agit-il de badges système qui doivent être modifiés dans le cœur de Discourse ?

2 « J'aime »