Достижения

Достижения позволяют награждать участников за выполнение различных целей на сервере. За завершение достижения участник может получить:

  • очки экономики;
  • специальную роль;
  • отметку о выполнении в своём профиле достижений.

Участники могут открыть каталог достижений и посмотреть свой прогресс с помощью команды /achievements list.

Как открыть и включить

Управлять достижениями можно на странице «Достижения».

Для работы команд /achievements должен быть включён модуль Рейтинг:

  1. Откройте «Обзор сервера».
  2. Найдите раздел Модули.
  3. Убедитесь, что модуль Рейтинг включён.

По умолчанию модуль уже включён. Подробнее о нём можно прочитать в разделе «Рейтинг».

Каждое достижение также можно включать и выключать отдельно. Выключенное достижение:

  • не отображается участникам в каталоге;
  • не получает новый прогресс.

Уже накопленный прогресс при выключении достижения сохраняется.

Как создать достижение

  1. Откройте страницу «Достижения».
  2. Нажмите кнопку создания достижения.
  3. Укажите код, название, тип и необходимую цель.
  4. При необходимости добавьте описание, иконку, награду в очках или роль.
  5. Сохраните достижение.
  6. Убедитесь, что достижение включено.

После сохранения оно появится в каталоге участников.

Параметры достижения

ПараметрОграниченияОписание
КодДо 32 символов: латинские буквы, цифры и _Уникальный идентификатор достижения. Используется в административных командах, например msgs_100.
НазваниеДо 64 символовНазвание, которое увидят участники.
ОписаниеДо 200 символовНеобязательное пояснение условий достижения.
ТипОдин из 7 доступных типовОпределяет, какое действие должно увеличивать прогресс.
ЦельОт 1 до 1 000 000Количество действий, необходимое для завершения достижения.
Награда в очкахОт 0 до 100 000Количество очков, которое будет начислено на баланс экономики.
Роль-наградаНеобязательноРоль, которая будет выдана участнику после завершения достижения.
ИконкаДо 8 символовЭмодзи или короткий символ, отображаемый в каталоге.

Код должен быть уникальным в пределах сервера. После создания он используется для удаления, включения, выключения и ручной выдачи достижения.

Типы достижений

ТипЧто учитываетсяАвтоматический прогресс
clan_joinВступления участника в кланыРаботает
messagesОтправленные сообщенияРаботает
voice_secondsВремя в голосовых каналах в секундахРаботает
reputationПолученная положительная репутация через /rep giveРаботает
reactionsРеакции, поставленные участникомРаботает
invitesПриглашённые на сервер участникиРаботает
customЛюбое условие, проверяемое администраторомТолько ручная выдача

Прогресс начисляется, только пока включён модуль Рейтинг. Достижения типа custom увеличиваются исключительно через ручную выдачу.

Как считается каждый тип

Сообщения. Прогресс растёт вместе с опытом за сообщения и подчиняется тому же ограничению по времени: сообщение, за которое опыт не начислен (частые сообщения подряд, канал в списке игнорируемых, выключенный рейтинг), прогресса тоже не даёт.

Время в голосовых каналах. Прогресс начисляется не постепенно, а целиком по завершении голосовой сессии — когда участник выходит из канала или переходит в другой. Сессии короче 30 секунд и время в игнорируемых голосовых каналах не учитываются. Значение совпадает с тем, что бот записывает в общую статистику голосовой активности.

Репутация. Прогресс получает тот, кому дали репутацию, и только за положительную оценку. Команда /rep down прогресс не уменьшает и не увеличивает.

Реакции. Считаются реакции, которые участник поставил сам. Снятая реакция откатывает прогресс назад — иначе достижение можно было бы накрутить одной реакцией, снимая и ставя её заново. Уже завершённое достижение при этом не отменяется: выданные очки и роль остаются.

Приглашения. Прогресс получает тот, по чьей ссылке-приглашению зашёл новый участник. Чтобы это работало, у бота должно быть право Управлять сервером — без него Discord не отдаёт список приглашений.

