Staff-система

Staff-система предназначена для управления внутренним составом команды сервера.

С её помощью можно:

  • назначать администраторов и модераторов;
  • создавать собственные staff-ранги;
  • привязывать ранги к Discord-ролям;
  • выдавать сотрудникам выговоры;
  • оформлять отпуска;
  • автоматически применять наказания за выговоры;
  • вести KPI и статистику активности;
  • хранить служебные заметки и комментарии;
  • публиковать обновляемый список персонала;
  • просматривать журнал staff-событий;
  • экспортировать и импортировать часть настроек.

Важно: предупреждения обычных участников и выговоры сотрудников — разные системы. Staff-выговоры не отображаются в разделе обычной модерации и не влияют на пользовательские команды warn.

Как начать работу

Откройте страницу «Staff-система».

Доступ к панели имеют:

  • владелец сервера;
  • участники с разрешением Discord Администратор;
  • участники с разрешением Управлять сервером.

У Staff-системы нет отдельного переключателя. Она работает, пока бот находится на сервере.

Для первоначальной настройки:

  1. Добавьте администраторов и модераторов через панель или команды Discord.
  2. Создайте хотя бы один тип выговора.
  3. При необходимости выберите канал для списка персонала.
  4. Настройте собственные ранги или используйте стандартные.
  5. Если рангам соответствуют Discord-роли, привяжите их командой /staff rank bind.
  6. После настройки ролей выполните /staff rank sync.

Владелец сервера всегда может использовать защищённые staff-команды.

При этом владелец автоматически не добавляется:

  • в список сотрудников;
  • в staff-профили;
  • в KPI;
  • в таблицу персонала.

Чтобы он отображался как сотрудник, его необходимо отдельно добавить в Staff-систему.

Уровни доступа

Staff-система использует собственные внутренние уровни доступа.

Уровень доступаКто получаетВозможности
Владелец сервераВладелец текущего Discord-сервераИмеет полный доступ ко всем защищённым staff-командам и импорту.
Staff-администраторСотрудник с рангом уровня 4 и выше или участник из списка администраторовУправление составом, рангами, выговорами, политиками, заметками, аудитом и экспортом.
Staff-модераторСотрудник с рангом уровня 2 и выше или участник из списка модераторовПросмотр KPI-топа и управление собственным отпуском.
Делегированная Discord-рольРоль с точечным правом staff.*Получает доступ только к конкретным делегированным командам. Staff-ранг при этом не назначается.
Обычный участникЛюбой участник сервераМожет открыть /staff profile, если нужные данные разрешены настройками профиля.

Приоритет назначенного ранга

Если участнику назначен отдельный staff-ранг, его уровень имеет приоритет над списками панели.

Например:

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

Для таких сотрудников используйте команды:

  • /staff rank assign;
  • /staff promote;
  • /staff demote;
  • /staff admin delete;
  • /staff mod delete.

Если сотрудника с назначенным рангом уже удалили только через панель:

  1. временно верните его в соответствующий список;
  2. выполните /staff admin delete или /staff mod delete.

Разрешение Discord «Администратор»

Участник с разрешением Discord Администратор автоматически проходит точечные проверки:

  • staff.warn;
  • staff.unwarn;
  • staff.add_mod;
  • staff.add_admin.

Однако это не делает его Staff-администратором для всех команд.

Например, такой участник может получить доступ к управлению составом или выговорами, но команда /staff rank assign всё равно требует внутренний staff-уровень 4 или выше.

Отстранённые сотрудники

Автоматически отстранённый сотрудник временно теряет права:

  • Staff-модератора;
  • Staff-администратора.

При этом:

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

Основные настройки

