リーダーボードのURLを何らかの方法で手動でリセットすることは可能ですか?
例えば、leaderboards/2 を leaderboards/1 に変更するなど。
リーダーボードのURLを何らかの方法で手動でリセットすることは可能ですか?
例えば、leaderboards/2 を leaderboards/1 に変更するなど。
追加の報酬としてユーザーにポイントを付与することは可能ですか? ![]()
以下も参照してください。
この中に以下のcurlリクエストがあります。
curl --location 'https://my.discourse.com/admin/plugins/gamification/score_events' \
--header 'Api-Key: <your key>' \
--header 'Api-Username: <your username>' \
--header 'Content-Type: application/json' \
--data '{
"user_id": "101",
"date": "2024-05-15",
"points": "-141",
"description": "Gamification point adjustment"
}'
管理画面でこのプラグインを有効にしましたが、タブバーに「Leaderboard」が自動で表示されません。新しいランキングを追加しても表示されません。なぜでしょうか?これらのランキングはどこで見ればよいですか?
サイドバーに自分で追加する必要があると思います
。リーダーボードは /leaderboard、/leaderboard/2、/leaderboard/3 などにあります。
特定のカテゴリまたはタグのリーダーボードを作成することは可能ですか?
リーダーボードはグループに紐づいています。しかし、ゲーミフィケーションの設定で、どのカテゴリがすべてのリーダーボードに影響するかを指定できます。例えば、このコミュニティで#supportリーダーボードを持つために、それをリーダーボードに移動させるのは面白いアイデアのようです。
2件の投稿が新しいトピックに分割されました: フラグが付けられたユーザーのポイント削減
ランキングから自分を除外する方法はありますか?
はい、新しいグループ(「leaderboard-exclusion」などと呼んでください)を自身に追加し、プラグイン設定でそのグループを除外してください。
編集:これにより、後で同じグループに誰かを追加するだけで、その人も簡単に追加で除外できるようになります。![]()
どうもありがとうございます。それは理にかなっています。
バージョン 2026.1.0 にアップグレードした後、月間リーダーボードを新しく作成したところ、以下のルートにアクセスした際にエラーが発生しました。
http://localhost:4200/admin/plugins/discourse-gamification/leaderboards
エラーは以下の通りです。
assert.js:40
Uncaught (in promise) Error: Assertion Failed: You attempted to update `_value` on `TrackedStorageImpl`, but it had already been used previously in the same computation. Attempting to update a value after using it in a computation can cause logical errors, infinite revalidation bugs, and performance issues, and is not supported.
`_value` was first used:
- While rendering:
{{outlet}} for -top-level
-top-level
{{outlet}} for application
application
DiscourseRoot
{{outlet}} for admin
admin
{{outlet}} for adminPlugins
admin-plugins
{{outlet}} for adminPlugins.show
show
AdminPluginConfigPage
AdminPluginConfigArea
{{outlet}} for adminPlugins.show.discourse-gamification-leaderboards
adminPlugins.show.discourse-gamification-leaderboards
{{outlet}} for adminPlugins.show.discourse-gamification-leaderboards.index
discourse-gamification-leaderboards
DPageSubheader
(result of a `unknown` helper)
Stack trace for the update:
at TrackedArray._dirtyCollection2 (array.ts:163:13)
at Object.set (array.ts:126:15)
at Proxy.sort (<anonymous>)
at AdminPluginsShowDiscourseGamificationLeaderboardsIndexController.sortedLeaderboards (index.js:23:1)
at AdminPluginsShowDiscourseGamificationLeaderboardsIndexController.<anonymous> (handle-descriptor.js:67:17)
問題が発生しているファイルは以下で特定しました。
plugins/discourse-gamification/admin/assets/javascripts/discourse/controllers/admin-plugins/show/discourse-gamification-leaderboards/index.js
具体的なコードは以下の通りです。
@discourseComputed("model.leaderboards.@each.updatedAt")
sortedLeaderboards(leaderboards) {
return (
leaderboards?.sort((a, b) => compare(b?.updatedAt, a?.updatedAt)) || [] // 22行
);
}
エラーの原因は以下の通りです。
Ember.js(正確には Glimmer のトラッキングシステム)におけるリアクティブな状態管理のアサーションエラー。核心的な理由は、同じ計算サイクル内で tracked (追跡対象) の値を先に読み取り、その後でその値を変更しようとしたことです。このような「使用後に更新」する操作は、論理的な混乱、無限再帰バグ、パフォーマンスの問題を引き起こす可能性があるため、Ember によって直接禁止されています。
重要な問題点:
Array.sort() は元の配列をインプレースで変更するため、@tracked の leaderboards 状態が更新されてしまう。
計算プロパティ (sortedLeaderboards) の役割は新しい値を導出することであり、元の状態を変更することではありません。そのため、それは「純粋関数」(副作用がなく、入力源を変更しない)であるべきです。
以下が修正案です。
@discourseComputed("model.leaderboards.@each.updatedAt")
sortedLeaderboards(leaderboards) {
return (
//leaderboards?.sort((a, b) => compare(b?.updatedAt, a?.updatedAt)) || []
leaderboards?.slice().sort((a, b) => compare(b?.updatedAt, a?.updatedAt)) || []
);
}
修正後のスクリーンショット:
そして、このような類似の問題は珍しくないようです。Ember.js のアップグレードに伴う非互換性の問題ではないかと推測されます。しかし、これらのプラグイン内の多くの箇所は、この作業が言うほど簡単ではないため、アップグレードに合わせて同期的に修正されていません。
質問:ポイントが付与されるまでに遅延はありますか?例えば、新しいユーザーがトピックの投稿や「いいね」をするといったポイントを獲得する行動をしても、スコアに反映されません。設定でトラストレベル0を含めているので、ポイント付与に遅延があるだけだと仮定していますが、その場合、どのくらいの頻度で計算・更新されるのでしょうか?よろしくお願いします!