プラグイン製作者向け For developers page.
http://goo.gl/EttCn
下記はpluginTestからの抜粋です
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かけていますので、見た目にはわかりませんが、他のプラグインへのコメントがわたらず読み上げしなかったりする事象になります。
逆に運営コメントみたいなものは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; } }
コメントをかく