ПараметрГде настраиваетсяПо умолчаниюОписание
АдминистраторыПанель, /staff admin add, /staff admin deleteСписок пустДаёт базовый staff-уровень 4, если отдельный ранг не назначен.
МодераторыПанель, /staff mod add, /staff mod deleteСписок пустДаёт базовый staff-уровень 2, если отдельный ранг не назначен.
Канал списка персоналаПанель, /staff list, /staff channelНе выбранКанал с автоматически обновляемым сообщением о составе Staff.
Типы выговоровПанель, /staff warntype add, /staff warntype deleteСписок пустСправочник категорий, используемых при выдаче выговора.
Префикс сотрудника/staff prefixПустоТекст перед упоминанием сотрудника в опубликованном списке.
Суффикс сотрудника/staff suffixПустоТекст после упоминания сотрудника в опубликованном списке.
Системный канал/staff setlogsНе выбранСохраняется в настройках, но текущая версия бота не отправляет в него уведомления.
Staff-ранги/staff rank ...Пять стандартных ранговОпределяют внутренний уровень доступа и могут быть связаны с Discord-ролями.
Политики наказаний/staff policy ...Не настроеныАвтоматически понижают, отстраняют или снимают сотрудника после накопления выговоров.

Изменения списков администраторов и модераторов в панели применяются после нажатия Сохранить.

Операции с типами выговоров применяются сразу.

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

Управление составом

КомандаПараметрыКто может использоватьОписание
/staff admin addmemberВладелец, Discord-администратор или право staff.add_adminНазначает администратора, удаляет его из модераторов и синхронизирует staff-роль.
/staff admin deletememberВладелец, Discord-администратор или право staff.add_adminПолностью снимает администратора, удаляет его из staff-списков и снимает назначенный ранг.
/staff mod addmemberStaff-администратор или право staff.add_modНазначает модератора, удаляет его из администраторов и синхронизирует staff-роль.
/staff mod deletememberStaff-администратор или право staff.add_modСнимает модератора, завершает его отпуск и убирает отстранение.

Если существует ранг уровня 4, команда /staff admin add также назначает его новому администратору.

Если существует ранг уровня 2, команда /staff mod add назначает его новому модератору.

Список персонала

Бот может публиковать автоматически обновляемое сообщение со списком сотрудников.

Для настройки используйте:

/staff list channel:<канал>

или:

/staff channel channel:<канал>

Обе команды выбирают один и тот же канал.

В сообщении отображаются:

  • администраторы;
  • модераторы;
  • активные выговоры по типам;
  • отпуск;
  • отстранение;
  • индивидуальные префиксы и суффиксы.

Участники, которые больше не находятся на сервере, в опубликованный список не попадают.

Бот обновляет сообщение:

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

Требования к каналу

Боту необходимы разрешения:

  • Просматривать канал;
  • Отправлять сообщения;
  • Встраивать ссылки;
  • Читать историю сообщений.

Оформление сотрудников

КомандаОписание
/staff prefix member:<участник> prefix:<текст>Добавляет текст перед упоминанием сотрудника.
/staff suffix member:<участник> suffix:<текст>Добавляет текст после упоминания сотрудника.
/staff unprefix [member:<участник>]Удаляет префикс. Без параметра удаляет собственный.
/staff unsuffix [member:<участник>]Удаляет суффикс. Без параметра удаляет собственный.
/staff clearsf [member:<участник>]Удаляет префикс и суффикс одновременно.

Эти значения используются только в опубликованном списке персонала.

Изменения префиксов и суффиксов не записываются в staff-аудит.

Типы выговоров

Перед выдачей staff-выговора необходимо создать хотя бы один тип.

Например:

  • нарушение регламента;
  • низкая активность;
  • некорректное общение;
  • злоупотребление полномочиями.
КомандаОписание
/staff warntype add name:<название>Создаёт новый тип выговора.
/staff warntype delete name:<название>Удаляет тип, если у него нет активных выговоров.

Через Discord-команду можно создать не больше пяти типов.

Названия сравниваются без учёта регистра, поэтому создать два одинаковых названия через команду нельзя.

Различие панели и команды

Команда /staff warntype delete:

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

Панель:

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

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

Выдача выговора

Команда:

/staff mod warn member:<участник> wtype:<тип> duration:<срок> reason:<причина>

создаёт активный staff-выговор.

