主コメで「延長メニュー表示」って入力したら、メニューを表示させてみましょう。
ReceiveChatというイベントをつかいます。
で、どこに書くかというとpublic ankoPlugin2.IPluginHost hostプロパティーのsetに書きます。
_host.まで入力すると、選択肢がでてきますのでReceiveChatを選んでエンタをおします。
つづけて+=まで入力すると、TABを押すとどーのこーのっていわれるので、TABを押してお任せしてしまいましょ。
かってにvoid _host_ReceiveChat(object sender, ankoPlugin2.ReceiveChatEventArgs e)ができましたよね。
この中に、主コメで「延長メニュー表示」って入力したら・・・という処理をコーディングしていきます。
throw new NotImplementedException();は削除しちゃってください。
void _host_ReceiveChat(object sender, ankoPlugin2.ReceiveChatEventArgs e)
{
//おまじない _host.CurrentCastがnullだったら処理しない
if (_host.CurrentCast == null)
return;
//放送主でなければ処理しない
if (_host.CurrentCast.is_owner!=1)
return;
//メッセージがなければしょりしない
if (string.IsNullOrEmpty(e.Chat.Message))
return;
//主コメ&延長メニュー表示だったら
if (e.Chat.IsCaster && e.Chat.Message == "延長メニュー表示")
{
//ここに処理を書く
System.Diagnostics.Debug.Print("ここに処理を書く該当メッセージです");
}
}
ここまでかいたら、実行ー、テスト枠とってみます。
運営コメントで、延長メニュー表示と入力すると、VS2010の出力ウインドウに「ここに処理を書く該当メッセージです」と表示されるはずです。
つぎに実際の処理を書いていきます。
でも、延長メニューってどうやってわかるの?
とういうことを、探せば出てくるとはおもいますが、予め関数が用意されていますのでそれを使います。
List<LibAnko.Utility.clsSalesList> LibAnko.Utility.getSalesList(string 放送ID)
放送IDを渡すと List<LibAnko.Utility.clsSalesList>で返してくれるものです。
処理内容に書き換えるとこんな感じになります。
//主コメ&延長メニュー表示だったら
if (e.Chat.IsCaster && e.Chat.Message == "延長メニュー表示")
{
//ここに処理を書く
//一覧を取得
List<LibAnko.Utility.clsSalesList> work = LibAnko.Utility.getSalesList(e.Chat.lid);
//nullだったら処理をしない
if (work == null)
return;
foreach (LibAnko.Utility.clsSalesList item in work)
{
//メッセージ編集
string wk = string.Format("{0} {1}ポイント", item.label, item.price);
//送信
_host.PostOwnerComment(wk, "", "");
}
}
ただーし、WEB問い合わせをしていますので、処理に時間がかかってしまい、ReceiveChatの処理の中で実行してしまうと、全体のレスポンスに影響がでます。
なので処理をスレッド化します。
いくつか方法があるのですが、インラインで簡単に書いてしまう方法にしたいとおもいます。
System.Threading.Thread t = new System.Threading.Thread(delegate() {と});で囲んでしまい、スタートさせる行を追加するだけでできます。
完成したコードが下記になります。
void _host_ReceiveChat(object sender, ankoPlugin2.ReceiveChatEventArgs e)
{
//おまじない _host.CurrentCastがnullだったら処理しない
if (_host.CurrentCast == null)
return;
//放送主でなければ処理しない
if (_host.CurrentCast.is_owner!=1)
return;
//メッセージがなければしょりしない
if (string.IsNullOrEmpty(e.Chat.Message))
return;
//主コメ&延長メニュー表示だったら
if (e.Chat.IsCaster && e.Chat.Message == "延長メニュー表示")
{
//ここに処理を書く
System.Threading.Thread t = new System.Threading.Thread(delegate()
{
//一覧を取得
List<LibAnko.Utility.clsSalesList> work = LibAnko.Utility.getSalesList(e.Chat.lid);
//nullだったら処理をしない
if (work == null)
return;
foreach (LibAnko.Utility.clsSalesList item in work)
{
//メッセージ編集
string wk = string.Format("{0} {1}ポイント", item.label, item.price);
//送信
_host.PostOwnerComment(wk, "", "");
}
});
t.Name = "一覧取得処理";
t.Start();
}
}
実行結果
これで完成です。
あとはtry とかで囲んで想定外のエラーのときに異常終了しないようにするとか、そういうところです。