Возможно ли как-то вручную сбросить или изменить URL таблицы лидеров? В нашем случае мы протестировали несколько таблиц лидеров, а затем удалили их.
Например, изменить /leaderboards/5 на /leaderboards/1.
Возможно ли как-то вручную сбросить или изменить URL таблицы лидеров? В нашем случае мы протестировали несколько таблиц лидеров, а затем удалили их.
Например, изменить /leaderboards/5 на /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» или как-то иначе), а затем исключите эту группу в настройках плагина.
edit: это также позволит вам легко исключить любого другого пользователя, если вы захотите сделать это позже, просто добавив его в ту же группу. ![]()
Большое спасибо. Это имеет смысл.
После обновления до версии 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() изменяет исходный массив на месте, обновляя состояние leaderboards с аннотацией @tracked.
Вычисляемое свойство (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, поэтому я предполагаю, что это просто задержка в присвоении баллов? Если да, то как часто происходит расчёт и обновление? Спасибо!
Я хотел бы вернуться к этой идее. На данный момент я заблокировал таблицы лидеров одной категорией, но перенос этого в индивидуальную таблицу лидеров был бы лучше.
Это то, что мы действительно хотим сделать, вопрос лишь в том, чтобы найти время для этого или найти клиента, который спонсирует эту работу.
Привет,
Я создал новую таблицу лидеров, но она стерла настройки моей исходной таблицы лидеров.
Есть ли способ выбрать, какую таблицу лидеров видят пользователи на фронтенде?