説明と証拠
最近、2.9.0beta2 では、すでにアカウントを持っているユーザーが招待リンクをクリックできるようになりました。しかし、私が生成した招待リンクをクリックしたところ、自分が招待したと表示され、TL2以上であったため、私の招待リンクを5回クリックした結果、Championバッジ を受け取りました。そのスクリーンショットを以下に示します。これらはReplit EDUフォーラム にあり、私のプロフィールはこちら で表示できます。
Codecademyフォーラム でも招待リンクを作成しましたが、そこでも自分が招待したと表示されます。これは以下で確認できます。私のプロフィールはこちら で表示できます。
再現手順
デフォルトでTL2以上に到達し、招待リンクを作成してクリックします。上記のように、プロフィールに自分が招待したと表示され、招待を受け入れたと表示されます。十分な招待リンクをクリックすると、CampaignerおよびChampionバッジを受け取ります。
「いいね!」 4
Moin
2022 年 2 月 14 日午後 5:15
2
ここでもうまくいきました。これで、私のプロフィールには自分で招待されたと表示されています。
「いいね!」 6
そして、あなたはプロモーターバッジを受け取るはずです。(以前から持っていたので、元の投稿で言及するのを忘れました)
「いいね!」 2
ご指摘ありがとうございます!この機能の設計時、悪役の視点を持つことを忘れていました。
@dan この問題の解決策について何か考えはありますか?
「いいね!」 6
私は個人的にDiscourseのコードを見たことはありませんが、このようなものが機能するかもしれません。(これは私が一番よく知っているJSで書かれています)
if (invter != invitee) {
inviter_count++
}
「いいね!」 3
このバグは修正されました。ご報告いただいた @not-ethan さん、ありがとうございました!招待システムで何か問題にお気づきの際は、ぜひお知らせください。現在、積極的に対応中です。
「いいね!」 5
@not-ethan からの PM を見失っていたため、再オープンします。@dan 、お手数でなければお手伝いいただけますか?
修正のコミットまたは PR へのリンクを教えていただけますか?修正内容が気になります。
「いいね!」 5
@not-ethan のリクエストにより再オープンされました。何らかの回帰がありましたか?
「いいね!」 1
追加のテストを行ったところ、この問題はReplit Askでのみ発生しています。
しかし、metaや他のフォーラムでは発生せず、表示されるのは「Ethanがあなたの招待を受け入れました」というメッセージのみで、バッジは付与されません。
「いいね!」 1
もういいです。Metaと他のフォーラムでバッジを取得しました。12時間かかりました。
「いいね!」 3
urias
(Hugoonreplit)
2022 年 12 月 4 日午後 12:01
18
皆さん、こんにちは。
招待コードを作成して自分で利用できてしまうバグがあり、それによって招待バッジを獲得できてしまうという、厄介な問題が発生しています。この問題は@not-ethanさんによって指摘され、プルリクエストも作成されましたが、バグはまだ修正されていません。私のアイデアは、誰かがウェブで招待コードを使用しようとした際に、その人が既にログインしている場合はコードを無効にするというものです。
「いいね!」 2
Urias、再度ご指摘いただきありがとうございます。招待システムは現在非常に複雑であり、変更を加えると予期せぬ意図しない結果を招く可能性があるため、現時点ではあまり触れたくないと考えています。
Ethan:
バッジの付与方法を変更することで、この問題を回避する方法はありますか?例えば、招待を償還する人がすでにメンバーである場合、招待を作成した人にキャンペーン担当者バッジを付与しない、といった方法です。
これは、おそらく長い間存在していたものの、見過ごされていた問題のように思われます。別の解決策としては、これを「何もしない、仕様通り」として扱い、コミュニティモデレーターがこの方法を悪用してバッジを増やそうとする人がいる場合に、彼らに対応を任せるという方法も考えられます。
「いいね!」 4
私のSQLは確認が必要かもしれませんが、招待者自身を招待した場合に付与されないように、バッジクエリにこの行を追加できると思います - AND i.invited_by_id <> u2.id
例えば、以下のようになります。
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
クール!しばらくバッジシステムで遊んでいませんでしたが、今見ると管理者のバッジUIに招待関連のバッジが見当たりません。これらはコアディスコースで編集する必要があるシステムバッジなのでしょうか?
「いいね!」 2