Эмодзи приложения
Эмодзи, загруженные в ваше приложение, можно использовать на любом сервере, где пишет бот, не занимая слоты эмодзи этого сервера. Как в Discord: тот же формат данных, тот же синтаксис <:name:id> в тексте сообщения.
Ограничения
- 2000 эмодзи на приложение (мягкий лимит, проверяется при создании).
- Максимальный размер файла 256 КБ.
- Типы содержимого:
image/png,image/jpeg,image/gif,image/webp. - Название: 2–32 символа, набор
[a-zA-Z0-9_]. Уникально в пределах приложения без учёта регистра:BotIconиboticonконфликтуют.
Определение анимации
Флаг animated устанавливается на сервере по типу содержимого загрузки. Всё, что загружено как image/gif, считается анимированным. Клиент не может это переопределить. Ссылаясь на анимированный эмодзи в тексте сообщения, используйте префикс <a:name:id> (как в Discord).
Эндпоинты REST (для ботов)
Bot-API предоставляет доступ к эмодзи вашего приложения только для чтения. Аутентификация: Authorization: Bot {token}.
GET /applications/{application.id}/emojis
GET /applications/{application.id}/emojis/{emoji.id} Структура ответа (элементы списка и GET одного эмодзи имеют одинаковую структуру Discord):
{
"id": "1199283740192847360",
"name": "thinking_orange",
"animated": false,
"user": { "id": "...", "username": "you" },
"managed": false,
"available": true
} Создание, изменение и удаление в bot-API недоступны. Маршруты Discord POST /applications/{id}/emojis, PATCH и DELETE в GameVox возвращают 404. Всё управление эмодзи идёт через портал разработчиков (см. ниже); мы планируем открыть эндпоинты записи в формате Discord, когда конвейер модерации на стороне портала станет достаточно стабильным, чтобы работать без участия человека.
Эмодзи в сообщениях
Ссылайтесь на эмодзи приложения в content так же, как на эмодзи сервера:
// Статичный
"hello <:thinking_orange:1199283740192847360>"
// Анимированный (обратите внимание на префикс `a:`)
"thanks <a:wave_orange:1199283740192847361>" Для реакций передайте name:id в URL-кодированном пути эмодзи в PUT /channels/{channel.id}/messages/{message.id}/reactions/{emoji}/@me, как в Discord.
Загрузка через портал
Портал разработчиков загружает эмодзи через тот же конвейер с предподписанными URL, что и аватары и значки приложений:
POST /api/uploads/presignсpurpose=bot_app_emojiиapplication_id.PUTфайла на полученный URL S3.POST /api/uploads/completeс полученнымfile_id.POST /developer-portal/applications/{id}/emojisс{name, file_id}.
Сервер проверяет, что префикс s3_key файла совпадает с bot-emojis/{application_id}/, так что утёкший file_id другого приложения привязать не удастся.
Хранение
Хранятся в bot-emojis/{application_id}/{file_id}.{ext} в публичном бакете gamevox-files-prod. При мягком удалении строки объект в S3 остаётся на месте; осиротевшие объекты собирает фоновый процесс очистки.