[SSP技術資料]

SHIORIイベント通知仕様

[2004.8.1更新]


SSPのSHIORIイベント

OnBIFFComplete

OnBIFFCompleteのReference4には、"TOP * 0"というPOP3コマンドによって取得したメールヘッダが、改行を0x01、メールごとの区切りを0x02とすることで格納されるのはembryo/MATERIAの仕様書と変わりありませんが、References、Received等、不要かつ異常な大きさに膨れ上がり、実装によってはSHIORIが停止する元となるであろうヘッダは本体の方でフィルタリングしており、SHIORIには送信されないようになっています。

具体的な「通ってくるヘッダ」は以下の通りです。
"From","Subject","Date","Message-Id","X-SSTP-*"

なお、POP3仕様(RFC 1939)で「複数行に区切られたヘッダ」が説明されていますが、その折り返されたヘッダはSSP内で元に戻されたのち渡されますので、特に考慮する必要はありません。

また、設定によってReference4が常に空文字列となることがありますので、そういう場合も考慮してゴースト側、SHIORI側等で解釈する必要があります。

OnEmbryoExist

SSP起動時に,「何か。」がすでに起動されているときに呼ばれます.
通常は,共存してもいいかを控えめにユーザに問い掛けるスクリプトを入れます.
OnMateriaExistとでもするべきですが、仕様ですので旧名のEmbryoで固定します。

OnNekodorifExist

SSP起動時に,「猫どりふ」がすでに起動されていて,「何か。」がいないときに呼ばれます.

OnScreenSaverStart/OnScreenSaverEnd

スクリーンセーバが起動した時・終了した時にそれぞれ呼ばれます.

OnNetworkHeavy

Reference0にタイムアウトするまでの時間が単位=秒で渡ります。

OnSecondChange / OnMinuteChange

選択肢表示中やクリック待ち中には今のところOnSecondChange / OnMinuteChangeは来ません。

Reference4に放置秒数が入ります。

OnKeyDown

Reference2にキーリピートカウント(押しっぱなしにした場合の繰り返し回数)が入ります。

 

また,SSPはOnURLDropping/Droppedには対応していません. 

 

 


SSP固有のSHIORI/3.0イベント

SSP固有のSHIORI/3.0イベント識別子です.これ以外の分はembryo/MATERIAの仕様書を参照願います.

GET SHIORI/3.0 ID: OnAITalk

\aタグ等によるAIランダムトーク処理はSHIORI/3.0になって廃止されましたが、SSPではOnAITalkを送るようになっています。
ただし、どうしても\aをサポートしたい等の事情がある場合以外は、この機能には頼らないことをおすすめします。

GET SHIORI/3.0 ID: OnTranslate

MAKOTOのトランスレート機能と同等のものをSHIORIでも実行するためのイベントです。SHIORIからの出力はもちろんですが、SSTP通信のスクリプト内容も送られてくるところがポイントです。
Reference0に現在処理すべきSakuraScriptが格納されますので、処理したのちValueで返してください。

GET SHIORI/3.0 ID: OnTeach

TeachBoxからの入力があった場合に送られるイベントです。TEACH SHIORI/2.4の代替用です。
最初の入力はReference0、その後311 Not Enoughを返し、返答としてユーザが入力する度に、入力された文字列がReference1,2,3...と溜まっていきます。
312 Adviceを返すと、直前に入力された文字を破棄し、再びユーザに入力を求めます。

具体例は以下の通りです。入力 / 出力 "//"以下はコメント

GET SHIORI/3.0
ID: OnTeach
Reference0: 伺か //TeachBoxに「伺か」と入れた

SHIORI/3.0 311 Not Enough
Value: \0\s0伺かって何?\e //Reference0(さっき入れたもの)は保存しておいて次を聞く

GET SHIORI/3.0
ID: OnTeach
Reference0: 伺か
Reference1: まてりあ //TeachBoxに「まてりあ」と入れた

SHIORI/3.0 312 Advice
Value: \0\s7まてりあって言われてもわかるかーっ!\1\s[11]まともに教えたってや。\e //さっき入れたReference1は破棄することを指示

GET SHIORI/3.0
ID: OnTeach
Reference0: 伺か
Reference1: 人生をちょっぴり楽しくするモノ //前回のReference1は消え、新たな内容が入る

SHIORI/3.0 200 OK
Value: \0\s0なりゅほろー。\e //311,312以外のステータスコードで会話終了

GET SHIORI/3.0 ID: \m?

%ms,%mz...タグ等で、スクリプト内に指定した単語を挿入します。識別子は以下の通りで、たとえばスクリプト内の%msは識別子\msとして呼び出されます。
SSTP通信等で会話文の幅を広げるために今後も使われる可能性がありますので、特に問題がある場合を除き、出来ればサポートすることをおすすめします。

\ms  名詞 - 人
\mz  名詞 - 無機物
\ml  名詞 - 集合
\mc  名詞 - 社名
\mh  名詞 - 店名
\mt  名詞 - 技
\me  名詞 - 食物
\mp  名詞 - 地名
\m?  名詞 - 非限定
\dms  品詞が複数連結された長めの名詞

NOTIFY SHIORI/3.0 ID: installedshellname / installedballoonname

現在のゴーストにインストールされているシェル名/バルーン名をReference0から列挙します。
installedghostnameも同様ですが、Reference8以降、場合によってはReference100とか200とかのようにかなりの量のヘッダが渡ることになりますので、SHIORIでの処理時には十分にバッファオーバーフローに注意してください。

NOTIFY SHIORI/3.0 ID: hwnd

Reference0にゴーストウィンドウ、Reference1にバルーンのウィンドウのHWND(ウィンドウハンドル)をunsigned形式、\1(バイト値1)区切りで\0から順に渡します。
SSPで注意すべき点は、複数ウィンドウ機能のため、2個ではなく少なくとも10個分程度までウィンドウハンドルが渡される点です。そのため、
・渡されるHWNDが2個だと決め打ちして処理しないこと
・まだ使われていないウィンドウのHWNDは0としてとりあえず渡され、初回利用時に再びNOTIFYされるため、最初に送られてきたNOTIFY hwndをそのまま使うような処理は行わないこと
以上の点に注意して処理してください。

NOTIFY SHIORI/3.0 ID: OnCacheSuspend / OnCacheRestore

ゴーストキャッシュに入った/出たときに通知されます。

SSPは、特に指定しない限りゴーストのデータ・DLL等を、メモリが許す限りキャッシュしています。そのため、ゴースト切り替え・終了だけでは、SHIORI/MAKOTO等はUnloadされません。

どうしてもLoad/Unloadのタイミングをきちんと知りたい場合、このIDに対応してください。

 


SSPの独自ヘッダ

Statusヘッダ

ゴーストの現在の状態を通知します。
今のところ Status: talking で喋っていることの通知のみですが、
Status: hogehoge,funya
のようにカンマ区切りで追加してゆく予定ですので、対応しておくと幸せになれるかもしれません。