アプリ所有の絵文字
アプリケーションにアップロードした絵文字は、ボットが投稿するどのサーバーでも、そのサーバーの絵文字枠を消費せずに使えます。Discord と同等で、ワイヤーフォーマットもメッセージ本文の <:name:id> という書き方も同じです。
上限
- 1 アプリケーションにつき 2,000 個(ソフト上限。作成時にチェックします)。
- 256 KB の最大ファイルサイズ。
- コンテンツタイプ:
image/png、image/jpeg、image/gif、image/webp。 - 名前: 2〜32 文字、使用可能な文字は
[a-zA-Z0-9_]。アプリごとに一意で、大文字小文字は区別しません(BotIconとboticonは衝突します)。
アニメーションの判定
animated フラグは、アップロード時のコンテンツタイプからサーバー側で設定されます。image/gif としてアップロードされたものはアニメーション扱いです。クライアントから上書きはできません。メッセージ本文でアニメーション絵文字を参照するときは、<a:name:id> の接頭辞を使ってください(Discord と同一です)。
REST エンドポイント(ボット向け)
ボット 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
} 作成 / 更新 / 削除はボット API では提供していません。 Discord の POST /applications/{id}/emojis、PATCH、DELETE は GameVox では 404 を返します。絵文字の管理はすべて開発者ポータル(下記)で行います。ポータル側のモデレーション処理が人手なしで運用できるほど安定したら、Discord 互換の書き込みエンドポイントを提供する予定です。
メッセージで絵文字を使う
サーバーの絵文字と同じように、content の中でアプリの絵文字を参照します。
// 静止画
"hello <:thinking_orange:1199283740192847360>"
// アニメーション(先頭の `a:` に注意)
"thanks <a:wave_orange:1199283740192847361>" リアクションでは、Discord と同様に PUT /channels/{channel.id}/messages/{message.id}/reactions/{emoji}/@me の URL エンコードされた絵文字パスに name:id を渡します。
ポータルでのアップロードの流れ
開発者ポータルは、アバターやアプリアイコンと同じ署名付き URL のパイプラインで絵文字をアップロードします。
purpose=bot_app_emojiとapplication_idを付けてPOST /api/uploads/presign。- 返された S3 の URL にファイルを
PUT。 - 返された
file_idを付けてPOST /api/uploads/complete。 {name, file_id}を付けてPOST /developer-portal/applications/{id}/emojis。
サーバーはファイルの s3_key の接頭辞が bot-emojis/{application_id}/ と一致するか検証するため、他のアプリから漏れた file_id では紐づけに失敗します。
保存先
公開バケット gamevox-files-prod の bot-emojis/{application_id}/{file_id}.{ext} に保存されます。論理削除された行では S3 オブジェクトはそのまま残り、孤立したオブジェクトはバックグラウンドのスイーパーが回収します。