> For the complete documentation index, see [llms.txt](https://wiki.myata.ink/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.myata.ink/page-1.md).

# Page 1

## Discord-бот: полный справочник возможностей

Собрано по актуальной документации (docs.discord.com + reverse-engineered Userdoccers, docs.discord.food) на август 2026. Всё, что помечено «тихо игнорируется» или «заблокировано», — проверено эмпирически или подтверждено докой.

***

### 1. Кастомизация профиля бота — что реально работает

Ключевой принцип: **глобальные косметические поля через `/users/@me` для бота почти все «тихо игнорируются»** (Discord возвращает 200, но поле не применяется), потому что они завязаны на владение SKU / Nitro. **По-серверная косметика через member-эндпоинт — работает.**

#### Работает

| Что                                  | Эндпоинт                                                                                                      | Область     | Примечание                             |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------- | ----------- | -------------------------------------- |
| Ник                                  | `PATCH /guilds/{guild}/members/@me`                                                                           | по-серверно | нужно право «Изменять ник»             |
| Аватар                               | `PATCH /guilds/{guild}/members/@me`                                                                           | по-серверно | guild avatar бота                      |
| Баннер                               | `PATCH /guilds/{guild}/members/@me`                                                                           | по-серверно |                                        |
| Био                                  | `PATCH /guilds/{guild}/members/@me`                                                                           | по-серверно | до 190 символов                        |
| **Стиль имени** (шрифт/эффект/цвета) | `PATCH /guilds/{guild}/members/@me` (`display_name_font_id`, `display_name_effect_id`, `display_name_colors`) | по-серверно | это пресет, не SKU — потому и работает |
| Аватар/имя аккаунта                  | `PATCH /users/@me` (`username`, `avatar`)                                                                     | глобально   | стандартная смена аватара бота         |
| **Описание «Обо мне» + теги**        | `PATCH /applications/@me` (`description`, `tags`, `icon`, `install_params`)                                   | глобально   | профиль приложения бота                |

#### Тихо игнорируется у бота (вернёт 200, но `null`)

* Украшение аватара — `avatar_decoration_sku_id` (проверено: 200 + `avatar_decoration_data: null`)
* Нэймплейт — `nameplate_sku_id`
* Эффект профиля — `profile_effect_id` (`PATCH /users/@me/profile`)
* Эмодзи профиля — `emoji_id`
* Цвета темы профиля — `theme_colors`
* Стиль имени глобально через `/users/@me` (помечен «только premium»)
* Баннер глобально через `/users/@me` («только premium»)

#### Заблокировано для ботов (ошибка 20001 «Bots cannot use this endpoint»)

* Тег сервера через `PUT /users/@me/clan`
* Поле `primary_guild` в `PATCH /users/@me` — тоже тихо игнорируется
* Весь неймспейс `/store/...` (список/покупка SKU)

**Вывод:** богатый набор кастомизации у бота возможен только по-серверно (member-эндпоинт) + описание приложения. Всё «коллекционное» (декор, нэймплейт, эффекты, тег) боту недоступно by design.

***

### 2. Сообщения бота: два режима

Бот отправляет сообщения через `POST /channels/{channel_id}/messages`. Есть два несовместимых режима:

#### Legacy (обычный)

* Поля: `content` (до 2000 символов), `embeds` (до 10), `components` (до 5 action row верхнего уровня), `tts`, `allowed_mentions`, `sticker_ids`, `poll`, вложения.
* Компоненты идут вместе с текстом и эмбедами.

#### Components V2 (флаг `IS_COMPONENTS_V2` = `32768`)

* Ставишь `"flags": 32768`. После этого:
  * `content` и `embeds` **перестают работать** — вместо них Text Display и Container.
  * Вложения не показываются сами — только через компоненты (File / Media Gallery).
  * `poll` и `stickers` отключены.
  * Флаг **необратим** для этого сообщения.
* Лимиты: до **40 компонентов** всего, до **10** верхнеуровневых, суммарно **4000 символов** текста по всем компонентам.

***

### 3. Эмбеды (Legacy-режим) — все части

Массив `embeds`, до **10** на сообщение. Суммарно по всем эмбедам — **6000 символов**.

| Часть            | Поле                                                         | Лимит       |
| ---------------- | ------------------------------------------------------------ | ----------- |
| Заголовок        | `title`                                                      | 256         |
| Описание         | `description`                                                | 4096        |
| Ссылка заголовка | `url`                                                        | —           |
| Цвет полосы      | `color` (integer)                                            | —           |
| Дата             | `timestamp` (ISO8601)                                        | —           |
| Автор            | `author.name` / `author.url` / `author.icon_url`             | name 256    |
| Футер            | `footer.text` / `footer.icon_url`                            | text 2048   |
| Большая картинка | `image.url`                                                  | —           |
| Миниатюра        | `thumbnail.url`                                              | —           |
| Видео            | `video.url` (обычно авто)                                    | —           |
| Провайдер        | `provider.name` / `provider.url`                             | —           |
| Поля             | `fields[]` → `name` (256) / `value` (1024) / `inline` (bool) | до 25 полей |

`type` эмбеда: `rich` (то, что делает бот), а также авто-типы `image`, `video`, `gifv`, `article`, `link`, `poll_result`.

***

### 4. Components V2 — все типы

Таблица типов (`type`). «M» = сообщение, «Мод» = модальное окно.

| #  | Имя                       | Категория  | Где             | Бот            |
| -- | ------------------------- | ---------- | --------------- | -------------- |
| 1  | ACTION\_ROW               | layout     | M, Мод (устар.) | ✅              |
| 2  | BUTTON                    | интерактив | M               | ✅              |
| 3  | STRING\_SELECT            | интерактив | M, Мод          | ✅              |
| 4  | TEXT\_INPUT               | интерактив | Мод             | ✅              |
| 5  | USER\_SELECT              | интерактив | M, Мод          | ✅              |
| 6  | ROLE\_SELECT              | интерактив | M, Мод          | ✅              |
| 7  | MENTIONABLE\_SELECT       | интерактив | M, Мод          | ✅              |
| 8  | CHANNEL\_SELECT           | интерактив | M, Мод          | ✅              |
| 9  | SECTION                   | layout     | M               | ✅              |
| 10 | TEXT\_DISPLAY             | контент    | M, Мод          | ✅              |
| 11 | THUMBNAIL                 | контент    | M (accessory)   | ✅              |
| 12 | MEDIA\_GALLERY            | контент    | M               | ✅              |
| 13 | FILE                      | контент    | M               | ✅              |
| 14 | SEPARATOR                 | layout     | M               | ✅              |
| 16 | CONTENT\_INVENTORY\_ENTRY | контент    | M               | ❌ нельзя ботам |
| 17 | CONTAINER                 | layout     | M               | ✅              |
| 18 | LABEL                     | layout     | Мод             | ✅              |
| 19 | FILE\_UPLOAD              | интерактив | Мод             | ✅              |
| 20 | CHECKPOINT\_CARD          | контент    | M               | ❌ нельзя ботам |
| 21 | RADIO\_GROUP              | интерактив | Мод             | ✅              |
| 22 | CHECKBOX\_GROUP           | интерактив | Мод             | ✅              |
| 23 | CHECKBOX                  | интерактив | Мод             | ✅              |

Типы 9–14, 17 требуют флаг `IS_COMPONENTS_V2`.

#### Описание layout/контент-компонентов

* **Action Row (1)** — горизонтальный ряд. До 5 кнопок ИЛИ один селект ИЛИ (в модалке) один text input.
* **Section (9)** — текст (1–3 Text Display) + один accessory справа (Thumbnail или Button).
* **Text Display (10)** — markdown-текст, 1–4000 символов. Аналог `content`, но можно несколько блоков. Поддерживает пинги (по `allowed_mentions`).
* **Thumbnail (11)** — маленькая картинка-accessory внутри Section. Поля: `media.url`, `description` (alt, 1024), `spoiler`.
* **Media Gallery (12)** — 1–10 медиа в галерее. Каждый item: `media.url`, `description`, `spoiler`.
* **File (13)** — показывает прикреплённый файл (только `attachment://`, не URL). `spoiler`.
* **Separator (14)** — вертикальный отступ. `divider` (bool), `spacing` (1 SMALL / 2 LARGE).
* **Container (17)** — визуальный блок с цветной полосой. `accent_color` (int), `spoiler`, до 10 внутренних (action row / text display / section / media gallery / separator / file).

***

### 5. Кнопки

Внутри Action Row (до 5) или как accessory в Section.

| Стиль                 | # | Обязательное поле |
| --------------------- | - | ----------------- |
| PRIMARY (синяя)       | 1 | `custom_id`       |
| SECONDARY (серая)     | 2 | `custom_id`       |
| SUCCESS (зелёная)     | 3 | `custom_id`       |
| DANGER (красная)      | 4 | `custom_id`       |
| LINK (ссылка)         | 5 | `url`             |
| PREMIUM (покупка SKU) | 6 | `sku_id`          |

Поля: `label` (до 80, но по гайдам \~34 с эмодзи / \~38 без), `emoji`, `custom_id` (1–100), `url` (до 512), `disabled`.

* Не-link/не-premium кнопки обязаны иметь `custom_id`, без `url`/`sku_id`.
* Link и Premium кнопки **не шлют** interaction боту.

***

### 6. Селекты («скроллы») — 5 типов

Все селекты: `custom_id` (1–100), `placeholder` (до 150), `min_values`/`max_values` (0–25), `disabled`. В сообщении — внутри Action Row; в модалке — внутри Label.

| Тип                | # | Что выбирает               | Особое поле                                                           |
| ------------------ | - | -------------------------- | --------------------------------------------------------------------- |
| String Select      | 3 | из твоих `options` (до 25) | `options[]`: label(100), value(100), description(100), emoji, default |
| User Select        | 5 | пользователей              | `default_values[]`                                                    |
| Role Select        | 6 | роли                       | `default_values[]`                                                    |
| Mentionable Select | 7 | пользователей И роли       | `default_values[]`                                                    |
| Channel Select     | 8 | каналы                     | `channel_types[]` (фильтр по типу канала), `default_values[]`         |

User/Role/Mentionable/Channel — опции подставляются Discord автоматически из гильдии. Мульти-выбор через `max_values > 1`.

***

### 7. Модальные окна (modals)

Показываются в ответ на interaction (response type 9). Структура: `title` (до 45), `custom_id` (до 100), `components` (до 5 верхнеуровневых).

**Что можно класть в модалку** (Discord теперь рекомендует оборачивать в **Label**, а не в Action Row):

* **Text Input (4)** — стили: 1 SMALL (одна строка), 2 PARAGRAPH (многострочный). `min/max_length` (до 4000), `value` (префилл), `placeholder`, `required`.
* **Селекты** — String / User / Role / Mentionable / Channel (в модалке — внутри Label).
* **File Upload (19)** — загрузка до 10 файлов. `min/max_values`, `required`, `file_types[]`.
* **Radio Group (21)** — выбор одного из списка (2–10 опций).
* **Checkbox Group (22)** — мульти-выбор чекбоксами (2–10 опций, `min/max_values`).
* **Checkbox (23)** — одиночный чекбокс (да/нет).
* **Text Display (10)** — статичный текст-пояснение внутри модалки.

**Label (18)** оборачивает один интерактивный компонент: `label` (45) + `description` (100) + вложенный компонент.

***

### 8. Как грузить готовый JSON с настройками в бота

Паттерн, который уже используется в твоём V2-билдере (`_v2_build_components`):

1. **Собираешь payload** — объект `{ "flags": 32768, "components": [...] }` (или Legacy `{ "content": ..., "embeds": [...], "components": [...] }`).
2. **Отправка нового сообщения:** `POST /channels/{channel_id}/messages` с этим телом и заголовком `Authorization: Bot <token>`.
3. **Редактирование:** `PATCH /channels/{channel_id}/messages/{message_id}` тем же телом.
4. **Ответ на interaction:** `POST /interactions/{id}/{token}/callback` с `{ "type": 4, "data": {payload} }`.

Для «загрузки готового JSON» в билдере: принимаешь JSON от пользователя → валидируешь (типы компонентов, лимиты) → кладёшь в `components` → отправляешь/PATCH-аешь. Кастомные `custom_id` кнопок/селектов возвращаются боту в interaction — по ним роутишь логику.

Гейт `attachment://<filename>` в File/Thumbnail/Media работает только если файл реально прикреплён в multipart-запросе.

***

### 9. Роуты, которые бот реально использует

#### Сообщения

| Метод  | Путь                                      | Что делает                            |
| ------ | ----------------------------------------- | ------------------------------------- |
| POST   | `/channels/{ch}/messages`                 | отправить сообщение                   |
| PATCH  | `/channels/{ch}/messages/{msg}`           | редактировать                         |
| DELETE | `/channels/{ch}/messages/{msg}`           | удалить                               |
| POST   | `/channels/{ch}/messages/bulk-delete`     | массовое удаление (2–100, до 14 дней) |
| POST   | `/channels/{ch}/messages/{msg}/crosspost` | опубликовать (announcement)           |
| GET    | `/channels/{ch}/messages`                 | история                               |
| PUT    | `/channels/{ch}/pins/{msg}`               | закрепить                             |

#### Реакции

| Метод  | Путь                                                     | Что делает                            |
| ------ | -------------------------------------------------------- | ------------------------------------- |
| PUT    | `/channels/{ch}/messages/{msg}/reactions/{emoji}/@me`    | поставить реакцию ботом               |
| DELETE | `/channels/{ch}/messages/{msg}/reactions/{emoji}/@me`    | убрать свою                           |
| DELETE | `/channels/{ch}/messages/{msg}/reactions/{emoji}/{user}` | убрать чужую (нужно MANAGE\_MESSAGES) |
| DELETE | `/channels/{ch}/messages/{msg}/reactions`                | снести все                            |

Для кастом-эмодзи в пути — формат `name:id`, для юникода — URL-энкод символа.

#### Interactions (ответы бота)

| Метод | Путь                                            | Что делает              |
| ----- | ----------------------------------------------- | ----------------------- |
| POST  | `/interactions/{id}/{token}/callback`           | ответить на interaction |
| POST  | `/webhooks/{app_id}/{token}`                    | followup-сообщение      |
| PATCH | `/webhooks/{app_id}/{token}/messages/@original` | правка исходного ответа |

Типы ответа (`type`): 4 сообщение · 5 defer (думает) · 6 defer update · 7 update message · 8 автокомплит · 9 **показать модалку**.

#### Вебхуки

| Метод | Путь                      | Что делает                                               |
| ----- | ------------------------- | -------------------------------------------------------- |
| POST  | `/channels/{ch}/webhooks` | создать вебхук                                           |
| POST  | `/webhooks/{id}/{token}`  | отправить от имени вебхука (`?wait=true`, `?thread_id=`) |

Вебхук умеет embeds/components, но **не получает** клики/interaction — для этого нужен бот.

#### Участники и роли

| Метод  | Путь                                      | Что делает                                                             |
| ------ | ----------------------------------------- | ---------------------------------------------------------------------- |
| PATCH  | `/guilds/{g}/members/@me`                 | **косметика бота по-серверно** (ник, аватар, баннер, био, стиль имени) |
| PATCH  | `/guilds/{g}/members/{user}`              | изменить участника (ник, роли, мут, тайм-аут, перенос в голосовой)     |
| PUT    | `/guilds/{g}/members/{user}/roles/{role}` | выдать роль                                                            |
| DELETE | `/guilds/{g}/members/{user}/roles/{role}` | снять роль                                                             |
| GET    | `/guilds/{g}/members` / `.../search`      | список / поиск участников                                              |

#### Роли, каналы, эмодзи

| Метод                 | Путь                                         | Что делает                                                                |
| --------------------- | -------------------------------------------- | ------------------------------------------------------------------------- |
| GET/POST/PATCH/DELETE | `/guilds/{g}/roles`                          | управление ролями (+ bulk-позиции)                                        |
| GET/POST/PATCH/DELETE | `/guilds/{g}/channels`, `/channels/{id}`     | управление каналами                                                       |
| POST                  | `/guilds/{g}/emojis`, `/guilds/{g}/stickers` | кастом-эмодзи/стикеры (с фев 2026 нужно право CREATE\_GUILD\_EXPRESSIONS) |

#### Аккаунт и приложение бота

| Метод | Путь                | Что делает                                                                                                                      |
| ----- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| GET   | `/users/@me`        | профиль бота (читать decoration/primary\_guild — оба `null`)                                                                    |
| PATCH | `/users/@me`        | глобально: `username`, `avatar` (баннер — только premium)                                                                       |
| GET   | `/users/{id}`       | чужой профиль (тут виден `avatar_decoration_data.sku_id`)                                                                       |
| PATCH | `/applications/@me` | **профиль приложения**: `description` («обо мне»), `tags`, `icon`, `cover_image`, `install_params`, `interactions_endpoint_url` |

#### Слэш-команды

| Метод    | Путь                                      | Что делает                              |
| -------- | ----------------------------------------- | --------------------------------------- |
| POST/PUT | `/applications/{app}/commands`            | глобальные команды                      |
| POST/PUT | `/applications/{app}/guilds/{g}/commands` | команды сервера (обновляются мгновенно) |

***

### 10. Итог по кастомизации (ответ на «что можно навесить боту»)

**Можно:** по-серверный ник/аватар/баннер/био/стиль имени (member-эндпоинт), описание и теги приложения (`/applications/@me`), богатые сообщения (эмбеды, Components V2, контейнеры, галереи, кнопки, селекты), интерактив (модалки с инпутами/селектами/чекбоксами/загрузкой файлов), слэш-команды, реакшн-роли.

**Нельзя (тихо игнорируется или заблокировано):** украшение аватара, нэймплейт, эффект/эмодзи/цвета профиля, тег сервера (`primary_guild`/`clan`), любые SKU-коллекционные предметы, кастомный дискриминатор.

**Единственный непроверенный кандидат:** Profile Widgets V2 через `PATCH /applications/{app}/users/{bot_id}/identities/0/profile` — пушится бот-токеном (не через `/users/@me`), поэтому не попадает под «тихое игнорирование». Требует настройки виджета в Developer Portal и включённого эксперимента рендерера.
