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.
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.
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)
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.
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 !
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.
Mon SQL a probablement besoin d’être vérifié , 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) )
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 ?