setChatInput:チャット入力欄への書き込み
setChatInput はチャット入力欄にテキストを書き込みます。最も典型的な使い方は選択肢型のインタラクションです:コードブロック に選択肢ボタンを並べ、ユーザーがタップするとセリフが入力欄に入り、ユーザーが確認してから送信します。
シグネチャ
ts
type ChatInputMode = 'roleplay' | 'guide'
declare function setChatInput(
text: string,
option?: { mode?: ChatInputMode },
): Promise<'roleplay' | 'guide'>パラメータと挙動
text は入力欄に書き込む完全なテキストです。この操作は対象入力欄の現在の下書きを上書きします——追記ではなく、メッセージの自動送信もしません。送信の判断は常にユーザーの手にあります。
option に指定できるのは任意の mode フィールドだけで、余分なフィールドがあると拒否されます:
mode | 対象 | 挙動 |
|---|---|---|
省略 / roleplay | ロールプレイ入力欄 | デフォルト。「ロールプレイ」に切り替えてテキストを書き込む |
guide | 指示入力欄 | ディープロールプレイが ON のときのみ利用可。「指示」に切り替えてテキストを書き込む |
- 成功すると Promise は実際に使われたモード(
roleplayまたはguide)を返します - 一方の入力欄への書き込みが、もう一方の下書きを消すことはありません
注意:指示入力欄はユーザーがディープロールプレイを ON にしているときだけ存在します。OFF の状態で guide を指定すると Guide input requires deep roleplay mode で拒否されます——ユーザーが必ずディープロールプレイを使っているとは限らないため、guide を使うときは必ず失敗時の処理を入れてください(ユーザーへの案内、またはロールプレイ入力欄へのフォールバック。下の例を参照)。
基本例:選択肢ボタン
markdown
```html
<!doctype html>
<html>
<head>
<style>
.choices { display: flex; gap: 8px; }
</style>
</head>
<body>
<div class="choices">
<button data-text="ドアを開けて、まず部屋の様子をうかがう。">慎重に入る</button>
<button data-text="彼女の名前を呼ぶ。">呼びかける</button>
</div>
<p id="status" aria-live="polite"></p>
<script>
const status = document.querySelector('#status');
document.querySelectorAll('[data-text]').forEach((button) => {
button.addEventListener('click', async () => {
try {
await setChatInput(button.dataset.text);
status.textContent = '入力欄に書き込みました';
} catch (error) {
status.textContent = error.message;
}
});
});
</script>
</body>
</html>
```指示入力欄を使う
markdown
```html
<!doctype html>
<html>
<body>
<button id="guide">指示に書き込む</button>
<script>
document.querySelector('#guide').onclick = async () => {
const text = '場面を夜に移し、緊張感を高めてください。';
try {
await setChatInput(text, { mode: 'guide' });
} catch (error) {
// ディープロールプレイが OFF だと guide は使えないため、ロールプレイ入力欄にフォールバック
await setChatInput(text);
}
};
</script>
</body>
</html>
```Tavern Helper 互換:triggerSlash と /setinput
既存の Tavern Helper コンテンツをコード変更なしで動かせるよう、コードブロックには互換関数 triggerSlash も注入されています。現在は最もよく使われる /setinput に対応しています:
ts
declare function triggerSlash(command: string): Promise<string>js
await triggerSlash('/setinput ドアを開けて部屋に入る。');等価な書き方:
js
await setChatInput('ドアを開けて部屋に入る。');- コマンド名は大文字小文字を区別しません
- 成功時は空文字列を返し、Tavern Helper の呼び出し形式に合わせています
/setinput以外のコマンドはすべてOnly the /setinput slash command is supportedで拒否されます
新しいコンテンツでは、意味が明確で書き込み先も指定できる setChatInput を優先してください。
機能チェックとエラー処理
呼び出す前に関数の存在を確認し、Promise の reject(検証エラー・操作失敗・10 秒タイムアウト)を処理してください:
js
if (typeof window.setChatInput !== 'function') {
// この環境では未対応——ボタンを隠すかプレーンテキストにフォールバック
} else {
try {
await window.setChatInput('入力する内容');
} catch (error) {
console.error(error.message);
}
}ヒント
- 基本例のようにユーザーへ状態表示(書き込み完了 / 失敗理由)を出すと体験がより良くなります
- すでに
/setinputを使っているコンテンツは書き換え不要——triggerSlashがそのまま動きます