特に説明する必要もない気はしますが、.NET系のスタックでkokoro.ioに接続する方法について。
さんざん宣伝したので認知はされていると嬉しいのですが、kokoro.ioにはXamarin.Formsで実装されたスマートフォンアプリがあります。このアプリで使用されているのが.NET版のREST/WebSocketクライアントであるKokoroIO.Netです。NuGetにも登録されているので、通常はこちらからインストールすることになるかと思います。
使い方は簡単で、KokoroIO.Client
クラスをインスタンス化してAccessToken
を設定するだけです。
using (var c = new KokoroIO.Client())
{
c.AccessToken = "{kokoro.ioのメニューで発行したトークン}";
await c.PostMessageAsync(...);
}
ボットの場合は使用できるAPIが異なるのでBotClient
を代わりに使用します。なおClient
/BotClient
にはDefaultAccessToken
というstatic
プロパティがあるので、トークンを保管するのがめんどくさい人は起動時などに設定しておくとよいのではないでしょうか。
WebSocketもClient
型からアクセスできます。
using (var c = new KokoroIO.Client())
{
c.MessageCreated += Client_MessageCreated;
c.MessageUpdated+= Client_MessageUpdated;
await c.ConnectAsync();
await c.SubscribeAsync(channelId);
await c.CloseAsync();
}
WSはConnectAsync
/SubscribeAsync
を呼ぶとClient
の各種イベントで受信したデータが受け取れるようになります。上のコードでは即c.Dispose()
をしていますが、当然接続中はインスタンスを保持し続けないとダメですよ。
さらにKokoroIO.Netにはボット実装を支援するハンドラーも用意されています。ASP.NET用もしくはASP.NET Core用のライブラリをインストールすると、各々にIncomingWebhookHandler
クラスが含まれています。この型のコンストラクターにメッセージ受信時のコールバックを渡し、受信したリクエストのHttpContext
をHandleAsync
に渡すとコールバックを実行してくれる仕組みです。必要ならCallbackSecret
プロパティで検証を行うこともできます。適切な場所でこのハンドラーをHTTP要求に対して登録すれば、ボットのエントリポイントが5行で実装できるわけです。リンク先のは間に関係ない処理が入っていますが。
MVCじゃなくてWebAPIで使いたい人はKokoroIO.Client
内に定義してあるHttpRequestMessageExtensions.GetMessageAsync
拡張メソッドを呼ぶとHttpRequestMessage
からMessage
かnull
が取り出せます。もしくは単にWebAPIのバインダーでMessage
をバインドしてください。
まあ基本的にただのRESTなので特にこれを使わないとできないということはありませんが、ご紹介までに。
ここから下はメモです。特に意味や違法性はありません。多分
season
(ss
):1s
/2s
/3/
ipp
/tours
/priparis
/kirarin
episode
(ep
):[<>]?=?\d+
character
(ch
):laala
/mirei
/...group
(g
):solami-smile
/dressingpafe
/...position
(p
):[<>]?=?(\d\dm\d\ds|\d+\.?\d*)