Перейти к основному содержимому
Версия: 2026.2.4

Боты: self-service

Self-service API — методы, которые вызывает сам бот по токену бота, а не его владелец. Для владельческого управления ботами (создание, настройка, перевыпуск токена) см. «Боты».

Все запросы этого раздела требуют заголовок Authorization: Bot <botToken> (не Bearer — см. «Аутентификация ботов»). Все методы, кроме GetMe и SetStatus, дополнительно требуют выданный боту Gateway Intent — какой именно, указано в каждом эндпоинте; реальные действия внутри группы дополнительно проверяются через права и роли.

Объекты​

Все объекты, которые возвращает этот раздел (MessageInfo, группы, каналы, роли, пользователи), — облегчённые проекции тех же сущностей, что и в пользовательских разделах API, адаптированные под то, что реально нужно боту. Полные версии полей см. в соответствующих разделах: «Группы», «Каналы», «Пользователи».

Объект ошибки​

При любой ошибке вместо 200 OK возвращается default-ответ:

ПолеТипОписание
codeintegerЧисловой код ошибки (google.rpc.Code).
messagestringЧеловекочитаемое описание ошибки.
detailsarrayДополнительные структурированные детали ошибки (google.protobuf.Any); в большинстве случаев пуст.

Профиль и статус​

Получить свой профиль​

GET/v1/bots/self/me

Возвращает собственный профиль бота, аутентифицированного по токену. Не требует intent — идентификация себя не является «действием».

Ответ 200 OK: объект Bot — те же поля, что у BotResponse, без credential.

Изменить статус​

POST/v1/bots/self/status

Устанавливает presence-статус бота — не требует intent, как и GetMe.

Тело запроса: status (UserStatus), statusText?.

Ответ 200 OK: пустой объект {}.


Сообщения​

Требуют intent GuildMessages.

Отправить сообщение​

POST/v1/bots/self/channels/{channelId}/messages

Параметры пути: channelId. Тело запроса: content, replyTo? (id сообщения, на которое отвечаем), attachmentIds? (id уже загруженных вложений), componentsJson? (кнопки/меню, см. «Компоненты и модальные окна»).

Ответ 200 OK: объект MessageInfo.

Изменить сообщение​

POST/v1/bots/self/messages/{messageId}

Редактировать можно только собственные сообщения бота.

Параметры пути: messageId. Тело запроса: content, componentsJson?.

Ответ 200 OK: обновлённый объект MessageInfo.

Удалить сообщение​

POST/v1/bots/self/messages/{messageId}:delete

Параметры пути: messageId.

Ответ 200 OK: id, success.

Реакции​

POST/v1/bots/self/messages/{messageId}/reactions

Добавляет emoji-реакцию от лица бота.

POST/v1/bots/self/messages/{messageId}/reactions:remove

Убирает реакцию бота.

Параметры пути (оба): messageId. Тело запроса (оба): emoji.

Ответ 200 OK (оба): обновлённый объект MessageInfo.

История канала​

GET/v1/bots/self/channels/{channelId}/messages

Требует intent GuildMessages. Последние сообщения канала, отсортированные от старых к новым — позволяет боту получить контекст (историю), а не только реагировать на новые события из Gateway.

Параметры пути: channelId. Query-параметры: limit (1..100), beforeId? (id самого старого полученного сообщения — для пагинации назад).

Ответ 200 OK: messages — массив объектов MessageInfo.

Получить сообщение​

GET/v1/bots/self/messages/{messageId}

Полезно, когда известен только messageId (например, из InvokeMessageComponent), без похода за всей историей канала.

Параметры пути: messageId.

Ответ 200 OK: объект MessageInfo.

Индикаторы «печатает»​

POST/v1/bots/self/channels/{channelId}:typing

Простой индикатор «бот печатает» — булев флаг, исчезает сам через несколько секунд.

Параметры пути: channelId. Тело запроса: isTyping.

POST/v1/bots/self/channels/{channelId}:set-typing

Более выразительный, «реактивный» статус — THINKING, EXPLORED, PROCESSING, REVIEWED, OPENED, RE_SEARCH, FETCHED (см. «Основные методы»). Гаснет сам при отправке ботом реального сообщения в этот канал либо по таймауту на сервере — явного «снять статус» вызова нет.

Параметры пути: channelId. Тело запроса: state.

Ответ 200 OK (оба): пустой объект {}.


Голос​

Требуют intent GuildVoiceStates.

Подключиться к голосовому каналу​

POST/v1/bots/self/channels/{channelId}:join-voice

Параметры пути: channelId.

Ответ 200 OK: token, serverUrl — данные для подключения к медиасерверу.

Отключиться от голосового канала​

POST/v1/bots/self/channels/{channelId}:leave-voice

Параметры пути: channelId.

Ответ 200 OK: пустой объект {}.


Группы, каналы и роли​

Требуют intent Guilds, если не указано иное.

Мои группы​

GET/v1/bots/self/groups

Требует intent Guilds. Список групп, в которых состоит бот.

Ответ 200 OK: groups — массив облегчённых объектов группы (id, ownerId, name, createdAt, avatarId, bannerId).

Получить группу​

GET/v1/bots/self/groups/{groupId}

Полная детализация: категории и каналы внутри группы.

Параметры пути: groupId.

Ответ 200 OK: объект группы с полем categories (каждая категория — со своим списком каналов).

