Боты: self-service
Self-service API — методы, которые вызывает сам бот по токену бота, а не его владелец. Для владельческого управления ботами (создание, настройка, перевыпуск токена) см. «Боты».
Все запросы этого раздела требуют заголовок Authorization: Bot <botToken> (не Bearer — см.
«Аутентификация ботов»). Все методы, кроме GetMe
и SetStatus, дополнительно требуют выданный боту
Gateway Intent — какой именно, указано в каждом эндпоинте; реальные действия
внутри группы дополнительно проверяются через права и роли.
Объекты
Все объекты, которые возвращает этот раздел (MessageInfo,
группы, каналы, роли, пользователи), — облегчённые проекции тех же сущностей, что и в
пользовательских разделах API, адаптированные под то, что реально нужно боту. Полные версии полей
см. в соответствующих разделах: «Группы»,
«Каналы», «Пользователи».
Объект ошибки
При любой ошибке вместо 200 OK возвращается default-ответ:
| Поле | Тип | Описание |
|---|---|---|
code | integer | Числовой код ошибки (google.rpc.Code). |
message | string | Человекочитаемое описание ошибки. |
details | array | Дополнительные структурированные детали ошибки (google.protobuf.Any); в большинстве случаев пуст. |
Профиль и статус
Получить свой профиль
/v1/bots/self/meВозвращает собственный профиль бота, аутентифицированного по токену. Не требует intent — идентификация себя не является «действием».
Ответ 200 OK: объект Bot — те же поля, что у BotResponse,
без credential.
Изменить статус
/v1/bots/self/statusУстанавливает presence-статус бота — не требует intent, как и GetMe.
Тело запроса: status (UserStatus), statusText?.
Ответ 200 OK: пустой объект {}.
Сообщения
Требуют intent GuildMessages.
Отправить сообщение
/v1/bots/self/channels/{channelId}/messagesПараметры пути: channelId. Тело запроса: content, replyTo? (id сообщения, на которое
отвечаем), attachmentIds? (id уже загруженных вложений),
componentsJson? (кнопки/меню, см. «Компоненты и модальные окна»).
Ответ 200 OK: объект MessageInfo.
Изменить сообщение
/v1/bots/self/messages/{messageId}Редактировать можно только собственные сообщения бота.
Параметры пути: messageId. Тело запроса: content, componentsJson?.
Ответ 200 OK: обновлённый объект MessageInfo.
Удалить сообщение
/v1/bots/self/messages/{messageId}:deleteПараметры пути: messageId.
Ответ 200 OK: id, success.
Реакции
/v1/bots/self/messages/{messageId}/reactionsДобавляет emoji-реакцию от лица бота.
/v1/bots/self/messages/{messageId}/reactions:removeУбирает реакцию бота.
Параметры пути (оба): messageId. Тело запроса (оба): emoji.
Ответ 200 OK (оба): обновлённый объект MessageInfo.
История канала
/v1/bots/self/channels/{channelId}/messagesТребует intent GuildMessages. Последние сообщения канала, отсортированные от старых к новым —
позволяет боту получить контекст (историю), а не только реагировать на новые события из
Gateway.
Параметры пути: channelId. Query-параметры: limit (1..100), beforeId? (id самого
старого полученного сообщения — для пагинации назад).
Ответ 200 OK: messages — массив объектов MessageInfo.
Получить сообщение
/v1/bots/self/messages/{messageId}Полезно, когда известен только messageId (например, из InvokeMessageComponent), без похода за
всей историей канала.
Параметры пути: messageId.
Ответ 200 OK: объект MessageInfo.
Индикаторы «печатает»
/v1/bots/self/channels/{channelId}:typingПростой индикатор «бот печатает» — булев флаг, исчезает сам через несколько секунд.
Параметры пути: channelId. Тело запроса: isTyping.
/v1/bots/self/channels/{channelId}:set-typingБолее выразительный, «реактивный» статус — THINKING, EXPLORED, PROCESSING, REVIEWED,
OPENED, RE_SEARCH, FETCHED (см. «Основные методы»). Гаснет
сам при отправке ботом реального сообщения в этот канал либо по таймауту на сервере — явного
«снять статус» вызова нет.
Параметры пути: channelId. Тело запроса: state.
Ответ 200 OK (оба): пустой объект {}.
Голос
Требуют intent GuildVoiceStates.
Подключиться к голосовому каналу
/v1/bots/self/channels/{channelId}:join-voiceПараметры пути: channelId.
Ответ 200 OK: token, serverUrl — данные для подключения к медиасерверу.
Отключиться от голосового канала
/v1/bots/self/channels/{channelId}:leave-voiceПараметры пути: channelId.
Ответ 200 OK: пустой объект {}.
Группы, каналы и роли
Требуют intent Guilds, если не указано иное.
Мои группы
/v1/bots/self/groupsТребует intent Guilds. Список групп, в которых состоит бот.
Ответ 200 OK: groups — массив облегчённых объектов группы (id, ownerId, name,
createdAt, avatarId, bannerId).
Получить группу
/v1/bots/self/groups/{groupId}Полная детализация: категории и каналы внутри группы.
Параметры пути: groupId.
Ответ 200 OK: объект группы с полем categories (каждая категория — со своим списком
каналов).
Категории группы
/v1/bots/self/groups/{groupId}/categoriesЛёгкий срез «Получить группу» — только категории, без вложенных каналов.
Параметры пути: groupId.
Ответ 200 OK: categories — массив объектов категорий (без channels).
Каналы группы
/v1/bots/self/groups/{groupId}/channelsЛёгкий срез — плоский список каналов, доступных боту (с учётом ViewChannels), без
per-канального списка «кто сейчас в голосовом канале».
Параметры пути: groupId.
Ответ 200 OK: channels — плоский массив объектов канала.
Участники группы
/v1/bots/self/groups/{groupId}/usersТекущие участники группы (включая других ботов — с флагом isBot: true).
Параметры пути: groupId.
Ответ 200 OK: users — массив объектов User.
Исключить участника
/v1/bots/self/groups/{groupId}/users/{userId}:kickТребует право KickMembers через управляемую роль бота — та же проверка иерархии, что и для людей
(нельзя кикнуть участника с ролью выше/равной своей, владельца кикнуть нельзя вовсе).
Параметры пути: groupId, userId.
Ответ 200 OK: groupId, userId, success.
Роли группы
/v1/bots/self/groups/{groupId}/rolesСписок ролей, отсортированный по позиции (@everyone — всегда последняя). Доступен любому
участнику группы, не только владельцу — список ролей публичен внутри группы.
Параметры пути: groupId.
Ответ 200 OK: roles — массив объектов BotRole (id, groupId, name, position,
color, permissions).
Получить канал
/v1/bots/self/channels/{channelId}Требует intent Guilds. Детали одного канала по его id — полезно, когда известен только
channelId (например, из события Gateway), без похода за всей группой.
Параметры пути: channelId.
Ответ 200 OK: объект канала (id, groupId, categoryId, name, type, position).
Получить пользователя
/v1/bots/self/users/{userId}Профиль произвольного пользователя по его id — без ограничения общей группой; полезно, когда у
бота есть только id (authorId сообщения, упомянутый пользователь).
Параметры пути: userId.
Ответ 200 OK: объект User.
Категории и каналы: CRUD
Требует право ManageChannels. Создание группы ботам недоступно — только категории/каналы внутри
уже существующей группы, в которой бот состоит.
/v1/bots/self/groups/{groupId}/categoriesСоздать категорию. Тело запроса: groupId, name.
/v1/bots/self/categories/{categoryId}Получить категорию по id (не требует ManageChannels — структура группы видна любому участнику).
/v1/bots/self/categories/{categoryId}Переименовать категорию. Тело запроса: categoryId, name.
/v1/bots/self/categories/{categoryId}:deleteУдалить категорию. Ответ 200 OK: id, success.
/v1/bots/self/categories/{categoryId}/channelsСоздать канал внутри категории. Тело запроса: categoryId, name, type (0 — текстовый,
1 — голосовой).
/v1/bots/self/channels/{channelId}Переименовать канал. Тело запроса: channelId, name.
/v1/bots/self/channels/{channelId}:deleteУдалить канал. Ответ 200 OK: id, success.
Ответ 200 OK (создание/переименование категории и канала): актуальное состояние сущности —
все поля, а не пустой ответ, чтобы боту не приходилось отдельным запросом перечитывать то, что он
только что изменил.
Роли: CRUD
Требует право ManageRoles. Иерархия ролей проверяется так же, как и для людей — нельзя
выдать/создать роль выше собственной управляемой роли бота.
/v1/bots/self/groups/{groupId}/rolesСоздать роль. Тело запроса: groupId, name, color?, permissions.
/v1/bots/self/roles/{roleId}Изменить роль. Тело запроса: roleId, name, permissions, color?.
/v1/bots/self/roles/{roleId}:deleteУдалить роль. Ответ 200 OK: пустой объект {}.
/v1/bots/self/groups/{groupId}/roles/{roleId}:assignНазначить роль участнику. Тело запроса: groupId, targetUserId, roleId.
/v1/bots/self/groups/{groupId}/roles/{roleId}:removeСнять роль с участника. Тело запроса и ответ — как у назначения.
Ответ 200 OK (создание/изменение роли): объект BotRole.
Interactions
Ни один из двух методов не требует intent — сервер сам проверяет, что отвечает именно тот бот, которому адресован interaction. Подробно про жизненный цикл interaction'а — в «Interactions» и «Interactions API: слэш-команды».
Ответить на interaction
/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-сообщение
/v1/bots/self/interactions/{interactionId}/followupsДополнительное сообщение уже после начального ответа (аналог Discord webhook followup) — валидно только в пределах followup-окна.
Параметры пути: interactionId. Тело запроса: content, componentsJson?.
Ответ 200 OK: объект MessageInfo.