Recentemente, na versão 2.9.0beta2, usuários que já possuem uma conta podem clicar em links de convite. No entanto, eu gerei links de convite e, ao clicar neles, apareceu que eu me convidei e, como sou TL2+, cliquei em 5 links de convite diferentes meus e recebi o badge Champion. Você pode ver uma captura de tela disso abaixo. Estes são nos fóruns Replit EDU e você pode ver meu perfil aqui.
Alcance TL2+ (por padrão), crie links de convite e clique neles. Dirá que você se convidou em seu perfil e que aceitou seu convite, como mostrado acima. E se você criar links de convite suficientes, receberá os badges Campaigner e Champion.
Este bug agora está corrigido. Obrigado novamente @not-ethan por reportá-lo! Se você notar qualquer problema com o sistema de convites, por favor, nos avise. Estamos trabalhando ativamente nele.
há um bug em que você pode criar um código de convite e resgatá-lo você mesmo, fazendo isso você pode obter os emblemas de convite, o que é irritante. Isso foi mencionado por @not-ethan e um pull request foi feito, mas o bug ainda está ativo. Minha ideia era se alguém usasse um código de convite para a web, mas essa pessoa estivesse logada, o código falhasse!
Obrigado por levantar isso novamente, Urias. Estamos tentando não mexer muito no sistema de convites no momento, porque ele é complexo e fazer alterações pode ter consequências não intencionais e não planejadas.
Existe alguma maneira de contornar esse problema mudando a forma como o distintivo é concedido? Por exemplo, se a pessoa que resgata o convite já é membro, não conceder o distintivo de “campaigner” à pessoa que criou o convite?
Isso me parece um problema que provavelmente existe há muito tempo e passou despercebido. Outra resposta seria tratar isso como “não fazer nada, funciona como projetado” e deixar para os moderadores da comunidade resolverem se estiverem preocupados com pessoas abusando desse método para obter mais distintivos.
Meu SQL provavelmente precisa ser verificado , mas acredito que você poderia adicionar esta linha à consulta do distintivo para impedir que ele seja concedido a pessoas que se convidaram - AND i.invited_by_id <> u2.id
Então, algo como isto:
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) )
Legal! Faz tempo que não mexo no sistema de badges, mas olhando agora, não vejo os badges relacionados a convites na interface de admin de badges. Talvez sejam badges do sistema que precisam ser editados no core do Discourse?