Категории группы​

GET/v1/bots/self/groups/{groupId}/categories

Лёгкий срез «Получить группу» — только категории, без вложенных каналов.

Параметры пути: groupId.

Ответ 200 OK: categories — массив объектов категорий (без channels).

Каналы группы​

GET/v1/bots/self/groups/{groupId}/channels

Лёгкий срез — плоский список каналов, доступных боту (с учётом ViewChannels), без per-канального списка «кто сейчас в голосовом канале».

Параметры пути: groupId.

Ответ 200 OK: channels — плоский массив объектов канала.

Участники группы​

GET/v1/bots/self/groups/{groupId}/users

Текущие участники группы (включая других ботов — с флагом isBot: true).

Параметры пути: groupId.

Ответ 200 OK: users — массив объектов User.

Исключить участника​

POST/v1/bots/self/groups/{groupId}/users/{userId}:kick

Требует право KickMembers через управляемую роль бота — та же проверка иерархии, что и для людей (нельзя кикнуть участника с ролью выше/равной своей, владельца кикнуть нельзя вовсе).

Параметры пути: groupId, userId.

Ответ 200 OK: groupId, userId, success.

Роли группы​

GET/v1/bots/self/groups/{groupId}/roles

Список ролей, отсортированный по позиции (@everyone — всегда последняя). Доступен любому участнику группы, не только владельцу — список ролей публичен внутри группы.

Параметры пути: groupId.

Ответ 200 OK: roles — массив объектов BotRole (id, groupId, name, position, color, permissions).

Получить канал​

GET/v1/bots/self/channels/{channelId}

Требует intent Guilds. Детали одного канала по его id — полезно, когда известен только channelId (например, из события Gateway), без похода за всей группой.

Параметры пути: channelId.

Ответ 200 OK: объект канала (id, groupId, categoryId, name, type, position).

Получить пользователя​

GET/v1/bots/self/users/{userId}

Профиль произвольного пользователя по его id — без ограничения общей группой; полезно, когда у бота есть только id (authorId сообщения, упомянутый пользователь).

Параметры пути: userId.

Ответ 200 OK: объект User.

Категории и каналы: CRUD​

Требует право ManageChannels. Создание группы ботам недоступно — только категории/каналы внутри уже существующей группы, в которой бот состоит.

POST/v1/bots/self/groups/{groupId}/categories

Создать категорию. Тело запроса: groupId, name.

GET/v1/bots/self/categories/{categoryId}

Получить категорию по id (не требует ManageChannels — структура группы видна любому участнику).

POST/v1/bots/self/categories/{categoryId}

Переименовать категорию. Тело запроса: categoryId, name.

POST/v1/bots/self/categories/{categoryId}:delete

Удалить категорию. Ответ 200 OK: id, success.

POST/v1/bots/self/categories/{categoryId}/channels

Создать канал внутри категории. Тело запроса: categoryId, name, type (0 — текстовый, 1 — голосовой).

POST/v1/bots/self/channels/{channelId}

Переименовать канал. Тело запроса: channelId, name.

POST/v1/bots/self/channels/{channelId}:delete

Удалить канал. Ответ 200 OK: id, success.

Ответ 200 OK (создание/переименование категории и канала): актуальное состояние сущности — все поля, а не пустой ответ, чтобы боту не приходилось отдельным запросом перечитывать то, что он только что изменил.

Роли: CRUD​

Требует право ManageRoles. Иерархия ролей проверяется так же, как и для людей — нельзя выдать/создать роль выше собственной управляемой роли бота.

POST/v1/bots/self/groups/{groupId}/roles

Создать роль. Тело запроса: groupId, name, color?, permissions.

POST/v1/bots/self/roles/{roleId}

Изменить роль. Тело запроса: roleId, name, permissions, color?.

POST/v1/bots/self/roles/{roleId}:delete

Удалить роль. Ответ 200 OK: пустой объект {}.

POST/v1/bots/self/groups/{groupId}/roles/{roleId}:assign

Назначить роль участнику. Тело запроса: groupId, targetUserId, roleId.

POST/v1/bots/self/groups/{groupId}/roles/{roleId}:remove

Снять роль с участника. Тело запроса и ответ — как у назначения.

Ответ 200 OK (создание/изменение роли): объект BotRole.


Interactions​

Ни один из двух методов не требует intent — сервер сам проверяет, что отвечает именно тот бот, которому адресован interaction. Подробно про жизненный цикл interaction'а — в «Interactions» и «Interactions API: слэш-команды».

Ответить на interaction​

POST/v1/bots/self/interactions/{interactionId}/respond

Параметры пути: interactionId. Тело запроса: kind (CHANNEL_MESSAGE, DEFERRED_CHANNEL_MESSAGE, UPDATE_MESSAGE, DEFERRED_UPDATE_MESSAGE, MODAL, AUTOCOMPLETE_RESULT), content?, componentsJson?, modalJson?, autocompleteChoices?, ephemeral?.

Ответ 200 OK: пустой объект {}.

Followup-сообщение​

POST/v1/bots/self/interactions/{interactionId}/followups

Дополнительное сообщение уже после начального ответа (аналог Discord webhook followup) — валидно только в пределах followup-окна.

Параметры пути: interactionId. Тело запроса: content, componentsJson?.

Ответ 200 OK: объект MessageInfo.