Уровни и опыт
Каждое сообщение, написанное в канале, приносит от 15 до 25 XP, выбранных
случайно. Засчитывается лишь одно начисление в минуту и на участника: десять сообщений
подряд принесут не больше одного. Боты, личные сообщения и системные сообщения (входы, закрепления) не приносят
ничего.
Переход с уровня L на следующий стоит 5 × L² + 50 × L + 100 XP. Стоимость
поэтому растёт с каждой ступенью, а хранится только суммарный опыт: уровень вычисляется из него.
Последний столбец исходит из обычного разговора, при среднем начислении. Он даёт порядок
величины. Настоящее время зависит от того, насколько далеко друг от друга сообщения, ведь счётчик учитывает только одно
начисление в минуту.
При каждом повышении уровня бот отвечает в том канале, где было написано сообщение.
Объявление настраивается в панели управления: вставка или обычный текст, заголовок, описание, цвет, а также
переменные {level} и {xp} вдобавок к обычным. Канал, в который бот не может писать,
ничего не блокирует: уровень засчитывается, теряется только объявление.
Модуль включён по умолчанию. Его отключение останавливает начисления и объявления, ничего
не стирая: таблица лидеров остаётся в базе данных и возвращается нетронутой, когда модуль включают
снова. Чтобы поправить отдельный случай, /xp добавит, отнимет или задаст
опыт участника; /rank и
/leaderboard покажут результат.
Наказания, история и заметки
Записывается каждое наказание, вынесенное ботом: бан, временный бан, кик, тайм-аут, предупреждение и даже
их снятия (разбан, отмена предупреждения). Каждое получает свой двенадцатизначный код.
Порядок действий не случаен. Личное сообщение уходит до наказания.
После бана у бота больше нет общего сервера с человеком, и написать ему он бы уже не смог. Сама
запись, в свою очередь, делается до обращения к Discord, чтобы код существовал; если Discord откажет
в действии, запись отменяется, и в деле не остаётся призрачного наказания.
Временный бан сам планирует своё снятие. Когда подходит срок, бот проверяет, не был ли бан
за это время выдан заново модератором: если был, он его не снимает. Постоянный
/ban, вынесенный за этот период, отменяет запланированное снятие.
Заметки (/note, 25 на наказание) никогда не показываются
самому участнику: они служат разговору между модераторами спустя месяцы, когда никто
уже не помнит обстоятельств.
Защита на входе
Три независимых механизма, которые складываются или применяются по отдельности:
-
Капча: при входе участник должен решить задачу, чтобы получить свою роль.
По умолчанию: 3 попыток, 5 минут, кик при неудаче. Запрос
приходит личным сообщением; если участник их закрыл, бот создаёт временный
канал проверки в указанной вами категории, видимый только ему и удаляемый затем.
-
Проверка через сайт: участник нажимает кнопку, завершает проверку на
сайте и находит свою роль по возвращении. Здесь бот сам ничего не выдаёт: это сайт
сверяет личность с Discord, а затем назначает роль.
-
Защита от рейдов: она нацелена не на человека, а на поток. Свыше
8 входов за 10 секунд (значения по умолчанию) она уведомляет, отправляет в карантин или
выгоняет. Фильтр по возрасту аккаунта пропускает завсегдатаев, попавших в волну.
Роль карантина — то общее, что есть у всех трёх: выданная при входе, она
ограничивает то, что новичок видит и может делать, и снимается после прохождения проверки. Пока
она на месте, контроль остаётся за вами, и ничто не мешает пропустить кого-то вручную.
Тикеты
Панель, опубликованная в канале, не более 25 видов запросов (предел выпадающего списка
Discord), и у каждого своё: эмодзи, цвет, приветственное сообщение, форма при открытии и
команда, у которой есть к нему доступ. Открытие создаёт личный канал между обратившимся и этой командой. При
закрытии переписка сохраняется в архивный канал в формате HTML, и обмен остаётся читаемым
после исчезновения канала.
Музыка и роли диджеев
Воспроизведение опирается на выделенную звуковую инфраструктуру. Если она недоступна, музыкальные
команды об этом сообщают, а всё остальное в боте продолжает работать.
Команды, которые управляют текущим воспроизведением (/pause, /resume,
/stop, /loop, /volume), доступны только диджеям. Диджей — это: владелец
сервера, администратор, участник с правом «Управлять сервером» или обладатель роли, добавленной через
/dj add. Пока роль диджея не настроена, эти команды
отвечают, стало быть, только этим трём. Роли модерации — отдельный список:
статуса диджея они не дают.
Команды только для чтения (/queue, /nowplaying, /lyrics) и
добавление треков (/play) остаются открытыми для всех.
Розыгрыши
Допустимая длительность: от 10 секунд до 28 дней, записывается свободно
(30m, 1h30m, 2d). До 20 идущих розыгрышей
и 20 победителей на розыгрыш.
Розыгрыш всегда проводит бот, а не сайт: только он может проверить в момент розыгрыша,
что победители всё ещё на сервере и обладают ролью, требовавшейся при входе. Если никто не
отзовётся, /giveaway reroll проведёт розыгрыш заново.
Журналы
21 видов событий, разделённых на 5 категорий (Сообщения, Участники, Модерация, Голос, Сервер), каждое
включается по отдельности. Каждая категория может указывать на свой канал: модерация в одну сторону,
сообщения в другую.
Содержание сообщений никогда не хранится в базе данных. Когда сообщение удаляют,
бот публикует вставку в указанном вами канале, и этим всё ограничивается. Действие, совершённое самим
ботом (бан через /ban), записывается только один раз — журналом модерации, который называет
модератора.
Резервные копии
Копия снимает слепок структуры сервера (роли, каналы, права)
и возвращает личный код, отправляемый личным сообщением. На каждого владельца хранится 3 копий. Она
не содержит ни одного сообщения: это не история переписки. Код восстанавливает эту
структуру в текущем сервере, поэтому им можно и клонировать сервер, применив его в другом месте.
Временные голосовые каналы
Вход в канал-триггер создаёт канал, которым владеет участник: он может переименовать его, ограничить
доступ к нему или задать предел мест. Канал исчезает, как только опустеет, и убирать ничего не нужно.