Kotone TTS API
Discord でログインし、発行された一時 Token を `Authorization: Bearer <token>` ヘッダに付けて呼ぶ。Token は BOT を再起動すると失効する。
仕様の機械可読版: openapi.json
ベース URL: https://kotoneapi.libertasmc.xyz
ログインの流れ
- ブラウザで
/auth/login?redirect_uri=<戻り先>を開く → Discord の認可画面 - 許可すると
/auth/callbackを経て戻り先へ 302 され、URL のフラグメントに#token=…&token_type=Bearer&expires_in=…が付く(redirect_uri無しなら JSON で返る。認可画面でキャンセルすると?error=access_deniedを付けて戻り先へ 302) - 以後
Authorization: Bearer <token>を付けて呼ぶ
エンドポイント
ブラウザでこの URL を開く。認可後 `/auth/callback` に戻る。`redirect_uri` を付けると、callback は JSON ではなくその URL へ `#token=…&token_type=Bearer&expires_in=…` を付けて 302 で戻す (許可リストにある URL だけ・完全一致)。
| パラメータ | 場所 | 必須 |
|---|---|---|
redirect_uri | query | いいえ |
| 状態 | 説明 |
|---|---|
302 | Discord の認可画面へ |
400 | redirect_uri が許可リストに無い |
`/auth/login` に `redirect_uri` を付けていた場合は JSON ではなく、その URL へ `#token=…` を付けて 302 で戻す。認可画面でキャンセルされた等 (`error=`) のときは code の交換をせず、戻り先へ `?error=<code>` を付けて 302 で戻す (code は `access_denied` など OAuth2 の既知の値だけ。それ以外は `error` に潰す。戻り先が無ければ 400 の JSON)。
| パラメータ | 場所 | 必須 |
|---|---|---|
code | query | いいえ |
state | query | はい |
error | query | いいえ |
| 状態 | 説明 |
|---|---|
200 | 発行された Token (redirect_uri 無しのとき) |
302 | redirect_uri へ戻す。成功なら `#token=…&token_type=Bearer&expires_in=…`、拒否なら `?error=access_denied` 等 |
400 | state が不正、または Discord が code を拒否 |
200 の見本
{
"token": "string",
"token_type": "Bearer",
"expires_in": 0,
"user": {
"id": "string",
"username": "string",
"global_name": "string",
"avatar": "https://…"
}
}| 状態 | 説明 |
|---|---|
204 | 失効した (元から無効でも 204) |
利用者が参加しているサーバーのうち、この BOT が入っているものだけを返す。
| 状態 | 説明 |
|---|---|
200 | 利用者とサーバー |
401 | Token が無い・期限切れ・Discord 側で失効 |
502 | Discord API に到達できない |
200 の見本
{
"user": {
"id": "string",
"username": "string",
"global_name": "string",
"avatar": "https://…"
},
"guilds": [
{
"id": "string",
"name": "string",
"icon": "https://…",
"can_manage": true
}
]
}「サーバの管理」権限を持つサーバーだけ。BOT が入っていない・利用者が居ないサーバーは 404。
| パラメータ | 場所 | 必須 |
|---|---|---|
guild_id | path | はい |
| 状態 | 説明 |
|---|---|
200 | 設定と選択肢 |
401 | 未ログイン |
403 | 「サーバの管理」権限が無い |
404 | サーバーが見つからない |
200 の見本
{
"settings": {
"default_speaker": "string",
"max_chars": 0,
"read_name": true,
"read_join_leave": true,
"use_global_dict": true,
"auto_join": true,
"auto_join_map": {
"1534536028453470370": "123456789012345678"
},
"auto_read_map": {
"1534536028453470370": "234567890123456789"
},
"unassigned_auto_join_channel_ids": [
"string"
],
"dict_edit_mode": "string",
"dict_edit_role_id": "string"
},
"bans": [
{
"id": "string",
"name": "string"
}
],
"options": {
"speakers": [
{
"id": "string",
"name": "string"
}
],
"bots": [
{
"id": "string",
"name": "string",
"is_main": true
}
],
"channels": [
{
"id": "string",
"name": "string",
"type": "string",
"category": "string"
}
],
"roles": [
{
"id": "string",
"name": "string",
"color": 0
}
],
"dict_edit_modes": {}
}
}変えたい項目だけを JSON で送る。ID は文字列でも整数でも可。知らないキーは 400。auto_join_map / auto_read_map は全体の置き換え。検証に通らなければ何も保存せず 400 で理由を返す。
| パラメータ | 場所 | 必須 |
|---|---|---|
guild_id | path | はい |
| 状態 | 説明 |
|---|---|
200 | 更新後の設定 (GET と同じ形) |
400 | 入力が不正 (理由は error に) |
401 | 未ログイン |
403 | 「サーバの管理」権限が無い |
404 | サーバーが見つからない |
送れる項目
| 項目 | 型 | 説明 |
|---|---|---|
default_speaker | string | 既定の話者 ID (options.speakers から) |
max_chars | integer | 1メッセージで読む上限 (1〜500) |
read_name | boolean | 名前を読む |
read_join_leave | boolean | 入退室を読む |
use_global_dict | boolean | グローバル辞書を使う |
auto_join | boolean | 自動入室。true にするには auto_join_map に VC が1つは要る |
auto_join_map | object | {BOT のユーザ ID: 自動入室する VC の ID}。PATCH では全体を置き換える。同じ VC を2つの BOT に割り当てられない |
auto_read_map | object | {BOT のユーザ ID: 自動入室時に読み上げるチャンネルの ID}。無い BOT は参加した VC のチャットを読む。PATCH では全体を置き換える (値 null はその BOT を VC のチャットに戻す)。auto_join_map で VC を割り当てた BOT にだけ付けられる |
dict_edit_mode | string (admin, role, everyone) | サーバー辞書を誰が編集できるか |
dict_edit_role_id | string | dict_edit_mode=role のときのロール。指定すると mode も role になる |
200 の見本
{
"settings": {
"default_speaker": "string",
"max_chars": 0,
"read_name": true,
"read_join_leave": true,
"use_global_dict": true,
"auto_join": true,
"auto_join_map": {
"1534536028453470370": "123456789012345678"
},
"auto_read_map": {
"1534536028453470370": "234567890123456789"
},
"unassigned_auto_join_channel_ids": [
"string"
],
"dict_edit_mode": "string",
"dict_edit_role_id": "string"
},
"bans": [
{
"id": "string",
"name": "string"
}
],
"options": {
"speakers": [
{
"id": "string",
"name": "string"
}
],
"bots": [
{
"id": "string",
"name": "string",
"is_main": true
}
],
"channels": [
{
"id": "string",
"name": "string",
"type": "string",
"category": "string"
}
],
"roles": [
{
"id": "string",
"name": "string",
"color": 0
}
],
"dict_edit_modes": {}
}
}その人の発言をこのサーバーで読み上げなくする。BOT は登録できない (もともと読まない)。
| パラメータ | 場所 | 必須 |
|---|---|---|
guild_id | path | はい |
user_id | path | はい |
| 状態 | 説明 |
|---|---|
204 | 登録した |
400 | BOT を指定した等 |
401 | 未ログイン |
403 | 権限が無い |
404 | サーバーが見つからない |
| パラメータ | 場所 | 必須 |
|---|---|---|
guild_id | path | はい |
user_id | path | はい |
| 状態 | 説明 |
|---|---|
204 | 解除した (元から無くても 204) |
401 | 未ログイン |
403 | 権限が無い |
404 | サーバーが見つからない |
ユーザ名またはニックネームの **前方一致** (Discord の制約で部分一致は不可)。ID を渡すと ID で引く。
| パラメータ | 場所 | 必須 |
|---|---|---|
guild_id | path | はい |
q | query | はい |
limit | query | いいえ |
| 状態 | 説明 |
|---|---|
200 | 一致したメンバー |
400 | q が空 |
401 | 未ログイン |
403 | 権限が無い |
404 | サーバーが見つからない |
502 | Discord から取得できない |
200 の見本
{
"members": [
{
"id": "string",
"name": "string",
"username": "string",
"avatar": "https://…",
"bot": true
}
]
}そのサーバーに居る人なら誰でも見られる。`can_edit` で自分が編集できるかが分かる (/settings の辞書編集権限に従う)。
| パラメータ | 場所 | 必須 |
|---|---|---|
guild_id | path | はい |
| 状態 | 説明 |
|---|---|
200 | 辞書 |
401 | 未ログイン |
404 | サーバーが見つからない |
200 の見本
{
"entries": [
{
"pattern": "string",
"replacement": "string",
"is_regex": true,
"created_by": "string",
"created_at": "string"
}
],
"limit": 0,
"can_edit": true
}編集できるのは /settings の «辞書編集権限» を満たす人 (管理者は常に可)。
| パラメータ | 場所 | 必須 |
|---|---|---|
guild_id | path | はい |
| 状態 | 説明 |
|---|---|
200 | 登録された項目 |
400 | 入力が不正・上限超過・危険な正規表現 |
401 | 未ログイン |
403 | 編集権限が無い |
404 | サーバーが見つからない |
送れる項目
| 項目 | 型 | 説明 |
|---|---|---|
pattern | string | 読み方を直したい語 (200文字まで)。同じ pattern を送ると上書き |
replacement | string | 読み方 (200文字まで) |
is_regex | boolean | 正規表現として扱う (既定 false)。危険なパターンは 400 |
created_by | string | 登録した人のユーザ ID (応答のみ) |
created_at | string | 登録日時 ISO 8601 (応答のみ) |
200 の見本
{
"pattern": "string",
"replacement": "string",
"is_regex": true,
"created_by": "string",
"created_at": "string"
}| パラメータ | 場所 | 必須 |
|---|---|---|
guild_id | path | はい |
pattern | query | はい |
| 状態 | 説明 |
|---|---|
204 | 削除した |
401 | 未ログイン |
403 | 編集権限が無い |
404 | サーバー、または pattern が見つからない |
| 状態 | 説明 |
|---|---|
200 | HTML |
| 状態 | 説明 |
|---|---|
200 | JSON |