スクリプト

Last-modified: 2023-03-12 (日) 17:08:16

地球のアイコン(右から二番目)を押すと表示される、ボイジャー会員以上向けの機能。AIへの入力、AIからの出力を所定のルールで置換することができる。IN・OUTともに、「|」で区切ると複数の候補から1つをランダムに選ぶ。

できること

本文に

出典:Wikipedia

太郎(

と書いて続きを生成させると、本来は次のようになる。

太郎(たろう)は、日本の男性名。

ここでスクリプトを「種別:入力文の置換」「IN:太郎」「OUT:花子」と設定すると、

太郎

 ↓ AIからは「花子(」に見えている

太郎(はなこ)は、日本の女性名。

「種別:出力文の置換」「IN:たろう」「OUT:はなこ」とすると、

太郎(

 ↓ AIは「たろう)は、日本の男性名。」と出力したつもり

太郎(はなこ)は、日本の男性名。

「種別:【最新】入力文の確定置換」「IN:太郎」「OUT:花子」とすると、

太郎

 ↓ 入力文が置換される

花子はなこ)は、日本の女性名。

となる。

使いどころ

入力文の置換

・主人公の名前を#name#としたプロンプトを配布し、利用者が好きな名前に置換する
・行動の後に「~して大成功した」or「~したが失敗した」をランダム生成して運試し
・文字単位のコメントアウト

出力文の置換

・表記ゆれの吸収
・「彼」「あの教師」「山田」のように複数の呼び名がある登場人物の表記ゆれを意図的に作り出す
・高度な禁止ワード設定(URL生成禁止・熟語の一部でない「私」禁止など)

【最新】入力文の確定置換 / 【本文全体】入力文の確定置換

・候補一覧からランダムに入力した結果を表示に反映させる
・「出力文の置換」では入力文と出力文にまたがった該当文字列が変換対象にならない。「【最新】入力文の確定置換」にも同じスクリプトを設定しておくと、すり抜けた文字列が次に送信したときに自動で変換されて便利
・最新入力文にテスト文字列を入力するとスクリプトの動作チェックがしやすい

単語の言い換え

「入力文の置換」と「出力文の置換」を一つにまとめて設定する合わせ技。
この種別で「IN:A」「OUT:B」と設定した場合、「入力文の置換」に「IN:A」「OUT:B」と設定、「出力文の置換」に「IN:B」「OUT:A」と設定したのと全く同じ効果になる。
「単語の言い換え」の設定をすることで、Aと書いてあるものを内部的にBとして処理させることができる。男性名と女性名・人名と動物名・固有名詞と普通名詞・その他似た言葉との取り違え防止、同名の版権キャラ乱入防止、AIが認識しない記号を読み書きさせたいときなどに。読み替え先はなんでも良いが、頭文字や語感は読み替え元と似せておこう。

送信欄の置換

・送信欄の内容を本文に追加する前に置換する。
・発言の前に発言者の名前を挿入したい場合や、カギ括弧以外の括弧で囲いたい場合に利用する。
・「チャット/ゲーム」モードでのみ動作する。

仕様

・スクリプトは最大99個まで設定できる。
・スクリプトは上から順に実行される。
・IN・OUTともに最大1000字まで入力できる。
・ランダム置換対象が複数あるときでも、選ばれるのは一度に1つ(「IN:A」「OUT:B|C」のとき、「AA」は「BB」か「CC」になる)。
・「入力文の置換」はサーバー側、「出力文の置換」「【最新】入力文の確定置換」「【本文全体】入力文の確定置換」はユーザー側で処理される。
・脚注の挿入やキャラクターブックのタグ認識は、「【最新】入力文の確定置換」と「【本文全体】入力文の確定置換」処理後・「入力文の置換」処理前に行われる。
・「入力文の置換」は本文だけでなくメモリ・脚注・キャラクターブックなど全ての入力文に有効。内部的には「メモリ」(改行)「最初のキャラクターブック」(改行)「2番目のキャラクターブック」(改行)…(改行)「最後のキャラクターブック」(改行)(改行)「古い本文」(改行)「脚注」(改行)「新しい本文」という形式になる。
・改行は
  「入力文の置換」IN:ヒット不可
  「入力文の置換(正規表現)」IN:\n
  「入力文の置換(通常・正規表現共通)」OUT:半角スペース
  それ以外の種別:<br>
 で表現する。
・「【最新】入力文の確定置換」の対象になるのは、本文入力欄で一番下にある入力枠の中にある文章のみ。
・「【最新】入力文の確定置換」は誤爆を防ぐため、OUT欄が空欄だと動作しない。
・「【最新】入力文の確定置換」適用中は、入力文にフェードエフェクトがかかる。
・「【本文全体】入力文の確定置換」は基本的に「【最新】入力文の確定置換」と同じ動作だが、置換の対象がすべての入力枠となっている。
・「【本文全体】入力文の確定置換」の置換は行われるため、入力枠ごとに正規表現の文末「$」の判定が行われる。
・「送信欄の置換」は「チャット/ゲーム」モードでのみ動作する。
・「送信欄の置換」は「発言をカギ括弧(「」)で囲む」による括弧追加処理より前に実行される。
・書式情報の破壊に注意:
  改行<br>
  最新出力文の始端<span id="ai_output" style="color:(文字色)">
  最新出力文の終端</span>
  コメントの始端<font color="#aaaaaa">
  コメントの終端</font>
 これらのコードは普通の文字列と同じ扱いであり、置換対象に含まれてしまう。「IN:<」などとしないように。

正規表現

正規表現とは、簡単に言うと「特殊文字を使ったあいまい検索」のこと。(正規表現)とついた種別を選択すると「IN:」内で使用可能になる。詳しく解説するとそれだけで本が一冊書けてしまうので、ここでは基本的な構文に絞って紹介する。

特殊

$ ( ) * + . ? [ ] ^ | \

正規表現では、これらの記号はあいまい検索用の特殊な意味を持つ。ただの文字として使いたいときは、

\$ \( \) \* \+ \. \? \[ \] \^ \| \\

と直前に「\」を置く必要がある。(「\」はフォントによって、バックスラッシュまたは円記号として表示される)
またAIのべりすと特有の機能として、「|」はランダム置換を意味する。

スラッシュ(/)

スラッシュ(/)は正規表現の特殊文字ではないが、「入力文の置換(正規表現)」を使用する場合だけ、特別に扱わなければならない。
「入力文の置換(正規表現)」はサーバー側で処理されるが、そこではデフォルトの正規表現のデリミタ(区切り文字)としてスラッシュを使用しているようだ。
そのため、ただ単に「入力文の置換(正規表現)」のINにスラッシュを使うと、正常な出力ができなくなる。

回避ためには、デリミタを明示的に書いてやると良い。
例えば、「/zero」という文字にヒットさせたい場合は、次の表のような正規表現がINに使える。

表記法備考
/\/zero/デリミタにスラッシュを明示的に指定する。明示的に指定しないと「\/」(スラッシュの前に「\」を置いて特殊文字ではなくす)と書いただけでエラーになる。
#/zero#デリミタを「#」にする。この場合「/」が特殊文字ではなくなるため、「\」を置く必要がなくなる。ただし、「#」という文字にヒットさせたい場合は「\#」としなくてはならない。
[/zero]デリミタを「[」と「]」にする。この場合も「#」の時と同じく「/」が特殊文字ではなくなるため、「\」を置く必要がなくなる。「[」や「]」という文字にヒットさせたい場合は、「\[」や「\]」と書く。後述の「角カッコ内のどれか1字」という意味の「[]」と見間違わないよう注意。

いずれかの文字

記号意味設定例ヒット例
.1字IN:シンディ.キャンベル【シンディキャンベル】【シンディキャンベル】【シンディキャンベル】
[]角カッコ内のどれか1字IN:魔[導道術][師士]【魔】【魔】【魔
[^]角カッコ内にない1字IN:騎[^]団【騎団】【騎団】【騎団】
(|)|で区切られた文字列のどれか1つIN:(あき|空き|空)(かん|カン|缶)あきカン】【空きかん】【

[角カッコ]や[^角カッコ]の中に字を直接書くとその字、2字を-でつなぐとUnicodeで2字の間にあるすべての字が検索文字に追加される。
・数字:0-90-9〇一二三四五六七八九
・アルファベット:A-Za-zA-Za-z
・ひらがな:ぁ-ゞー
・カタカナ:ァ-ヾヲ-゚
・主な漢字:一-龠々〇

文字の繰り返し

記号意味設定例ヒット例
+直前文字(直前が丸カッコなら丸カッコ全体。以下同じ)が1回以上連続する文字列IN:+】【……】【………………
?直前文字が0回か1回出現する文字列IN:(<br>)?「」(<br>)?【「」】【(改行)「」】【「」(改行)】【(改行)「」(改行)
*直前文字が0回以上連続する文字列IN:<[^>]*>【<>】【<ここから>】【<(^o^)>】
{回数}直前文字が(回数)回連続する文字列IN:ID:.{9}【ID:fhQv/pUGJ】【ID:K+wqfzk5e
{下限,上限}直前文字が(下限)~(上限)回連続する文字列IN:[0-9]{1,3}:7:】【53:】【315:】
ゾロ目だけを検索したい場合は「ヒットした文字列の再利用」を参照。

ヒットした文字列の再利用

記号意味設定例ヒット例
\数字(数字)番目の丸カッコの中身(IN用)IN:([「」『』])\1+
OUT:$1
「「】【』』』』】を【】【】に
$数字(数字)番目の丸カッコの中身(OUT用)
$<文字列>"(?<文字列>...)"のように丸カッコの直後に"?<文字列>"と書いた丸カッコの中身(OUT用)IN:(?<天気>晴天)
OUT:$<天気>
本日は【晴天】なり

・文字列は再利用のみ可能。加工(ひらがな⇔カタカナ変換、数字を1増やすなど)することはできない。

位置条件指定

記号意味設定例ヒット例
文字列(?=条件)(文字列)の直後に(条件)がヒット<br>(?=)(改行)所属は
改行きのこ軍
改行たけのこ軍
(改行)から選択
文字列(?!条件)(文字列)の直後に(条件)がヒットせず(?![」』)])『キョン【】パンダを密猟するわよ!
(?<=条件)文字列(文字列)の直前に(条件)がヒット(?<=花子「[^」]*)花子「」と私語に興じる
(?<!条件)文字列(文字列)の直前に(条件)がヒットせず(?<![一-龠々〇])椅子木製の【椅子】と電気椅子ぐらいの