Параметры duration и reason необязательны.

Если срок не указан, выговор будет бессрочным.

Причина может содержать до 500 символов.

Поддерживаемые сроки

Можно использовать составные значения:

1h30m
7d
2 дня
1д12ч

Поддерживаются:

  • годы;
  • месяцы;
  • недели;
  • дни;
  • часы;
  • минуты;
  • секунды.

Итоговый срок должен быть больше нуля.

Просмотр и снятие выговоров

КомандаКто может использоватьОписание
/staff mod warnsStaff-администратор, staff.warn или staff.unwarnПоказывает активные выговоры и их ID.
/staff mod historyStaff-администратор, staff.warn или staff.unwarnПоказывает до 15 последних выговоров любого состояния.
/staff mod unwarnStaff-администратор или staff.unwarnСнимает один активный выговор по ID.
/staff mod bulkunwarnStaff-администратор или staff.unwarnСнимает все активные выговоры участника или только выбранного типа.

Каждый выговор получает уникальный ID внутри сервера.

После ручного снятия запись остаётся в истории со статусом Снят.

Когда срок заканчивается, бот примерно в течение 15 секунд:

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

Закрытые личные сообщения не мешают обработке выговора.

Ограничение действий по иерархии

Действовать против Staff-сотрудника может только пользователь с более высоким уровнем.

Например, сотрудник уровня 4 не может выдать выговор другому сотруднику уровня 4.

Если автор получил команду только через точечное право Discord-роли и не имеет staff-ранга, сравниваются обычные Discord-роли:

  • верхняя роль автора должна находиться выше верхней роли цели.

Владельца сервера изменить через staff-команды нельзя.

Staff-ранги

При первом использовании системы рангов создаётся стандартная линейка:

РангУровеньПрава
Trainee1Сотрудник без защищённых staff-команд.
Moderator2Staff-модератор.
Senior Moderator3Staff-модератор.
Administrator4Staff-администратор.
Head Administrator5Staff-администратор с возможностью управлять уровнями 4 и ниже.

Названия рангов можно изменять созданием собственной структуры.

Команды рангов

КомандаОписание
/staff rank create name:<название> level:<уровень>Создаёт новый ранг.
/staff rank delete name:<название>Удаляет ранг, если он никому не назначен.
/staff rank assign member:<участник> name:<ранг>Назначает участнику конкретный ранг.
/staff rank listПоказывает ранги, уровни, внутренние ID и привязанные роли.
/staff rank bind name:<ранг> role:<роль>Привязывает ранг к Discord-роли.
/staff rank unbind name:<ранг>Удаляет привязку роли.
/staff rank syncПересчитывает роли всех сотрудников.
/staff promote member:<участник>Повышает сотрудника до ближайшего более высокого ранга.
/staff demote member:<участник>Понижает сотрудника до ближайшего более низкого ранга.

Ограничения управления рангами

Staff-администратор может управлять только рангами и сотрудниками с уровнем строго ниже собственного.

Например, сотрудник уровня 4:

  • может управлять уровнями 1–3;
  • не может назначить другому сотруднику уровень 4;
  • не может изменить сотрудника уровня 4 или 5.

Для повышения с уровня 3 до уровня 4 требуется:

  • сотрудник уровня 5;
  • либо владелец сервера.

Уровень пользовательского ранга должен быть от 1 до 99.

Название ранга может содержать до 50 символов.

Привязка Discord-ролей

К каждому staff-рангу можно привязать одну Discord-роль.

После синхронизации бот:

  • выдаёт роль текущего ранга;
  • снимает другие роли, привязанные к staff-рангам.

Чтобы бот мог управлять ролями:

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

Команда /staff rank bind не позволяет выбрать:

  • роль @everyone;
  • роль, управляемую ботом или интеграцией;
  • роль выше роли бота;
  • роль, уже привязанную к другому staff-рангу.

При замене или удалении привязки старая роль снимается с текущих сотрудников.

Если при массовой синхронизации возникают ошибки, команда /staff rank sync показывает не больше пяти из них.

