Insignias de invitación por invitarte a ti mismo

Descripción y Evidencia

Recientemente en 2.9.0beta2, los usuarios que ya tienen una cuenta pueden hacer clic en los enlaces de invitación. Pero generé enlaces de invitación, hice clic en ellos y decía que me invité a mí mismo y como soy TL2+ y hice clic en 5 enlaces de invitación diferentes, recibí la insignia Champion. Puedes ver una captura de pantalla a continuación. Estos están en los foros de Replit EDU y puedes ver mi perfil aquí.

También creé un enlace de invitación en los foros de Codecademy y dice que me invité a mí mismo allí también, lo que puedes ver a continuación. Mira mi perfil aquí.

Pasos de Reproducción

Alcanza TL2+ (por defecto), crea enlaces de invitación y luego haz clic en ellos. Dirá que te invitaste a ti mismo en tu perfil y que aceptaste tu invitación, como se muestra arriba. Y si creas suficientes enlaces de invitación, recibirás las insignias Campaigner y Champion.

4 Me gusta

A mí también me funciona. Ahora mi perfil dice que me invité a mí mismo.

6 Me gusta

Y deberías recibir la insignia de promotor. (Olvidé mencionarlo en la publicación original porque ya la tenía antes de esto)

2 Me gusta

¡Gracias por señalar esto! Al diseñar esta función, olvidé pensar como una persona malvada. :supervillain:

@dan ¿alguna idea sobre cómo solucionar este problema?

6 Me gusta

Personalmente, nunca miré el código de Discourse, pero algo como esto podría funcionar. (Esto está en JS porque es lo que mejor conozco)

if (invter != invitee) {
  inviter_count++
}
3 Me gusta

Este error ya está corregido. ¡Gracias de nuevo a @not-ethan por informarlo! Si notas algo mal con el sistema de invitaciones, háznoslo saber. Estamos trabajando activamente en ello.

5 Me gusta

Reabriendo porque perdí la pista de un PM de @not-ethan. @dan, si no es mucha molestia, ¿podrías ayudar?

¿Puedo tener un enlace al commit o PR de la corrección? Solo tengo curiosidad por saber cuál fue la corrección.

5 Me gusta

@tobiaseigen @dan creo que encontré el PR FIX: Do not increase invite count for current user by udan11 · Pull Request #15952 · discourse/discourse · GitHub

4 Me gusta

Reabierto a petición de @not-ethan. ¿Ha habido alguna regresión?

1 me gusta

Después de algunas pruebas adicionales, solo estoy experimentando esto en Replit Ask:


Pero no en meta ni en otro foro, todo lo que dice es que Ethan aceptó tu invitación pero no otorga las insignias.

1 me gusta

No importa, acabo de conseguir las insignias aquí en meta y en ese otro foro. Tardé como 12 horas.

3 Me gusta

Confirmo.

1 me gusta

Hola gente,

hay un error por el cual puedes crear un código de invitación y canjearlo tú mismo, haciendo esto puedes obtener las insignias de invitación, lo cual es molesto. Esto fue mencionado por @not-ethan y se hizo una pull request, pero el error sigue activo. Mi idea era si alguien usa un código de invitación para la web, pero esa persona está conectada, ¡que el código falle!

2 Me gusta

Gracias por plantear esto de nuevo, Urias. Estamos tratando de no tocar demasiado el sistema de invitaciones en este momento, porque es complejo y hacer cambios puede tener consecuencias no deseadas y no planificadas.

¿Hay alguna manera de eludir este problema cambiando la forma en que se otorga la insignia? Por ejemplo, si la persona que canjea la invitación ya es miembro, ¿no se otorga la insignia de “campaigner” a la persona que creó la invitación?

Esto me parece un problema que probablemente ha existido durante mucho tiempo y ha pasado desapercibido. Otra respuesta podría ser tratar esto como “no hacer nada, funciona según lo diseñado” y dejar que los moderadores de la comunidad lo aborden si les preocupa que las personas abusen de este método para obtener más insignias.

4 Me gusta

Probablemente necesite revisar mi SQL :slightly_smiling_face:, pero creo que podría agregar esta línea a la consulta de la insignia para evitar que se otorgue a personas que se han invitado a sí mismas: AND i.invited_by_id <> u2.id

Así que algo como esto:

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 Me gusta

¡Genial! Hace tiempo que no juego con el sistema de insignias, pero ahora que lo miro, no veo las insignias relacionadas con las invitaciones en la interfaz de administración de insignias. ¿Quizás estas son insignias del sistema que deben editarse en el núcleo de Discourse?

2 Me gusta