Каналы

Каналы — основные сущности для общения. Бывают 4 типов: CHAT, CHANNEL, FORUM, VOICE. Могут принадлежать серверу или существовать самостоятельно (standalone).

Подробнее о типах см. Типы каналов.

ChannelResponse

{ "id": "channel-uuid", "serverId": "server-uuid", "ownerId": null, "ownerFederation": null, "name": "general", "description": "Основной канал", "isPublic": true, "type": "CHAT", "chatMode": "BUBBLE", "channelDisplayMode": null, "commentsEnabled": true, "formTemplate": null }

Поле

Тип

Описание

id

string

UUID канала

serverId

string?

ID сервера (null для standalone)

ownerId

string?

ID владельца (для standalone)

ownerFederation

string?

Федерация владельца

name

string

Название

description

string?

Описание

isPublic

boolean

Публичный

type

string

CHAT, CHANNEL, FORUM, VOICE

chatMode

string?

BUBBLE или THREAD (только для CHAT)

channelDisplayMode

string?

CARD или FEED (только для CHANNEL)

commentsEnabled

boolean

Комментарии включены (для CHANNEL/FORUM)

formTemplate

string?

JSON-шаблон формы (для FORUM)


Серверные каналы

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

GET /servers/{serverId}/channels

Аутентификация не требуется.

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

Создание канала в сервере

POST /servers/{serverId}/channels

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

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

{ "name": "new-channel", "description": "Описание", "isPublic": true, "type": "CHAT", "chatMode": "THREAD", "commentsEnabled": true }

Поле

Тип

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

Описание

name

string

да

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

description

string

нет

Описание

isPublic

boolean

нет

Публичный (по умолчанию true)

type

string

нет

Тип канала (по умолчанию CHAT)

chatMode

string

нет

BUBBLE или THREAD (только для CHAT)

channelDisplayMode

string

нет

CARD или FEED (только для CHANNEL)

commentsEnabled

boolean

нет

Комментарии (по умолчанию true)

formTemplate

string

нет

JSON-шаблон формы (только для FORUM)

Создатель автоматически становится участником.

Ответ (201): ChannelResponse.

Валидация типов:

  • CHAT: нельзя задать channelDisplayMode и formTemplate

  • CHANNEL: нельзя задать chatMode и formTemplate

  • FORUM: нельзя задать chatMode и channelDisplayMode

  • VOICE: нельзя задать никакие режимы отображения

Ошибки: NOT_FOUND, FORBIDDEN, VALIDATION_ERROR.

Получение канала

GET /servers/{serverId}/channels/{channelId}

Ответ (200): ChannelResponse.

Обновление канала

PUT /servers/{serverId}/channels/{channelId}

Требуется право MANAGE_CHANNELS. Все поля опциональны.

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

Удаление канала

DELETE /servers/{serverId}/channels/{channelId}

Требуется право MANAGE_CHANNELS.

Ответ (200): SuccessResponse.

Вступление / выход

POST /servers/{serverId}/channels/{channelId}/join POST /servers/{serverId}/channels/{channelId}/leave

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

Ответ join (200): MembershipResponse. Рассылается событие member.joined.

Ответ leave (200): SuccessResponse. Рассылается событие member.left.

Список участников

GET /servers/{serverId}/channels/{channelId}/members

Необходимо быть участником канала.

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


Standalone-каналы

Каналы без привязки к серверу. Имеют собственного владельца.

Список публичных standalone-каналов

GET /channels

Параметр

Тип

Описание

limit

int

Количество (1-100, по умолчанию 20)

offset

long

Смещение (по умолчанию 0)

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

Мои каналы

GET /channels/me

Возвращает standalone-каналы, принадлежащие текущему пользователю.

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

Создание standalone-канала

POST /channels

Тело запроса аналогично серверному каналу, но без serverId. Тип VOICE недоступен для standalone.

Ответ (201): ChannelResponse с serverId: null и заполненными ownerId/ownerFederation.

Получение / вступление / выход

GET /channels/{channelId} POST /channels/{channelId}/join POST /channels/{channelId}/leave

Для standalone не требуется серверное членство. Канал должен быть публичным.


Инвайты

Инвайты позволяют приглашать пользователей в приватные каналы.

Создание инвайта

POST /servers/{serverId}/channels/{channelId}/invites

Требуется право MANAGE_CHANNELS.

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

{ "maxUses": 10, "expiresInMinutes": 1440 }

Поле

Тип

Описание

maxUses

int?

Максимум использований (null = без лимита)

expiresInMinutes

int?

Время жизни в минутах (null = бессрочный)

Ответ (201): InviteResponse.

Список инвайтов

GET /servers/{serverId}/channels/{channelId}/invites

Требуется право MANAGE_CHANNELS.

Вступление по инвайту

POST /invites/join

Тело: {"code": "aB3kLm9x"}

Ошибки: NOT_FOUND, INVITE_EXPIRED, INVITE_EXHAUSTED, ALREADY_EXISTS.

Удаление инвайта

DELETE /invites/{inviteId}