「自分の為のメモ帳」ご利用は自己責任で!、↓↓↓記事・ツール等へのコメントは一括して掲示板へお願いします

キリ番ゲッターは英語で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)
{

}


※見ずらくなるため変更前のコード割合
プラグインフォームのstartボタンクリックイベント追加
/// <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();
}
キリ番ゲッターが動作しているかのbool変数を作る
今、何番コメントが投稿されているか受け取るint変数を作る
ソーストップに変数を追加する
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
/// <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;
        }
    }
}
ビルド!(今作ったものをdllファイルとして書き出す)
VC#でデバック>ソリューションのビルド
先ほど保存したところに「ClassLibrary1.dll」が新しくできています
Projects\ClassLibrary1\ClassLibrary1\bin\Release\ClassLibrary1.dll
キリ番ゲッターのすべての内容実装完了

wikiチェック日

wiki主のwikiをチェックした日
(コメント・掲示板・ランキング等)

●2014/07/28
●2014/04/15
●2014/03/22
●2014/03/16
●2014/02/25
(直近5日)

※連休が続く時は
 見ていない場合が多いです
※最終日よりあまり日が長い場合は
 掲示板等の返信が遅れる・
 返信がない場合があります
※wikiを更新した日ではありません

メインメニュー

条件分枝文
繰返文
  • for文
  • while文
  • foreach文
  • goto/break/continue

作ったーツール紹介

その他

  • 記事なし

ニコニコ生放送用
コメントビューア

アンコちゃんプラグイン

(スクリーンショットと設定text内容のみ)

NCVプラグイン

(スクリーンショットと設定text内容のみ)
プラグイン作成
NCVα127より.NETframeworkが4.0になっています ↑手順6)の対象のフレームワークを.NET Framework 4.0に

アップローダー

作ったツールがアップされています
プログラムの試作
パスはそれぞれのコメントへ
※ほとんど日付です
ツールへの質問は当wiki掲示板へ

管理人/副管理人のみ編集できます