Интеграции: Discord и OAuth
CMS умеет: вход и регистрацию через Discord и Яндекс, привязку Discord к аккаунту (с сайта, из Discord и прямо из игры), синхронизацию ролей Discord с группами LuckPerms и ролями сайта, «связанные роли» (Linked Roles), лог наказаний в канал Discord и slash-команды модерации.
Настройка Discord-приложения и бота
Одно Discord-приложение обслуживает всё: вход через Discord, привязки, роли и slash-команды.
Шаг 1. Создайте приложение
- Откройте Discord Developer Portal и нажмите New Application.
- На странице General Information скопируйте Application ID (он же Client ID) и Public Key.
- В разделе OAuth2 скопируйте Client Secret (кнопка Reset Secret, если скрыт).
- В разделе Bot создайте бота и скопируйте его Token. Бот работает через обычные HTTP-запросы к Discord — подключать привилегированные Gateway Intents не требуется.
Шаг 2. Впишите ключи в CMS
Откройте Админка → Настройки → Регистрация и вход:
- Вход через Discord — включите;
- Discord Client ID и Discord Client Secret — из шага 1;
- Discord Redirect URI — CMS сама подставляет
https://ваш-сайт/auth/discord/callback; скопируйте этот адрес в портал Discord: OAuth2 → Redirects → Add Redirect; - Discord Bot Token — токен бота (нужен и для Linked Roles, и для выдачи ролей).
Остальные настройки Discord — на вкладке Админка → Настройки → Discord:
- ID сервера Discord (guild) — сервер, где бот выдаёт роли. Включите в Discord режим разработчика (Настройки → Расширенные), кликните правой кнопкой по серверу → «Копировать ID»;
- Public Key приложения Discord — из General Information (нужен для slash-команд);
- Webhook лога наказаний — URL вебхука канала (настройки канала → Интеграции → Вебхуки): туда будут уходить выдачи и снятия банов/мутов. Пусто — выключено;
- Slash-команды наказаний (
/ban,/unban,/mute,/unmute,/history) и slash-команды привязки (/link,/unlink) — отдельные переключатели.
Шаг 3. Если нужны slash-команды
- В приложении Discord (General Information) укажите Interactions Endpoint URL:
https://ваш-сайт/api/discord/interactions— Discord сразу проверит адрес (подпись проверяется вашим Public Key, поэтому сначала сохраните его в настройках). - Зарегистрируйте команды: выполните на сервере сайта
php artisan discord:register-commands. - Пригласите бота на свой сервер Discord. Для выдачи ролей ему нужно право Manage Roles, а его роль в списке ролей сервера должна стоять выше выдаваемых.
Команды наказаний доступны только тем, чей Discord привязан к аккаунту сайта с правом модерации; /link и /unlink — всем участникам.
Привязка ролей Discord к группам CMS
Раздел Админка → Связи групп — таблица соответствий «группа LuckPerms ↔ роль сайта ↔ роль Discord» (плюс необязательный числовой уровень группы для Linked Roles).
- Включите Настройки → Discord → «Синхронизация групп включена».
- В «Связях групп» добавьте строки: например, группа LuckPerms
vip→ роль сайта «VIP» → ID роли Discord. - Изменение маппинга автоматически ставит полную синхронизацию в очередь; есть и кнопка ручного запуска.
Дальше всё само: купил игрок привилегию — получил группу LuckPerms, роль сайта и роль в Discord; привязал/отвязал Discord — роли выдались/снялись. Роли выдаёт бот (поэтому нужны guild ID, токен бота и права из шага 3).
Linked Roles (связанные роли)
Альтернатива ролям от бота: Discord сам выдаёт роль по условиям на метаданных аккаунта. CMS публикует 4 метаданных: «Аккаунт привязан», «Донатер» (по списку групп из настройки «Группы-донаты»), «На сайте с» и «Уровень группы» (наивысший уровень из «Связей групп» — так строится иерархия ролей без бота).
Настройка:
- Один раз выполните
php artisan discord:register-metadata— схема метаданных зарегистрируется в Discord. - В портале Discord (General Information → Linked Roles Verification URL) укажите:
https://ваш-сайт/discord/linked-roles/verify. - В Discord-сервере в настройках роли → Ссылки добавьте требование от вашего приложения (например, «Уровень группы ≥ 3»).
- Игрок в профиле на сайте нажимает «Подтвердить в Discord» (блок «Связанные роли Discord») — и получает роли. Название платформы в карточке игрока задаётся настройкой «Название платформы».
Метаданные всех привязанных пользователей можно обновить командой php artisan discord:sync-roles.
Вход через Discord и Яндекс
Поддерживаются два OAuth-провайдера: Discord и Яндекс. Каждый включается отдельно в Настройки → Регистрация и вход; кнопки входа появляются на страницах входа и регистрации.
Настройка Яндекса аналогична Discord: создайте приложение на oauth.yandex.ru, впишите в CMS Yandex Client ID и Yandex Client Secret, а показанный в настройках Yandex Redirect URI (https://ваш-сайт/auth/yandex/callback) скопируйте в поле Redirect URI приложения Яндекса.
Как это работает для игрока:
- Первый вход через провайдера: CMS попросит придумать ник Minecraft (3–16 символов, латиница/цифры/подчёркивание) и создаст аккаунт без пароля.
- Повторный вход — просто вход в существующий аккаунт.
- Если email из провайдера уже занят аккаунтом сайта, автоматической привязки не будет (защита от захвата аккаунта): нужно войти с паролем и привязать провайдера из профиля.
- Привязка из профиля: в личном кабинете блок с провайдерами — кнопки «Привязать»/«Отвязать». Отвязать единственный способ входа при отсутствии пароля нельзя — сначала нужно установить пароль сайта.
- Один Discord/Яндекс-аккаунт привязывается только к одному аккаунту сайта.
Привязка Discord из игры
Игрок пишет в игре команду /discord (команда cms-plugin) и получает шестизначный код и кликабельную ссылку. Действуют 10 минут. Дальше два пути:
- По ссылке: клик открывает сайт — входить в аккаунт не нужно, ссылка сама опознаёт игрока — и сразу перекидывает на авторизацию Discord. После подтверждения: «Discord привязан — возвращайтесь в игру».
- По коду: игрок пишет в вашем Discord-сервере
/link <код>(если включены slash-команды привязки) — бот привяжет его Discord к аккаунту. Привязка кодом не даёт сайту OAuth-токенов, поэтому метаданные Linked Roles подтянутся позже — после «Подтвердить в Discord» в профиле; роли из «Связей групп» работают сразу.
Отвязка из игры — /discord unlink (или /unlink в Discord, или из профиля на сайте). Все способы привязки работают с одной и той же записью, поэтому рассинхронизация невозможна.
Если у игрока ещё нет аккаунта сайта, команда /discord подскажет сначала зарегистрироваться (/register в игре или на сайте).
Discord-бот: команды и логи
Помимо синхронизации ролей, бот умеет:
- Slash-команды модерации:
/ban,/mute,/unban,/unmute,/history,/status(карточка игрока: статистика + наказания). Права проверяются по привязанному аккаунту сайта. - Лог наказаний в выбранный канал — с причиной, сроком и источником (сайт / игра / Discord).
- Лог статуса серверов — сообщения при падении и подъёме.
Каналы указываются в Настройках → Discord; сообщения идут через бота (или вебхук, если бот не настроен).
Telegram-уведомления
Настройки → Telegram: бот пишет админам о новых оплаченных заказах, тикетах и падении/подъёме серверов. См. «Первые шаги → Telegram-уведомления».