KPI сотрудников

KPI начинает учитываться автоматически. Отдельно включать его не нужно.

Для текущих сотрудников учитываются:

ДействиеНачисление
Отправленное сообщение1 очко
Выданный staff-выговор5 очков
Один час в голосовом канале2 очка

Формула:

KPI = сообщения + выданные выговоры × 5 + голосовые часы × 2

Голосовое время хранится в секундах, а итоговое значение KPI приводится к целому числу.

Счётчики являются накопительными.

В текущей версии нет:

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

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

КомандаКто может использоватьОписание
/staff profile [member:<участник>]Любой участникПоказывает staff-профиль. Без параметра открывает собственный.
/staff stats member:<участник>Staff-администраторПоказывает ранг, статус, дату назначения и статистику выговоров.
/staff activity member:<участник>Staff-администраторПоказывает сообщения, голосовое время, выданные выговоры и KPI.
/staff topStaff-модераторПоказывает 10 записей с наибольшим KPI.

Видимые поля команды /staff profile зависят от настроек страницы «Профиль сотрудника».

Как учитывается активность

Сообщения добавляются в KPI сразу.

Голосовое время добавляется после завершения голосовой сессии — когда сотрудник выходит из канала.

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

Изменения staff-состава и отпусков применяются к KPI с задержкой до одной минуты.

Отпуска

Сотрудник уровня Staff-модератора и выше может самостоятельно начать отпуск.

КомандаОписание
/staff vacation start [duration:<срок>]Начинает собственный отпуск.
/staff vacation endЗавершает собственный отпуск.

Если срок не указан, отпуск продолжается до ручного завершения.

Отпуск с заданным сроком автоматически завершается примерно в течение 15 секунд после его окончания.

Во время отпуска в KPI не добавляются:

  • новые сообщения;
  • завершённые голосовые сессии;
  • выданные staff-выговоры.

Отпуск и отстранение — разные состояния. Отстранённый сотрудник продолжает получать KPI, если отдельно не находится в отпуске.

Автоматические наказания

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

КомандаОписание
/staff policy add wtype:<тип> threshold:<число> action:<действие>Создаёт политику.
/staff policy listПоказывает все политики и их ID.
/staff policy delete policy_id:<ID>Удаляет политику.

Допустимый порог — от 1 до 50 активных выговоров.

Доступные действия:

ДействиеРезультат
demoteПонижает сотрудника до ближайшего более низкого ранга.
suspendВременно лишает сотрудника staff-доступа.
remove_staffПолностью снимает staff-ранг и членство, завершает отпуск и синхронизирует роли.

Когда срабатывает политика

Политика применяется только в момент, когда количество активных выговоров становится точно равно установленному порогу.

Например, политика с порогом 3 сработает при получении третьего активного выговора.

Она:

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

Снятие отстранения

Отстранение автоматически снимается, когда количество активных выговоров становится ниже порогов всех оставшихся политик.

Это может произойти после:

  • ручного снятия выговора;
  • окончания срока выговора.

Удаление самой политики не запускает пересчёт отстранения.

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

Служебные заметки

Заметки предназначены для внутренней информации о сотруднике.

КомандаОписание
/staff note add member:<участник> text:<текст>Добавляет заметку до 1000 символов.
/staff note list member:<участник>Показывает 10 последних заметок и их авторов.
/staff note delete note_id:<ID>Удаляет заметку.

Ответы этих команд видны только вызвавшему пользователю.

Служебные комментарии

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

КомандаОписание
/staff comment add member:<участник> text:<текст>Добавляет комментарий до 300 символов.
/staff comment list member:<участник>Показывает 10 последних комментариев.
/staff comment delete comment_id:<ID>Удаляет комментарий.

Staff-аудит

Команда:

/staff audit

открывает журнал важных событий Staff-системы.

Можно указать участника, чтобы найти события, в которых он был целью.

