ニコニコ生放送用コメントビューア「やります!アンコちゃん」 公式wikiです。

プラグイン製作者向け For developers page.

http://goo.gl/EttCn
下記はpluginTestからの抜粋です

        void _host_ReceiveChat(object sender, ankoPlugin2.ReceiveChatEventArgs e)
        {
            System.Threading.WaitCallback AddThreadCall = new System.Threading.WaitCallback(AddThread);
            System.Threading.ThreadPool.QueueUserWorkItem(AddThread, e);
        }

        private void AddThread(object state)
        {
            ankoPlugin2.ReceiveChatEventArgs e = (ankoPlugin2.ReceiveChatEventArgs)state;
            Add(e.Chat);
        }
        private void bufferedDataGridView2_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
        {

                    string message = "";

            if (_chats.Count <= e.RowIndex)
            {
            }
            else
            {

                LibAnko.chat c = getChat(e.RowIndex);
                if(c.Message.StartsWith("/"))
                {
                    LibAnko.chat _c = c;
                    try
                    {
                        c = new LibAnko.chat(_c);
                    }
                    catch
                    {
                        c = _c;
                    }
                }   
                

                switch (e.ColumnIndex)
                {
                    case 0:
                        e.Value = c.Date.ToLongTimeString();
                        return;
                    case 1:
                        e.Value = c.No;
                        return;
                    case 2:
                        //e.Value = LibAnko.Utility.MakeTimeStringFromVpos(c.Vpos );//'  c.Date-c.cast.start_time);
                        if (c.cast != null)
                        {
                            //e.Value = LibAnko.Utility.MakeTimeStringFromVpos((LibAnko.Utility.DateTimeToUnixTime(c.Date)-c.cast.start_time)*100);
                            e.Value = LibAnko.Utility.VposToTimeString((LibAnko.Utility.DateTimeToUnixTime(c.Date) - c.cast.start_time) * 100);
                        }
                        else
                        {
                            e.Value = LibAnko.Utility.VposToTimeString(c.Vpos);
                        }
                        return;
                    case 3://サムネ
                        if (c.userinfo != null && e.Value==null)
                        {
                            if (!string.IsNullOrEmpty(c.userinfo.IconUrl) && !c.userinfo.IconUrl.Contains("blank"))
                            {

                                Image Icon = null;
                                try
                                {

                                    int height = bufferedDataGridView2.Columns[e.ColumnIndex].Width;
                                    if (c.Mail != null && c.Mail.Contains("back"))
                                    {
                                        Icon = LibAnko.Utility.createThumbnail(LibAnko.Utility.checkCache(c.userinfo.userid,
                                                                                                        c.userinfo.IconUrl,
                                                                                                        _host.IconFolder,
                                                                                                        false),
                                                                                                        height-7, height-7);
                                    }
                                    else
                                    {
                                        Icon = LibAnko.Utility.createThumbnail(LibAnko.Utility.checkCache(c.userinfo.userid,
                                                                                                        c.userinfo.IconUrl,
                                                                                                        _host.IconFolder,
                                                                                                        false),
                                                                                                        height, height);
                                    }
                                    if (Icon != null)
                                    {
                                        e.Value = Icon;
                                    }
                                }
                                catch
                                {
                                }
                            }
                        }

                        return;
                    case 4://こてはん
                        if (c.Mail != null && c.Mail.Contains("back"))
                        {
                            e.Value = c.NickName;
                        }
                        else
                        {

                            if (c.userinfo == null)
                            {
                                if (string.IsNullOrEmpty(c.NickName))
                                    e.Value = c.UserId;
                                else
                                    e.Value = c.NickName;
                            }
                            else
                            {
                                if (string.IsNullOrEmpty(c.userinfo.CharaName))
                                    e.Value = c.UserId;
                                else
                                    e.Value = c.userinfo.CharaName;

                            }
                        }
                        return;
                    case 6:
                        e.Value = c.Message;
                        return;
                    case 7:
                        e.Value = c.Mail;
                        return;
                    case 8:
                        e.Value = c.Thread;
                        return;
                    case 9:
                        
                        e.Value = c.Premium;
                        return;
                    case 10:
                        if(string.IsNullOrEmpty(c.ProfName))
                            e.Value = c.UserId;
                        else
                            e.Value = c.ProfName;
                        return;
                    case 11:
                        if(c.commentCount!=0)
                            e.Value = c.commentCount;
                        return;
                    case 12:
                        if (c.commentCount == 1)
                            e.Value = "*";
                        return;
                    case 13:
                        if(c.cast!=null)
                            e.Value = c.cast.RoomToString(new string[4] { "ア", "A", "B", "C" });
                        return;
                    case 14:
                        e.Value = c.locale;
                        return;
                    case 15:
                        if(c.userinfo!=null)
                            e.Value = c.userinfo.memo1;
                        return;
                    case 16:
                        if (c.userinfo != null)
                            e.Value = c.userinfo.memo2;
                        return;
                    case 17:
                        if (c.userinfo != null)
                            e.Value = c.userinfo.memo3;
                        return;

                }
                e.Value = message;


            }

        }


名前

コテハンテーブルにある名前の場合userinfoに入ってきます。
逆に運営コメントみたいなものはuserinfoがnullになっていて、c.Nicnameとかに名前が入ってきます。
これを判定しないと、参照エラーでおっこちます。
アンコちゃん本体でtryかけていますので、見た目にはわかりませんが、他のプラグインへのコメントがわたらず読み上げしなかったりする事象になります。
                            if (c.userinfo == null)
                            {
                                if (string.IsNullOrEmpty(c.NickName))
                                    e.Value = c.UserId;
                                else
                                    e.Value = c.NickName;
                            }
                            else
                            {
                                if (string.IsNullOrEmpty(c.userinfo.CharaName))
                                    e.Value = c.UserId;
                                else
                                    e.Value = c.userinfo.CharaName;

                            }
                        }

(おまけ)コマンドをテキストにする

謎のコードがありますが、/permとかを外す処理をアンコちゃんのらいぶりに任せてしまう方法です
                if(c.Message.StartsWith("/"))
                {
                    LibAnko.chat _c = c;
                    try
                    {
                        c = new LibAnko.chat(_c);
                    }
                    catch
                    {
                        c = _c;
                    }
                }   

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

※現在 メンバー のみがコメント投稿可能な設定になっています。

広告

Menu


外部ツール

はじめてのニコニコ生放送
その他の情報
【メニュー編集】

メンバーのみ編集できます

メンバー募集!
閉じる
XP向けのサポートは終了しています。
古いバージョンを続けてお使いになると、データの整合がとれなくなりバージョンアップできなくなる場合がありますので、なるべく最新をお使いください。