Возможно ли как-то вручную сбросить или изменить 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, поэтому я предполагаю, что это просто задержка в присвоении баллов? Если да, то как часто происходит расчёт и обновление? Спасибо!
Я хотел бы вернуться к этой идее. На данный момент я заблокировал таблицы лидеров одной категорией, но перенос этого в индивидуальную таблицу лидеров был бы лучше.
Это то, что мы действительно хотим сделать, вопрос лишь в том, чтобы найти время для этого или найти клиента, который спонсирует эту работу.
Привет,
Я создал новую таблицу лидеров, но она стерла настройки моей исходной таблицы лидеров.
Есть ли способ выбрать, какую таблицу лидеров видят пользователи на фронтенде?
Было бы здорово, если бы это позволяло также начислять очки за пользовательские события. Например, я планировал использовать плагин Discourse Points Mall для наших модераторов и, возможно, даже для участников сообщества, чтобы награждать их за активность в нашем Discord и, возможно, в игре в будущем.
Это могло бы работать как система ручного начисления или как код, который нужно активировать. Я понимаю, что область применения этого плагина больше ориентирована на взаимодействия на уровне Discourse, но было бы приятно увидеть возможность его расширения. Ведь в моём случае Discourse — лишь часть нашей экосистемы, а не единственная точка присутствия.
Дополнение для уточнения: я знаю, что описанные выше задачи можно решить через API, но считаю, что эти методы больше подходят для внешних источников. И хотя они тоже могут начислять очки, наличие нативного решения всё же было бы предпочтительнее ![]()