Пригласивший останется неизвестным (и прогресс не начислится никому), если:

  • участник зашёл по личной ссылке сервера (vanity-URL) — у таких ссылок нет автора;
  • сразу несколько участников зашли одновременно и понять, кто кого привёл, невозможно;
  • бот был отключён и не успел снять первый снимок приглашений после перезапуска.

Вход ботов и возвращение по собственной ссылке прогресса не дают.

Команды участников

КомандаОписание
/achievements listПоказывает ваши достижения и текущий прогресс.
/achievements list user:<участник>Показывает достижения выбранного участника.
/achievements leaderboardПоказывает 10 участников с наибольшим количеством завершённых достижений.

Параметр user в команде /achievements list необязателен. Если его не указывать, бот покажет ваши достижения.

Команды администратора

Административные команды доступны пользователям с правами администратора или дополнительным правом achievements.manage.

КомандаОписание
/achievements admin createСоздать новое достижение.
/achievements admin delete <code>Удалить достижение и прогресс всех участников по нему.
/achievements admin toggle <code> <enabled>Включить или выключить достижение.
/achievements admin grant <user> <code>Вручную выдать достижение выбранному участнику.

Подробнее о дополнительных правах можно прочитать в разделе «Права для команд».

Ручная выдача

Команда /achievements admin grant сразу устанавливает прогресс участника на значение цели и завершает достижение.

После этого бот:

  • отмечает достижение как завершённое;
  • начисляет указанные очки;
  • пытается выдать роль-награду;
  • записывает событие в журнал.

Если участник уже завершил это достижение, повторная выдача ничего не изменит. Очки и роль повторно не выдаются.

Как рассчитывается прогресс

Прогресс достижения не может превышать установленную цель.

Когда прогресс достигает цели:

  1. достижение отмечается как завершённое;
  2. участнику начисляются очки;
  3. участнику выдаётся роль-награда, если она указана;
  4. событие записывается в журнал.

Одно достижение нельзя завершить несколько раз.

Настройка роли-награды

Чтобы бот смог выдать роль после завершения достижения:

  • у бота должно быть разрешение Управлять ролями;
  • роль бота должна находиться выше наградной роли в списке ролей сервера;
  • наградная роль не должна управляться другой интеграцией.

Если бот не сможет выдать роль, ошибка не будет показана участнику. Информация о ней будет записана только в технический журнал бота.

Управление через панель

На странице Достижения можно:

  • создавать достижения;
  • изменять название и описание;
  • изменять цель;
  • настраивать награду в очках;
  • выбирать роль-награду;
  • менять иконку;
  • включать и выключать достижения;
  • вручную выдавать достижения;
  • удалять достижения.

Для ручной выдачи через панель используется ID участника Discord.

Чтобы скопировать ID участника:

  1. Откройте настройки Discord.
  2. Перейдите в раздел Расширенные.
  3. Включите Режим разработчика.
  4. Нажмите правой кнопкой мыши по участнику.
  5. Выберите Копировать ID пользователя.

Ограничения

Ограничение списка

Команда /achievements list показывает не больше 25 достижений из-за ограничений сообщений Discord.

Если на сервере создано больше 25 включённых достижений, часть из них не будет отображаться в команде. Полный список останется доступен в панели управления.

История начислений

Очки за завершение достижения добавляются на баланс экономики, но не записываются в историю начислений.

Поэтому такие операции не отображаются в разделе истории на странице экономики.

Удаление достижения

При удалении достижения безвозвратно удаляются:

  • прогресс всех участников;
  • информация о завершении достижения;
  • само достижение и его настройки.

При этом уже выданные очки и роли автоматически не отзываются.

Перед удалением убедитесь, что достижение и связанный с ним прогресс больше не нужны.

Изменение цели

Если изменить цель уже существующего достижения, завершённость участников автоматически не пересчитывается.

Например, если участник уже завершил достижение с целью 10, он останется завершившим его даже после увеличения цели до 20.