Staff-система
Staff-система предназначена для управления внутренним составом команды сервера.
С её помощью можно:
- назначать администраторов и модераторов;
- создавать собственные staff-ранги;
- привязывать ранги к Discord-ролям;
- выдавать сотрудникам выговоры;
- оформлять отпуска;
- автоматически применять наказания за выговоры;
- вести KPI и статистику активности;
- хранить служебные заметки и комментарии;
- публиковать обновляемый список персонала;
- просматривать журнал staff-событий;
- экспортировать и импортировать часть настроек.
Важно: предупреждения обычных участников и выговоры сотрудников — разные системы. Staff-выговоры не отображаются в разделе обычной модерации и не влияют на пользовательские команды
warn.
Как начать работу
Откройте страницу «Staff-система».
Доступ к панели имеют:
- владелец сервера;
- участники с разрешением Discord Администратор;
- участники с разрешением Управлять сервером.
У Staff-системы нет отдельного переключателя. Она работает, пока бот находится на сервере.
Для первоначальной настройки:
- Добавьте администраторов и модераторов через панель или команды Discord.
- Создайте хотя бы один тип выговора.
- При необходимости выберите канал для списка персонала.
- Настройте собственные ранги или используйте стандартные.
- Если рангам соответствуют Discord-роли, привяжите их командой
/staff rank bind. - После настройки ролей выполните
/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.
Если сотрудника с назначенным рангом уже удалили только через панель:
- временно верните его в соответствующий список;
- выполните
/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 add | member | Владелец, Discord-администратор или право staff.add_admin | Назначает администратора, удаляет его из модераторов и синхронизирует staff-роль. |
/staff admin delete | member | Владелец, Discord-администратор или право staff.add_admin | Полностью снимает администратора, удаляет его из staff-списков и снимает назначенный ранг. |
/staff mod add | member | Staff-администратор или право staff.add_mod | Назначает модератора, удаляет его из администраторов и синхронизирует staff-роль. |
/staff mod delete | member | Staff-администратор или право 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 warns | Staff-администратор, staff.warn или staff.unwarn | Показывает активные выговоры и их ID. |
/staff mod history | Staff-администратор, staff.warn или staff.unwarn | Показывает до 15 последних выговоров любого состояния. |
/staff mod unwarn | Staff-администратор или staff.unwarn | Снимает один активный выговор по ID. |
/staff mod bulkunwarn | Staff-администратор или staff.unwarn | Снимает все активные выговоры участника или только выбранного типа. |
Каждый выговор получает уникальный ID внутри сервера.
После ручного снятия запись остаётся в истории со статусом Снят.
Когда срок заканчивается, бот примерно в течение 15 секунд:
- переводит выговор в статус Истёк;
- записывает событие;
- пытается уведомить участника в личных сообщениях;
- пересчитывает возможное отстранение.
Закрытые личные сообщения не мешают обработке выговора.
Ограничение действий по иерархии
Действовать против Staff-сотрудника может только пользователь с более высоким уровнем.
Например, сотрудник уровня 4 не может выдать выговор другому сотруднику уровня 4.
Если автор получил команду только через точечное право Discord-роли и не имеет staff-ранга, сравниваются обычные Discord-роли:
- верхняя роль автора должна находиться выше верхней роли цели.
Владельца сервера изменить через staff-команды нельзя.
Staff-ранги
При первом использовании системы рангов создаётся стандартная линейка:
| Ранг | Уровень | Права |
|---|---|---|
| Trainee | 1 | Сотрудник без защищённых staff-команд. |
| Moderator | 2 | Staff-модератор. |
| Senior Moderator | 3 | Staff-модератор. |
| Administrator | 4 | Staff-администратор. |
| Head Administrator | 5 | Staff-администратор с возможностью управлять уровнями 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 top | Staff-модератор | Показывает 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 history | 15 последних записей |
| Текст заметки | До 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 только активный отпуск.