キリ番ゲッターは英語でRoundNumberGetterなのでこの名前を利用していく
- コメントを取得したら呼ばれるイベントを追加
- プラグインフォームのstartボタンクリックイベント追加
- キリ番ゲッターが動作しているかのbool変数を作る
- 今、何番コメントが投稿されているか受け取るint変数を作る
- キリ番ゲッターの内容をメソッドにする
Class1のRunメソッドにイベントを追加する
※見ずらくなるため変更前のコード割合
/// <summary> /// プラグイン実行時に呼ばれる /// </summary> public void Run() { if (form == null) { //フォームの生成 form = new Form1(); //オーナー設定 form.Owner = host.MainForm; //フォームの表示 form.Show(); //フォームクローズイベント form.FormClosing += new System.Windows.Forms.FormClosingEventHandler(form_FormClosing); //IsOnAir()は放送中か form.enabled(IsOnAir()); //接続・切断のイベントを追加する _host.ConnectedServer += new EventHandler<ankoPlugin2.ReceiveContentStatusEventArgs>(_host_ConnectedServer); _host.DisconnectedServer += new EventHandler<ankoPlugin2.ConnectStreamEventArgs>(_host_DisconnectedServer); } }↓↓↓
/// <summary> /// プラグイン実行時に呼ばれる /// </summary> public void Run() { if (form == null) { //フォームの生成 form = new Form1(); //オーナー設定 form.Owner = (System.Windows.Forms.Form)_host.Win32WindowOwner; //TopMostを受け取る form.TopMost = ((System.Windows.Forms.Form)_host.Win32WindowOwner).TopMost; //フォームの表示 form.Show(); //フォームクローズイベント form.FormClosing += new System.Windows.Forms.FormClosingEventHandler(form_FormClosing); //IsOnAir()は放送中か form.enabled(IsOnAir()); //接続・切断のイベントを追加する _host.ConnectedServer += new EventHandler<ankoPlugin2.ReceiveContentStatusEventArgs>(_host_ConnectedServer); _host.DisconnectedServer += new EventHandler<ankoPlugin2.ConnectStreamEventArgs>(_host_DisconnectedServer); //コメント受信イベント _host.ReceiveChat += new EventHandler<ankoPlugin2.ReceiveChatEventArgs>(_host_ReceiveChat); } } /// <summary> /// コメント受信時に呼ばれる /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void _host_ReceiveChat(object sender, ankoPlugin2.ReceiveChatEventArgs e) { }
※見ずらくなるため変更前のコード割合
/// <summary> /// プラグイン実行時に呼ばれる /// </summary> public void Run() { if (form == null) { //フォームの生成 form = new Form1(); //オーナー設定 form.Owner = (System.Windows.Forms.Form)_host.Win32WindowOwner; //TopMostを受け取る form.TopMost = ((System.Windows.Forms.Form)_host.Win32WindowOwner).TopMost; //フォームの表示 form.Show(); //フォームクローズイベント form.FormClosing += new System.Windows.Forms.FormClosingEventHandler(form_FormClosing); //IsOnAir()は放送中か form.enabled(IsOnAir()); //接続・切断のイベントを追加する _host.ConnectedServer += new EventHandler<ankoPlugin2.ReceiveContentStatusEventArgs>(_host_ConnectedServer); _host.DisconnectedServer += new EventHandler<ankoPlugin2.ConnectStreamEventArgs>(_host_DisconnectedServer); //コメント受信イベント _host.ReceiveChat += new EventHandler<ankoPlugin2.ReceiveChatEventArgs>(_host_ReceiveChat); //プラグインフォームのstartボタンクリックイベント form.GetStartButton().Click += new EventHandler(Class1_Click); } } void Class1_Click(object sender, EventArgs e) { throw new NotImplementedException(); }
ソーストップに変数を追加する
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ClassLibrary1 { public class Class1 : Plugin.IPlugin { //ホストをもらう変数 Plugin.IPluginHost host = null; //フォームの変数 Form1 form = null; //キリ番ゲッターが動作しているか bool RNGEnabled = false; //取得したコメント番号 int RNGcommentnumber = 0; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
コメントが来たらこのメソッドを読んでもらって判定してコメントを投稿する
host.PostComment("コメント", "コマンド")でコメントを投稿する
メソッド名:RoundNumberGetter
引数:int
引数名:BroadcastCommentNumber
コメント受信時にコメント番号でRoundNumberGetterメソッドを呼んでもらう
コメ番はe.Chat.Noで取得できる
startボタンクリックイベントで
・キリ番ゲッター動作をtrueにする
・コメントが設定れているか判定する
・そのコメント番号に投稿できるか判定する
host.PostComment("コメント", "コマンド")でコメントを投稿する
メソッド名:RoundNumberGetter
引数:int
引数名:BroadcastCommentNumber
/// <summary> /// コメントの度コメント番号を更新して /// 指定のコメント番号 -1 になったらコメントを投稿する /// </summary> /// <param name="BroadcastCommentNumber">放送のコメント番号</param> public void RoundNumberGetter(int BroadcastCommentNumber) { //コメントのたびにコメント数を受け取る RNGcommentnumber = BroadcastCommentNumber; //キリ番ゲッター動作がtrueなら指定のコメント番号を待つ if (RNGEnabled) { //受け取ったコメント番号+1が指定コメント番号ならコメントする if (BroadcastCommentNumber + 1 == form.GetCommentNumber()) { //キリ番ゲッター動作をfalseにする RNGEnabled = false; //コメントを投稿する _host.PostComment(form.GetComment(), ""); //コメント欄をクリアする form.CommentClear(); //コントロールを使えるようにする form.enabled(true); //statusを初期状態に戻す form.StatusChange("上の条件でコメントを試みます"); } } }
コメント受信時にコメント番号でRoundNumberGetterメソッドを呼んでもらう
コメ番はe.Chat.Noで取得できる
/// <summary> /// コメント受信時に呼ばれる /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void _host_ReceiveChat(object sender, ankoPlugin2.ReceiveChatEventArgs e) { RoundNumberGetter(e.Chat.No); }
startボタンクリックイベントで
・キリ番ゲッター動作をtrueにする
・コメントが設定れているか判定する
・そのコメント番号に投稿できるか判定する
/// <summary> /// プラグインフォームのstartボタンを押すと呼ばれる /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void Class1_Click(object sender, EventArgs e) { //コメント投稿欄に何か書かれてるか if (!string.IsNullOrEmpty(form.GetComment())) { //そのコメント番号にコメントできるか if (RNGcommentnumber + 1 < form.GetCommentNumber()) { //コントロールを使えない状態にする form.enabled(false); //キリ番ゲッター動作をtrueにする RNGEnabled = true; //statusにキリ番ゲッター動作中をだす form.StatusChange("コメントを試みています"); } else { //statusにキリ番ゲッター動作できない理由をだす form.StatusChange("そのコメ番にはコメントできません"); } } else { //statusにキリ番ゲッター動作できない理由をだす form.StatusChange("コメントが設定されていません"); } }
追加したイベントをフォームを閉じたときに削除する
追加したコードをそのままコピー&ペーストして「+=」を「-=」にする
追加したコードをそのままコピー&ペーストして「+=」を「-=」にする
/// <summary> /// プラグインフォームを閉じたときに起きる /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void form_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e) { //フォームクローズイベント form.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(form_FormClosing); //接続・切断のイベントを追加する _host.ConnectedServer -= new EventHandler<ankoPlugin2.ReceiveContentStatusEventArgs>(_host_ConnectedServer); _host.DisconnectedServer -= new EventHandler<ankoPlugin2.ConnectStreamEventArgs>(_host_DisconnectedServer); //コメント受信イベント _host.ReceiveChat -= new EventHandler<ankoPlugin2.ReceiveChatEventArgs>(_host_ReceiveChat); //プラグインフォームのstartボタンクリックイベント form.GetStartButton().Click -= new EventHandler(Class1_Click); //プラグインフォームをnullにする form = null; }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ClassLibrary1 { public class Class1:ankoPlugin2.IPlugin { //ホストをもらう変数 ankoPlugin2.IPluginHost _host = null; //フォームの変数 Form1 form = null; //キリ番ゲッターが動作しているか bool RNGEnabled = false; //取得したコメント番号 int RNGcommentnumber = 0; /// <summary> /// プラグインのホスト /// </summary> public ankoPlugin2.IPluginHost host { get { return this._host; } set { this._host = value; } } /// <summary> /// プラグインの名前 /// </summary> public string Name { get { return "キリ番ゲッター"; } } /// <summary> /// プラグインの説明 /// </summary> public string Description { get { return "キリ番にコメントを投稿する"; } } /// <summary> /// プラグインが実行中か /// </summary> public bool IsAlive { get { return false; } } /// <summary> /// プラグイン実行時に呼ばれる /// </summary> public void Run() { if (form == null) { //フォームの生成 form = new Form1(); //オーナー設定 form.Owner = (System.Windows.Forms.Form)_host.Win32WindowOwner; //TopMostを受け取る form.TopMost = ((System.Windows.Forms.Form)_host.Win32WindowOwner).TopMost; //フォームの表示 form.Show(); //フォームクローズイベント form.FormClosing += new System.Windows.Forms.FormClosingEventHandler(form_FormClosing); //IsOnAir()は放送中か form.enabled(IsOnAir()); //接続・切断のイベントを追加する _host.ConnectedServer += new EventHandler<ankoPlugin2.ReceiveContentStatusEventArgs>(_host_ConnectedServer); _host.DisconnectedServer += new EventHandler<ankoPlugin2.ConnectStreamEventArgs>(_host_DisconnectedServer); //コメント受信イベント _host.ReceiveChat += new EventHandler<ankoPlugin2.ReceiveChatEventArgs>(_host_ReceiveChat); //プラグインフォームのstartボタンクリックイベント form.GetStartButton().Click += new EventHandler(Class1_Click); } } /// <summary> /// コメントの度コメント番号を更新して /// 指定のコメント番号 -1 になったらコメントを投稿する /// </summary> /// <param name="BroadcastCommentNumber">放送のコメント番号</param> public void RoundNumberGetter(int BroadcastCommentNumber) { //コメントのたびにコメント数を受け取る RNGcommentnumber = BroadcastCommentNumber; //キリ番ゲッター動作がtrueなら指定のコメント番号を待つ if (RNGEnabled) { //受け取ったコメント番号+1が指定コメント番号ならコメントする if (BroadcastCommentNumber + 1 == form.GetCommentNumber()) { //キリ番ゲッター動作をfalseにする RNGEnabled = false; //コメントを投稿する _host.PostComment(form.GetComment(), ""); //コメント欄をクリアする form.CommentClear(); //コントロールを使えるようにする form.enabled(true); //statusを初期状態に戻す form.StatusChange("上の条件でコメントを試みます"); } } } /// <summary> /// プラグインフォームのstartボタンを押すと呼ばれる /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void Class1_Click(object sender, EventArgs e) { //コメント投稿欄に何か書かれてるか if (!string.IsNullOrEmpty(form.GetComment())) { //そのコメント番号にコメントできるか if (RNGcommentnumber + 1 < form.GetCommentNumber()) { //コントロールを使えない状態にする form.enabled(false); //キリ番ゲッター動作をtrueにする RNGEnabled = true; //statusにキリ番ゲッター動作中をだす form.StatusChange("コメントを試みています"); } else { //statusにキリ番ゲッター動作できない理由をだす form.StatusChange("そのコメ番にはコメントできません"); } } else { //statusにキリ番ゲッター動作できない理由をだす form.StatusChange("コメントが設定されていません"); } } /// <summary> /// コメント受信時に呼ばれる /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void _host_ReceiveChat(object sender, ankoPlugin2.ReceiveChatEventArgs e) { RoundNumberGetter(e.Chat.No); } /// <summary> /// 放送に接続したら呼ばれる /// ツールバーのコンボボックスで放送を変えても呼ばれる /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void _host_ConnectedServer(object sender, ankoPlugin2.ReceiveContentStatusEventArgs e) { //放送に接続したときに放送中か判定して //コントロールのON/OFFをする form.enabled(IsOnAir()); } /// <summary> /// 放送から切断したときに呼ばれる /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void _host_DisconnectedServer(object sender, ankoPlugin2.ConnectStreamEventArgs e) { //放送から切断したらコントロールを使えないようにする form.enabled(false); } /// <summary> /// 接続した放送が放送中か /// このメソッドについては「アンコちゃんで放送中か判定」記事参照 /// </summary> /// <returns>trueなら放送中</returns> bool IsOnAir() { bool isonair = false; long NowUnixTime = (long)DateTime.Now.ToUniversalTime() .Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)) .TotalSeconds; LibAnko.broadcast broadcast = _host.CurrentCast; if (broadcast != null) if (broadcast.archive != 1) if (NowUnixTime < broadcast.end_time) isonair = true; return isonair; } /// <summary> /// プラグインフォームを閉じたときに起きる /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void form_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e) { //フォームクローズイベント form.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(form_FormClosing); //接続・切断のイベントを追加する _host.ConnectedServer -= new EventHandler<ankoPlugin2.ReceiveContentStatusEventArgs>(_host_ConnectedServer); _host.DisconnectedServer -= new EventHandler<ankoPlugin2.ConnectStreamEventArgs>(_host_DisconnectedServer); //コメント受信イベント _host.ReceiveChat -= new EventHandler<ankoPlugin2.ReceiveChatEventArgs>(_host_ReceiveChat); //プラグインフォームのstartボタンクリックイベント form.GetStartButton().Click -= new EventHandler(Class1_Click); //プラグインフォームをnullにする form = null; } } }
VC#でデバック>ソリューションのビルド
先ほど保存したところに「ClassLibrary1.dll」が新しくできています
Projects\ClassLibrary1\ClassLibrary1\bin\Release\ClassLibrary1.dll
先ほど保存したところに「ClassLibrary1.dll」が新しくできています
Projects\ClassLibrary1\ClassLibrary1\bin\Release\ClassLibrary1.dll