Роли и права

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

Список прав

Право

Бит

Значение

Описание

SEND_MESSAGES

0

1

Отправка сообщений

READ_MESSAGES

1

2

Чтение сообщений

MANAGE_CHANNELS

2

4

Создание, редактирование и удаление каналов

MANAGE_ROLES

3

8

Управление ролями

KICK_MEMBERS

4

16

Кик участников

BAN_MEMBERS

5

32

Бан участников

MANAGE_MESSAGES

6

64

Удаление чужих сообщений

ATTACH_FILES

7

128

Прикрепление файлов

MANAGE_BOTS

8

256

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

ADMINISTRATOR

9

512

Полный доступ (обходит все проверки)

CONNECT_VOICE

10

1024

Подключение к голосовым каналам

SPEAK

11

2048

Говорить в голосовом канале

MUTE_VOICE_MEMBERS

12

4096

Заглушение других участников

DEAFEN_VOICE_MEMBERS

13

8192

Отключение входящего звука другим

STREAM_VIDEO

14

16384

Трансляция видео

SCREEN_SHARE

15

32768

Демонстрация экрана

Для комбинации прав используется побитовое ИЛИ. Например, права на чтение и отправку: 1 | 2 = 3.

Как определяются права пользователя

  1. Проверяется канальное членство пользователя

  2. Если у членства задан roleId — используются права этой роли

  3. Иначе — используются права роли @everyone сервера

  4. Право ADMINISTRATOR обходит все остальные проверки

Роль @everyone

Создаётся автоматически при создании сервера с правами по умолчанию:

SEND_MESSAGES | READ_MESSAGES | CONNECT_VOICE | SPEAK = 3075

Не может быть удалена.

Список ролей

GET /servers/{serverId}/roles

Ответ (200): массив RoleResponse.

[ { "id": "role-uuid", "name": "@everyone", "permissions": 3075, "position": 0 } ]

Создание роли

POST /servers/{serverId}/roles

Тело запроса:

{ "name": "Moderator", "permissions": 3139, "position": 1 }

Поле

Тип

Обязательное

Описание

name

string

да

Название роли (1-64 символа)

permissions

long

да

Битовая маска прав

position

int

нет

Позиция в иерархии (по умолчанию 0)

Ответ (201): RoleResponse.

Ошибки: VALIDATION_ERROR (невалидное название), ALREADY_EXISTS (дубликат имени в сервере).

Обновление роли

PUT /servers/{serverId}/roles/{roleId}

Тело запроса:

{ "name": "Senior Moderator", "permissions": 3203, "position": 2 }

Все поля опциональны.

Ответ (200): обновлённый RoleResponse.

Ошибки: NOT_FOUND.

Удаление роли

DELETE /servers/{serverId}/roles/{roleId}

Роль @everyone не может быть удалена.

Ответ (200): SuccessResponse.

Ошибки: NOT_FOUND, FORBIDDEN (попытка удалить @everyone).

Назначение роли участнику

POST /servers/{serverId}/roles/assign

Тело запроса:

{ "channelId": "channel-uuid", "userId": "user-uuid", "federation": "https://auth.example.com", "roleId": "role-uuid" }

Поле

Тип

Обязательное

Описание

channelId

string

да

ID канала

userId

string

да

ID пользователя

federation

string

да

Федерация пользователя

roleId

string?

да

ID роли (null для сброса на @everyone)

Ответ (200): SuccessResponse.

Ошибки: NOT_FOUND (роль или членство не найдены).