Invita badge invitando te stesso

Descrizione e prove

Recentemente in 2.9.0beta2 gli utenti che hanno già un account possono fare clic sui link di invito. Ma i link di invito che ho generato e su cui ho fatto clic hanno detto che mi sono invitato da solo e poiché sono TL2+ e ho fatto clic su 5 diversi link di invito miei, ho ricevuto il badge Champion. Puoi vedere uno screenshot qui sotto. Questi sono nei forum Replit EDU e puoi visualizzare il mio profilo qui.

Ho anche creato un link di invito nei forum Codecademy e dice che mi sono invitato da solo anche lì, come puoi vedere sotto. Visualizza il mio profilo qui.

Passaggi per la riproduzione

Raggiungi TL2+ (per impostazione predefinita), crea link di invito che poi fai clic. Dirà che ti sei invitato da solo sul tuo profilo e che hai accettato il tuo invito, come mostrato sopra. E se crei abbastanza link di invito, riceverai i badge Campaigner e Champion.

4 Mi Piace

Funziona anche per me qui. Ora il mio profilo dice che sono stato invitato da me stesso.

6 Mi Piace

E dovresti ricevere il badge del promotore. (Ho dimenticato di menzionarlo nel post originale perché lo avevo già prima di questo)

2 Mi Piace

Grazie per averlo fatto notare! Quando ho progettato questa funzionalità, ho dimenticato di pensare come una persona malvagia. :supervillain:

@dan hai qualche idea su come risolvere questo problema?

6 Mi Piace

Non ho mai guardato il codice di discourse personalmente, ma qualcosa del genere potrebbe funzionare. (questo è in JS perché è quello che conosco meglio)

if (invter != invitee) {
  inviter_count++
}
3 Mi Piace

Questo bug è ora risolto. Grazie ancora @not-ethan per averlo segnalato! Se noti qualcosa che non va nel sistema di invito, faccelo sapere. Ci stiamo lavorando attivamente.

5 Mi Piace

Riapro perché ho perso di vista un PM da @not-ethan. @dan, se non ti dispiace troppo, potresti aiutarmi?

Posso avere un link al commit o alla PR per la correzione? Sono solo curioso di sapere qual è stata la correzione.

5 Mi Piace

@tobiaseigen @dan penso di aver trovato la PR FIX: Do not increase invite count for current user by udan11 · Pull Request #15952 · discourse/discourse · GitHub

4 Mi Piace

Riaperto su richiesta di @not-ethan. C’è stata una regressione in qualche modo?

1 Mi Piace

Dopo ulteriori test, sto riscontrando questo problema solo su Replit Ask:


Ma non su meta o su un altro forum, tutto ciò che dice è che Ethan ha accettato il tuo invito ma non concede i badge.

1 Mi Piace

Non importa, ho appena ottenuto i badge qui su Meta e sull’altro forum. Ci sono volute circa 12 ore.

3 Mi Piace

Confermo.

1 Mi Piace

Ehi gente,

c’è un bug per cui puoi creare un codice di invito e riscattarlo tu stesso, in questo modo puoi ottenere i badge di invito, il che è fastidioso. Questo è stato menzionato da @not-ethan ed è stata fatta una pull request, ma il bug è ancora attivo. La mia idea era se qualcuno usasse un codice di invito per il web, ma quella persona fosse loggata, il codice fallisse!

2 Mi Piace

Grazie per aver sollevato nuovamente la questione, Urias. Stiamo cercando di non toccare troppo il sistema di inviti al momento, perché è complesso e apportare modifiche può avere conseguenze impreviste e non pianificate.

C’è un modo per aggirare questo problema cambiando il modo in cui viene assegnato il badge? Ad esempio, se la persona che riscatta l’invito è già membro, non assegnare il badge del promotore alla persona che ha creato l’invito?

Questo mi sembra un problema che probabilmente esiste da molto tempo ed è passato inosservato. Un’altra soluzione potrebbe essere quella di trattarlo come “non fare nulla, funziona come previsto” e lasciare che siano i moderatori della community a occuparsene se sono preoccupati che le persone abusino di questo metodo per ottenere più badge.

4 Mi Piace

Probabilmente il mio SQL necessita di un controllo :slightly_smiling_face:, ma credo che potresti aggiungere questa riga alla query del badge per evitare che venga concessa a persone che si sono invitate da sole - AND i.invited_by_id <> u2.id

Quindi qualcosa del genere:

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 Mi Piace

Fantastico! Non gioco con il sistema dei badge da un po’ di tempo, ma ora che guardo non vedo i badge relativi agli inviti nell’interfaccia di amministrazione dei badge. Forse si tratta di badge di sistema che devono essere modificati nel core di Discourse?

2 Mi Piace