・下の2種はブラウザによっては非対応。「入力文の置換(正規表現)」ではブラウザによらず使用可能だが、丸カッコの中の条件に*や+などヒットする文字数が変化するものは使えない。
・この構文の丸カッコは、「\数字」「$数字」が参照する丸カッコには含まれない。

設定サンプル

原稿用紙フォーマット

種別:出力文の置換
IN:(半角スペース)
OUT:(全角スペース)
種別:出力文の置換(正規表現)
IN:(「[^」]{10,}」)(<br>)?
OUT:$1<br>
種別:出力文の置換(正規表現)
IN:<br>(?![ 「『(<])
OUT:<br>(全角スペース)
種別:出力文の置換(正規表現)
IN:([!?])(?![ !?)」』】〉》〕'"<])
OUT:$1(全角スペース)
種別:出力文の置換(正規表現)
IN:([…—―─])\1*
OUT:$1$1
種別:出力文の置換(正規表現)
IN:([「」『』])\1+
OUT:$1
種別:入力文の置換(正規表現)
IN:^((?=([\s\S]*「))\2(?=([^」]*))\3$)
OUT:$1」🔚
種別:入力文の置換(正規表現)
IN:\n(?=[^「」]*」)
OUT:
種別:入力文の置換(正規表現)
IN:」\n(?![「\n])
OUT:
種別:入力文の置換
IN:」🔚
OUT:

働きは以下の通り。
・半角スペースを全角スペースに
・中身が10字以上のカギカッコの後に改行
・スペース、開きカッコ、改行が続かない改行のあとにスペース
・スペース、感嘆符、閉じカッコ、改行が続かない感嘆符のあとにスペース
・三点リーダ、ダッシュを2連続に
・多重カギカッコを一重に
・閉じていないカギカッコがあるとき、目印つき閉じカッコを補う
・カギカッコに囲まれた改行を無視
・開きカギカッコ、改行が続かないカギカッコ直後の改行を無視
・目印つき閉じカッコを削除
※このスクリプトを使っても、脚注の挿入は入力通りの改行を参照して行われるので注意。

まとめブログフォーマット

種別:【最新】入力文の確定置換(正規表現)
IN:</?span[^>]*>()
OUT:$1
種別:【最新】入力文の確定置換(正規表現)
IN:( |<br>)?([0-9]+)[.:]名無しさん( |<br>)?
OUT:<br>$2:名無しさん(半角スペース)
種別:【最新】入力文の確定置換(正規表現)
IN:ID:(?=([^ <]+))\1(<br>)?(?!$)
OUT:ID:$1<br>
種別:【最新】入力文の確定置換
IN:>>
OUT:>>

働きは以下の通り。
・最新入力文から書式を削除
・レス番の前に改行
・IDのあとに改行
・>>を>>に

単独濁点を認識させる(とりんさま・でりだ)

種別:単語の言い換え
IN:
OUT:‌゚

AIが認識しない文字を固有名詞に使う

種別:単語の言い換え
IN:赤碕
OUT:赤﨑
 
種別:単語の言い換え
IN:鴫沼
OUT:信貴沼

ポイント:置換の前後で漢字の読みは同じにしておいた方が良い。その方が「赤さ――」のように途中で言葉が切れたり、「し、鴫沼」のようにどもったりするような文章をAIが出力するときに、音が同じだとそれに合わせて出力してくれやすいので、修正する手間が省ける。

出力文から「あとがき」(表記ゆれを含む)以降の全文字を削除

種別:出力文の置換(正規表現)
IN:((あと|後)[が書]き).*
OUT:$1

熟語の一部でない「私」以降の全文字を削除

種別:出力文の置換(正規表現)
IN:([^一-龠々〇])私[^一-龠々〇].*
OUT:$1

出力文をコメント化する

種別:出力文の置換(正規表現)
IN:(.+)
OUT:<br>@/*$1@*/

続きの文を @/* と @*/ で囲った状態で出力する。詳細オプションの「出力をトリムする」のチェックを外しておくこと。(@*/がトリムされてしまうため)

種別:【本文全体】入力文の確定置換(正規表現)
IN:(@break.*)(<span id="ai_output".*</span>)
OUT:▶$2<br>$1

本文に @break があるとき、最新出力文を @break の上に移動する。

2要素のシャッフル

種別:入力文の置換
IN:#1#|#2#
OUT:【A】
種別:入力文の置換(正規表現)
IN:#1#|#2#
OUT:【B】

#1#と#2#のどちらかを【A】、もう片方を【B】に読み替えさせる。

プログレスバー

種別:【最新】入力文の確定置換(正規表現)
IN:(■|□)□(□*)
OUT:■$1$2

プログレスバー。AIが書き込みを行う度にドットが1つずつ増えていく。
出力例:

例文出力前■□□□□□□□□□
あああいいいううう
出力後■■□□□□□□□□
あああいいいううう(出力文)

特定の単語により囲まれた連続データの最後の要素の複製

種別:【最新】入力文の確定置換(正規表現)
IN:(.*)<任意の仕切り文字>(.*<任意の仕切り文字>)
OUT:$1<任意の仕切り文字>$2$2

仕切り文字で囲まれたデータ群の一番最後の文章の複製・出力を行う。
出力例:

例文出力前★☆★
あああ
いいい
★☆★
ううう
★☆★
出力後★☆★
あああ
いいい
★☆★
ううう
★☆★
ううう
★☆★(出力文)

同じ言葉の繰り返しを制限する

種別:入力文の置換(正規表現)
IN:(.{2,10}?)\1{2,}
OUT:$1$1
種別:出力文の置換(正規表現)
IN:(.{2,10}?)\1{2,}
OUT:$1$1

2~10文字までの同じ言葉の3回以上の連続を、2回の繰り返しに短縮する。
入力・出力の両方に設定することで、既に本文で繰り返しを含んでいる場合と、出力が繰り返しで占められている場合、どちらにも対応できる。

例文適用前オラオラオラオラオラオラオラオラオラオラオラオラオラオラオラ
適用後オラオラ
 
例文適用前がんばれ、がんばれ、がんばれ、がんばれ、がんばれ、がんばれ、がんばれ!
適用後がんばれ、がんばれ、がんばれ!

本文の下から○行目に特定の文字列を差し込み続ける

種別:【本文全体】入力文の確定置換(正規表現)
IN:(特定の文字列を入力<br>)(([^<]+<br>)*)(([^<]+<br>){行数を半角数字で入力})
OUT:$2$1$4
 
例文出力前aaa
[ジャンル:コメディ]
あああ
いいい
ううう
出力後aaa
あああ
[ジャンル:コメディ]
いいい
ううう

脚注のように使え、さらに他のスクリプトと組み合わせることにより動的に内容を書き換えることができる。