В аудит попадают:

  • выдача, снятие и истечение выговоров;
  • назначение и снятие сотрудников;
  • изменение рангов;
  • отпуска;
  • заметки;
  • комментарии;
  • политики;
  • автоматические наказания;
  • импорт.

В аудит не записываются:

  • изменение префикса;
  • изменение суффикса;
  • смена каналов Staff-системы.

На одной странице показывается до 10 записей.

Кнопки навигации:

  • работают 120 секунд;
  • доступны только автору команды.

Системный канал

Команда:

/staff setlogs channel:<канал>

сохраняет канал системных уведомлений.

В текущей версии Staff-система не использует эту настройку при отправке уведомлений.

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

Экспорт

Команда:

/staff export

создаёт JSON-файл с частью настроек Staff-системы.

В экспорт входят:

  • основные настройки;
  • списки администраторов и модераторов;
  • каналы;
  • префиксы и суффиксы;
  • типы выговоров;
  • сами выговоры.

Файл отправляется скрытым ответом и виден только вызвавшему команду.

Экспорт содержит Discord ID сотрудников и причины выговоров. Не передавайте файл пользователям без staff-доступа.

Импорт

Команда:

/staff import file:<файл> dry_run:<значение>

доступна только владельцу сервера.

По умолчанию dry_run имеет значение True.

Это означает, что первый запуск:

  • проверяет файл;
  • показывает предполагаемый результат;
  • ничего не записывает.

Чтобы применить импорт, повторите команду с:

dry_run: False

Максимальный размер файла — 2 МБ.

Импорт выполняется целиком. Если часть данных некорректна, изменения не применяются.

Как объединяются данные

При импорте:

  • списки администраторов и модераторов объединяются с текущими;
  • каналы импортируются только в ещё не заполненные настройки;
  • типы выговоров сопоставляются по названию;
  • повторный выговор с тем же участником, типом и временем пропускается.

Что не входит в экспорт

Экспорт Staff-системы не является полным резервным копированием.

В него не входят:

  • staff-ранги;
  • привязки Discord-ролей;
  • политики автоматических наказаний;
  • KPI и статистика;
  • отпуска;
  • заметки;
  • комментарии;
  • staff-аудит;
  • настройки видимости профиля.

После импорта эти разделы необходимо настраивать отдельно.

Ограничения

ОграничениеЗначение
Типов выговоров через команду или импорт5
Длина названия типа в панелиОт 1 до 100 символов
Причина выговораДо 500 символов
История /staff mod history15 последних записей
Текст заметкиДо 1000 символов
Текст комментарияДо 300 символов
Список заметок и комментариевПо 10 последних записей
Имя рангаДо 50 символов
Уровень рангаОт 1 до 99
Порог политикиОт 1 до 50
KPI-топ10 записей
Staff-аудит10 записей на страницу
Время работы кнопок аудита120 секунд
Размер файла импортаДо 2 МБ
Обновление списка персоналаПримерно каждые 15 минут
Проверка сроков выговоров и отпусковПримерно каждые 15 секунд
Применение изменений состава к KPIДо 60 секунд

Панель не управляет назначенными рангами

Изменение базовых списков в панели:

  • не снимает назначенный staff-ранг;
  • не синхронизирует Discord-роли;
  • не выполняет полное удаление ранжированного сотрудника.

После массовых изменений рекомендуется использовать:

/staff rank sync

Дата назначения через панель

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

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

После создания записи датой назначения станет момент её создания, а не фактическая дата добавления через панель.

Ограничения типов выговоров в панели

Панель:

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

Такие настройки нельзя полностью воспроизвести через Discord-команду или импорт.

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

Бывшие сотрудники в KPI

Таблица /staff top строится по всем сохранённым записям KPI, а не только по текущему staff-составу.

После снятия сотрудника:

  • его KPI не удаляется;
  • он может продолжать отображаться в топе.

Отстранение не останавливает KPI

Отстранённый сотрудник теряет защищённые staff-права, но продолжает накапливать:

  • сообщения;
  • голосовое время.

Полностью приостанавливает KPI только активный отпуск.