したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

【生主ご用達ツール】NicoRequest専用スレ【魔改造・要望大歓迎】

256管理人:2009/05/05(火) 10:25:49 ID:???
>>253
ん?順番とかの問題なの?
最近ツールいじってないから良く判んないや…


>>254
具体的に何がしたいのかよく判らんのですけど、正式に出来るまで時間かかりそうならco5056使っても良いすよ。
コミュ主含め数字入ってるアカウント3つが私ので、rocazというアカウントはとあるツール作者さんのアカウントです。
当分はオープン&自動承認&全メンバー動画投稿可のままにしておくので、使えるようならどうぞ。

リンク:http://ch.nicovideo.jp/community/co5056


>>255
ツールで書いたものかは判りませんので、あくまでも「そういう可能性もあるかな」程度に捉えておいてください。
時間帯的には「単に寝ぼけて削除依頼出すのも忘れてた」とかいうケースも十分にあり得ます。

>>252もこの機能を責めるつもりでなく、こういう事もあるかもしれないので注意してみてください、というつもりでの書き込みなので、
もし何らかの対応を検討されてるのでしたら、削除よりも確認しやすい方向への修正、例えば

・ツール上で書き込むスレッドをプルダウンで選択
・書き込む前に確認メッセージ表示

なども検討対象にしていただけると、利用者の方的にも助かるのではないかと思います。

257wata_z:2009/05/05(火) 10:32:06 ID:???
>>256
書き込み先をコンボボックスで選択出来るのですが、初期値が初音ミクのライブになっているんです
だから、いきなりボタンを押すと初音ミクのライブの方に書き込んでしまいます

258管理人:2009/05/05(火) 10:40:11 ID:???
>>257
ああそういうことですか、了解です。
てことは
> ・ツール上で書き込むスレッドをプルダウンで選択
ってもう機能に盛り込まれてるんですね、こりゃまた失敬。

259w2k:2009/05/05(火) 11:14:53 ID:???
とりあえず次にうpするときは
デフォを「投稿先を選択して」みたいなのにすることで
対応しようと思います。

専用コミュを作るとして、タイトルなどどうしましょう?

260管理人:2009/05/05(火) 11:31:23 ID:???
ついでなんでコミュについて、前もちょっと書いたと思いますが、タイトル・コミュ絵・その他諸々の設定は後から変更できます。
コミュ主だけは変われないので、もしコミュ主がアカ停止になったりするとコミュが自然消滅したりします(昨年9月頃に確認済み、現在仕様変更あるかは不明)。
コミュ主がプレミアムを辞める分には構いません(これも昨年確認済み→co5056)。
なので、w2kさんがコミュ主をなされるのでしたら、とりあえず作ってみてそこの掲示板で詳細を詰めるという手もありだと思います。

261スライムクライム:2009/05/05(火) 11:55:22 ID:???
>>251
Main.jsの
function showPlayState(〜){
以下の
  if(autoPlay){

  if(autoPlay && document.getElementById("timeleft").innerHTML== "放送終了"){
にするといいかも?(未確認です)

ですが、時間今日だけなのかもしれませんがこれを適用すると動作しませんでした。
スクリプトが読めない人が直感で言ってみると、これでは放送終了に鳴っているときしか動作しないんじゃないかとか言ってみたりしてみるテスト

262wata_z:2009/05/05(火) 12:14:43 ID:???
>>259,260
1つは、>>254で言った理由と、もう1つは最近VOCALOID生放送でツールの会話が
多くなってきたので、その待避場所と考えています。
リクツール等のツールの公式コミュではないので、もっと気楽に作ればいいと思う。
コミュ主がいなくなればまた作ればいいと思っています。
(そもそもツールを改造・さわっている人がそれほどいると思えない)

ツールテスト時やツールについての打ち合わせ・雑談に放送を立ち上げるっていうイメージがあります。
また、コミュTOPなんて白紙でもOK、やる気があるならば今までさわったツールのまとめを記載するのもOK。

263w2k:2009/05/05(火) 12:19:10 ID:???
とりあえず俺が普段使ってるテスト用コミュを晒してみます。
http://ch.nicovideo.jp/community/co7642
興味のある方はどうぞ。

>>261
アッー!なんという初歩ミスorz

if(autoPlay && document.getElementById("timeleft").innerHTML!= "放送終了"){

こっちが正解でした。大変失礼しましたorz

264wata_z:2009/05/05(火) 12:23:14 ID:???
>>263
申請制?

265w2k:2009/05/05(火) 12:36:15 ID:???
>>264
いえ、今は自動承認にしてます。
早速あの方が来てくれてびっくりしましたw

266なまはいさん@お腹いっぱい。:2009/05/05(火) 12:37:19 ID:???
自動でしたよ
非公開にしてると「メンバーじゃありません」ってメッセージが出ますが、申請するを押すと「自動申請」というのが判ります。

267なまはいさん@お腹いっぱい。:2009/05/05(火) 12:37:54 ID:???
おっと、かぶったw

268wata_z:2009/05/05(火) 12:48:53 ID:???
>>265
入れました・・・が、もしかして放送出来なかったり?w
今試しにやってみましたが、放送コミュ一覧に出てこなかったので

269なまはいさん@お腹いっぱい。:2009/05/05(火) 12:52:20 ID:???
動画投稿できる設定になってないのかも?

270w2k:2009/05/05(火) 12:52:44 ID:???
もしかして、クローズコミュだとコミュ主しか生放送できない
というオチですか?う〜ん・・・

271w2k:2009/05/05(火) 12:54:01 ID:???
>>269
やってみました。さてどうなるか。。。

272なまはいさん@お腹いっぱい。:2009/05/05(火) 12:58:18 ID:???
動画投稿可能な設定になってない(特権メンバーのみ動画投稿可)時に入会すると、
初期設定が「動画投稿できない=生放送配信できない」になってる筈なので、
コミュ主さんの方で入会している人の設定を個別に変えるか、
入会者側の方で一端退会して再入会しないと出来ないままだと思います。

273w2k:2009/05/05(火) 13:40:23 ID:???
とりあえずこれで大丈夫なはず・・・

274トーン:2009/05/05(火) 20:46:34 ID:???
>>自動接続のエラー
 とりあえず何度かの実験の末に思ったことですが、アルゴリズムから。

1.ニコニコ生放送の放送一覧より放送開始を感知
2.ニコニコミュニティのコミュニティ生放送から放送IDを拾ってくる
3.接続

 自分が原因として挙げるのは終了した生放送をもう一度自動接続でつないだ際に、放送のIDは存在するけれど放送に接続できず、接続した際にNULLが返ってくるということです。
 前の放送が終了していないうちから、次の放送が開始してしまった場合に、前の放送のIDを読み込んでしまい、それでエラーが出るという仕組みだと思います。
 ということで対策としては

・メニューの「接続>接続」と同じアルゴリズムを適用する
・if文等を用い、前の放送に接続できなくする
・放送一覧からに限定して読み込む

 が挙げられます。
 個人の意見なので正確さは保障できませんが、もしかしたらそういったことが原因になっているかもしれませんということで心にとめて戴ければと思います。

 また、自分の守備範囲ではないため、対策しか挙げられませんのでコードの改造については御願いします。

275w2k:2009/05/06(水) 09:19:06 ID:???
Vista/Win2k環境でテストしたところ、問題なかったようなのでうp
http://www1.axfc.net/uploader/He/so/224069&key=miku
まだ不具合ありそうな気がするので、人柱版としておきます。

276w2k:2009/05/06(水) 09:23:41 ID:???
書き忘れ
Win2k環境では、自動接続機能がうまく働かなかったようです。

277wata_z:2009/05/06(水) 10:35:41 ID:???
>>274
2の処理は行っていません。
生放送一覧にあるニコ生IDを元に接続しています。
で、30分経つと生放送一覧を取得しに行くのですが、
あくまでもID変化した時に再接続処理を行うので、もし同じIDだった場合は無視します。
よって・・・
次の枠がすぐ取れた場合は
生放送一覧のID変化にて、現在接続している放送を強制切断し、新しい方につなぎに行きます。

次の枠がすぐ取れなかった場合は
指定コミュニティのID未取得という事で、IDが未放送に設定されます。
その後、枠が取れた時点で未放送→新規IDにて変化を検出し接続しに行きます。

ご指摘の現象が起きるのは、生放送一覧の放送IDが旧→新→旧と変わらない限りないと思います。
でも、こういう指摘はありがたいので、また気がついたことが有ればお願いします。


で、昨日w2kさんと話をして要所にcatch文を入れたのですが、昨日の24時から動かして現在の所エラーが出ていません。
根本的な解決にはなっていませんが、このまま動くのを確認できれば異常対策OKになると思います。

278トーン:2009/05/06(水) 11:28:47 ID:???
 >>277
 御回答有難う御座います。
 >>249についてどこを置き換えればいいのかを判断しかねたので、

server = PS2.server;
port = PS2.port;
thread = PS2.thread;
baseTime = PS2.baseTime;

 の4行を置き換えました。
 自分は終了から1分経過するまで残り時間を表示するようにしているので、残り時間が0以下になった時に使ってみましたが、エラーは出ませんでした。
 先ほど置き換えで大丈夫かと思われます。

279wata_z:2009/05/06(水) 12:45:33 ID:???
>>278
実はコードを見直した結果、現在その部分のコードはごっそりありませんw
現在テスト中なので、終わり次第アップします
というか、>>275ですでに対応している可能性もありますが(未確認)

280スライムクライム:2009/05/06(水) 14:56:32 ID:???
>>275

エラーをひとつ

私の環境がおかしいのか、有線なのにたまに一瞬接続が切れることがあります。
その際に、
main.js 181行目で、エラー
'undefined'はNullまたはオブジェクトではありません。
というエラーが発生します。
対応は無くてもいいのですが、そこで一度動作が停止するので念のため。

281スライムクライム:2009/05/06(水) 15:00:21 ID:???
訂正です。
エラーが出た後、再接続しないと動作しません。

282トーン:2009/05/06(水) 23:23:55 ID:???
>>204
 動画の再生進捗状況表示の実装において、接続時に動画が流れていなかった場合、NULLを返すことが判明しました。
 自分の改造ミスかもしれませんが、報告だけしておきます。

>>275
 自分のオリジナルの改造を加えているツールでも同じ挙動をしましたが、企画放送の延長途中で再起動し、接続した際にRequestmanager.jsの383行3文字目からエラーがありました。
 動画情報に複数のサムネイルが表示されるようになりました。

 エラー報告でした。

283noroma:2009/05/07(木) 05:30:09 ID:???
おっホイのコメントを見直しているのですが、天気さんの後半のコメが反映されて無いですね(;´Д`)
前半も所々飛んでるみたい・・・。
途中で曲流すと副管理者機能が消えちゃうんでしょうか?
あと、コメ数多すぎたら拾えない?

284wata_z:2009/05/07(木) 20:25:33 ID:???
>>283
どのVerを使っているかによりますが、
私が貼った改造案を使用しているのであれば、1つ思い当たる事が。
それはメッセージの中に"/"が入っていた場合、コマンドと認識して表示されない可能性です。
時間があれば、"/"が入ってたかどうかの確認願います。

(w2kさんが公開している物はコマンドを特定しているのでそういう現象が起きないはずですが・・・)

285noroma:2009/05/07(木) 20:51:48 ID:???
>>284
そ!れ!だ!!

見事に"/"を使ってましたorz

テストが足りなかったなー。

w2kさんのバージョンはあいかわらず動かないのです。
もう自分の環境に間違いないかと。
通常バージョンでもたまに立ち上がらないことがありますから。

286SAMMA(TM):2009/05/08(金) 03:28:09 ID:???
自分でいじればいいんだろうけど・・・。ちょっと手が出ないのでお願い。

新着チェックですが、撥ねちゃうんじゃなくて、リクリストにその表示を入れるように変更したい。
(カバー表示など同じように)
チェック基準については、現行のままでも構いません。
表示については
[新][オリジナル]〜題名〜
みたいな感じかな。
[新着判定][カバー判定]については項目分けて表示する必要はないと思いますが、やりやすい方法で。

287スライムクライム:2009/05/08(金) 06:27:17 ID:???
リクエストタブが行かれたので報告。
動画情報タブにリクエストタブから情報もって行く際に、リクエストタブに
T-0000
というリクエスト番号でリクエストが一度追加されますが、
そこのオリジナル判定部分から動画の情報を見に行った際(視聴者側で接続しているので参考程度に)
リクエストタブのいくつかのリクエストの、通し番号部分が、
 [数字/数字]ではなく、[NaN/3]という表示になりました。
その後、イカレタ番号のリクエストを上下するボタンを押してみたところ、
RequestManafer.js

this.Indexes[this.RequestQueues[i].id]--;
の行で、
'this.RequestQueues[ ]id'はNullまたはオブジェクトではありません
というエラーが発生しました。
私の改造ミスもありえますが、メイン機能ですので、再現性があるのであれば修正をお願いします

288w2k:2009/05/08(金) 07:22:30 ID:???
あれからさらに手を加えたのでうpしようかと思ってましたが、不具合報告や要望などもあるので取りやめ。

>私の環境がおかしいのか、有線なのにたまに一瞬接続が切れることがあります。
>その際に、
>main.js 181行目で、エラー
'>undefined'はNullまたはオブジェクトではありません。
>というエラーが発生します。
>対応は無くてもいいのですが、そこで一度動作が停止するので念のため。
>エラーが出た後、再接続しないと動作しません。

むう・・・この現象は見たことがないですね・・・。再現できればいいのですが・・・。

> 自分のオリジナルの改造を加えているツールでも同じ挙動をしましたが、
> 企画放送の延長途中で再起動し、接続した際にRequestmanager.jsの383行3文字目からエラーがありました。
> 動画情報に複数のサムネイルが表示されるようになりました。

延長してるときにエラーですね。あとで確認してみます。

> 新着チェックですが、撥ねちゃうんじゃなくて、リクリストにその表示を入れるように変更したい。

リクされたときに新着判定するのではなく、リクをストックに追加するときに判定して結果を表示に反映させる、ということですね。
それなら、手動でストックに追加するときにも対応できそうです。
ただそうなると、再生ボタンにも何か細工が必要ですよね。単にdisableにするだけでいいのかな?

> 動画情報タブにリクエストタブから情報もって行く際に、リクエストタブに
> T-0000
> というリクエスト番号でリクエストが一度追加されますが、

もしかして、これを削除しない設定に変えました?
そもそもなぜTかというと、動画情報タブに反映させるために一時的にストックに追加するためにTempからもじってTにしたという経緯があります。
なので、登録してもすぐに消す仕様にしました。
消さずにそのまま活用したい、ということであれば、動画情報タブに表示された動画IDをコピって手動でストックに追加するのが安全と考えます。
そうでないと、主を引き継いだときに、すでに流れた曲をまた流す、ということにもなりかねませんので。

289スライムクライム:2009/05/08(金) 07:45:55 ID:???
>>288
>>287についてですが
Tは基本通り削除するようになってます。それ以前に削除しないようにする技術がないですし。

つまり、T-0000がでている一瞬に、動画情報を見ようとオリジナル判定部分をクリックしたわけです。
その後エラーがでました
また、その後ニコリクエストを再起動するまで、引数が無効というエラーを乱発しました。
同時に、リクエストが表示されないようになりました。
今は時間がないのでこれぐらいで

290w2k:2009/05/08(金) 13:23:29 ID:???
>つまり、T-0000がでている一瞬に、動画情報を見ようとオリジナル判定部分をクリックしたわけです。

それは想定外な行動でした;;
VideoInformation.jsをいじれば、今流れてる動画の詳細情報が出るようにもできますが、
それやると下のほうに設置してるマイリス追加結果表示がかなり下になってしまうのがどうにも・・・

291w2k:2009/05/08(金) 15:48:30 ID:???
> 新着チェックですが、撥ねちゃうんじゃなくて、リクリストにその表示を入れるように変更したい。

とりあえず表示させることだけなら、下記の処置でできました。
(全角スペースはtabまたは半角スペースに置き換えてください)

settings.jsで

settings["CheckNew"] = false;

に設定し、Request.jsで

  var dateStr = format.replace("yyyy", YYYY)
       .replace("yy", YY)
       .replace("mm", MM)
       .replace("dd", DD)
       .replace("dy", DY)
       .replace("hh", HH)
       .replace("nn", NN)
       .replace("ss", SS)
  ;
  return dateStr;



  var dateStr = format.replace("yyyy", YYYY)
       .replace("yy", YY)
       .replace("mm", MM)
       .replace("dd", DD)
       .replace("dy", DY)
       .replace("hh", HH)
       .replace("nn", NN)
       .replace("ss", SS)
  ;
  var today = Math.floor(new Date(new Date().getTime()+new Date().getTimezoneOffset()*1000*60)/(24*60*60*1000));
  var uploadedDay = Math.floor(new Date((this.date.getTime()-9*60*60*1000)/(24*60*60*1000)));
  if(today-uploadedDay<8){
   dateStr = "<font color=\"red\">新着 " + dateStr + "</font>";
  }
  return dateStr;

に変更。

292スライムクライム:2009/05/08(金) 19:19:12 ID:???
テストコミュで放送して試してみたのですが、挫折したので依頼・・・

ファンクションキーのショートカットで、動画情報を送信できないかと思って・・・
infocomentをそのまま送るようにしてみましたけど、代入されなくて・・・

送信するときにそれをそのままなんかの変数っぽいものに記録して、それを送るようにしようにも、
送信する場所が分からなかった・・・(代入はリクエストマネージャーで入ってるんですが・・・)
どうしたらいいでしょうか?

293wata_z:2009/05/08(金) 21:13:32 ID:???
>>275
これを主が使用すると標準で動画IDが表示されるためリクエストに反応します。
このバージョンなら回避出来るかもしれませんが、このバージョンを使っている人ばかりでないため
支援主さんツールで再生する度にリクエストに反応してしまう可能性があります。(人柱版なのでなおさらです)
出来れば、標準では動画情報から削除していただけるとありがたいです。

また、先ほど主さんが使用されていましたが、最新バージョンなのに自分で自分のコメントに反応してました。
(その曲は再生中〜というメッセージ)

294wata_z:2009/05/08(金) 22:03:36 ID:???
>>179の機能が使いにくかったので、改良してみた。
メッセージを出すのではなく、設定された期間内のリクエスト数をタグで表示できるようにした。
それによって、メッセージ表示は廃止。主がリク数をみて判断するようにとの意図。
また、リクエスト数をクリックするとコメントのIDと同じようにクリックしたIDのコメントを表示するようにした。
ちなみに179が入っているという前提で改造案をあげます。

[setting.js]

以下の設定を削除

//多重リクエストチェック有効(有効:true 無効:false)
settings["MultiRequest"] = false;
//多重リクエスト メッセージ表示(する:true しない:false)
settings["MultiRequestMsg"] = true;


[main.js]

window.attachEvent("onload", function()
の中の以下を削除

document.getElementById("multiRequestCheck").checked = settings["MultiRequest"];
document.getElementById("multiRequestMsgCheck").checked = settings["MultiRequestMsg"];


function connect(PS)
の中の以下のソフトを

if(document.getElementById("multiRequestCheck").checked && document.getElementById("multiRequestArea1Check").checked) userIDsClear();

以下のソフトに置き換える

if(document.getElementById("multiRequestArea1Check").checked) userIDsClear();

295wata_z:2009/05/08(金) 22:05:00 ID:???
[main.js]

function receiveComment_Request(Chat)
の中の以下のソフトを

//多重IDチェック
if(document.getElementById("multiRequestCheck").checked){
    for(var i=0,l=UserIDs.length; i<l; i++){
        if (UserIDs[i] == Chat.user_id){
            if(document.getElementById("multiRequestMsgCheck").checked){
                NicoLive.postComment("多重リクエストの為、除外します > "+Chat.no, "big");
                return;
            }
        }
    }
}

RequestManager.addRequestQueue(new RequestQueue(sms[0], "C", Chat.no));
UserIDs.push(Chat.user_id);

以下のソフトに置き換える

//多重IDチェック
if (UserIDs[Chat.user_id] == undefined){
    UserIDs[Chat.user_id] = 1;
}else{
    UserIDs[Chat.user_id] = UserIDs[Chat.user_id] + 1;
}
RequestManager.addRequestQueue(new RequestQueue(sms[0], "C", Chat.no, UserIDs[Chat.user_id], Chat.user_id));


function openRequest()
の中の以下のソフトを

if(document.getElementById("multiRequestCheck").checked && document.getElementById("multiRequestArea2Check").checked) userIDsClear();

以下のソフトに置き換える

if(document.getElementById("multiRequestArea2Check").checked) userIDsClear();

296wata_z:2009/05/08(金) 22:06:19 ID:???
[Request.js]

function RequestQueue()
の中に以下を追加する

this.requestNum = 0;
this.UserID = 0;


RequestQueue.prototype = {
の中に以下を追加する

if (arguments.length==5){
    this.requestNum = arguments[3];
    this.UserID = arguments[4];
}else{
    this.requestNum = 0;
    this.UserID = 0;
}


[RequestManager.js]

getItemHTML: function(RQ){
の中の
.replace(/{#Type}/g, "<span id=\"TYP"+R.id+"\" onclick=\"RequestManager.setAlert('"+R.id+"')\"></span>")
の下に
.replace(/{#RNum}/g, "<span onclick=\"__Comment__showPopup(event.clientX, event.clientY, '"+RQ.UserID+"')\">" + RQ.requestNum + "</span>")
を追加

297SAMMA(TM):2009/05/08(金) 22:33:29 ID:???
>>290
ありがとうございます。助かります。
ところで少し気になったのですが・・・
これ、UTCで計算してますよね? で、日付以下を切捨て。
となると・・・判定が+9時間おかしくなりません?
日付はJSTで0時基準なら、時間をJSTで計算しないとおかしくなりません?

298SAMMA(TM):2009/05/09(土) 09:12:56 ID:???
新着計算の部分。変えてみた。
細かい計算式の部分はステップ数圧縮のためにまとめちゃってますw
JST-9(GMT+9)に変換後判定。
ニコ動から取得される投稿時刻がJSTと仮定しています。

これは投稿日時基準で7日間を厳密に判定。
var nowDate = Math.floor(new Date(new Date().getTime()+(540+new Date().getTimezoneOffset())*60000)/1000);
var uploadedDate = Math.floor(new Date(this.date.getTime()/1000));
if(nowDate-uploadedDate<7*86400){
    :       :

こちらは投稿日基準で8日を判定。
var nowDate = Math.floor(new Date(new Date().getTime()+(540+new Date().getTimezoneOffset())*60000)/86400000);
var uploadedDate = Math.floor(new Date(this.date.getTime()/86400000));
if(nowDate-uploadedDate<8){
    :       :

変数名は変えちゃいました。
24時間=1440分間=86400秒間=86400000msのレベルまではまとめちゃいました。
UTCで計算しちゃうとJSTで9時なのが0時になるので、日付判定がずれるのではないかと思ったので。
ニコ動サーバや接続環境によってニコ動投稿日時の方が変わるのならその補正が必要かも。

なんか新着判定が一部で狂っているとか言う話があったので、ロジックベースだけでしか確認してませんが。
参考までに。

299wata_z:2009/05/09(土) 09:30:21 ID:???
改造漏れです

[RequestManager.js]

_replaceHTML: function(str, R)
の中の先頭に
var RQ = this.RequestQueues[this.Indexes[R.id]];
を追加

300wata_z:2009/05/09(土) 09:54:39 ID:???
解説忘れ

標準では表示されません。
今回のリクエスト回数はリクエストHTMLのみに適用されるタグ形式で利用します。
よって、再生履歴・運営コメントにはこの情報は表示されません。
タグ形式は"{#RNum}"で表示できます。

301w2k:2009/05/09(土) 11:26:30 ID:???
時間がないので手短に・・・

> ファンクションキーのショートカットで、動画情報を送信できないかと思って・・・

今流れてる動画についてでしたら、何とかなるかも・・・あとで試してみますね。

> >>275
> これを主が使用すると標準で動画IDが表示されるためリクエストに反応します。
> このバージョンなら回避出来るかもしれませんが、このバージョンを使っている人ばかりでないため
> 支援主さんツールで再生する度にリクエストに反応してしまう可能性があります。(人柱版なのでなおさらです)
> 出来れば、標準では動画情報から削除していただけるとありがたいです。

そもそもなぜこのようにしたかというと、
ニコリクの異常終了などによってプレイリストを紛失したときに
コメントログからプレイリストの救済を容易にしたいという思いがありました。
(結構そのまま放置される主さんもおられるようなので・・・)
あまりにも不評を買うようなら、以前のように動画IDをコメに含まないようにするつもりです。

// とはいえ、自分が主にでもならない限り、ほとんど利用者の声が聞こえてこないというのが現状だったりしますがorz

> また、先ほど主さんが使用されていましたが、最新バージョンなのに自分で自分のコメントに反応してました。
> (その曲は再生中〜というメッセージ)

接続時に利用者自身のユーザーIDを取得するようにしてみたつもりだったんですが、
調べてみたところ、起動後初回接続時は変数に取得できず、いったん切断して再接続しないと取得できない
というバグを発見しましたorz
// getXML関数って、変数の扱いが面倒だなぁorzorz
// 生主のIDを検出する方法、誰か教えてplz

> >>179の機能が使いにくかったので、改良してみた。
> メッセージを出すのではなく、設定された期間内のリクエスト数をタグで表示できるようにした。
> それによって、メッセージ表示は廃止。主がリク数をみて判断するようにとの意図。
> また、リクエスト数をクリックするとコメントのIDと同じようにクリックしたIDのコメントを表示するようにした。

おお、乙です。これはますます使いやすくなるかも・・・!
ただこうなると、NicoRequest.htaも少し編集が必要でしょうか。

> 日付はJSTで0時基準なら、時間をJSTで計算しないとおかしくなりません?

Σ 指摘されて初めて気づいたorz 改造案まで提示していただき、ありがとうございます。
ありがたくマージさせていただきますね。

302なまはいさん@お腹いっぱい。:2009/05/09(土) 12:14:50 ID:???
要望まとめー
NGIDLISTの分割+分割されたリストごとに別の運営コメ(人柱版で対応)
視聴者側でもすべての動画の再生時間を表示できるように
再生時間にラグ対策分を追加
JASコードリストの追加
再生された動画の一時NGを3枠経過で解除

後は解決されたのされてないの入り混じって拾えません・・・

303スライムクライム:2009/05/09(土) 12:17:40 ID:???
>>301
見当違いなことを言ってたらすみません。
主ID検知ですが、ニコリクエスト接続時にたとえば「ニコリク準備中」とかのコメントを主発信して、
その文字列をコメントで拾って、そのコメントを発信したIDを検知すれば・・・
コメントは拾えるならコマンドでもコメントでもいいわけですし。

304wata_z:2009/05/09(土) 13:19:14 ID:???
>>301
個人的な考えを言っておくと、プレイリスト報告は義務では有りません。
事故でプレイリストを復旧したい方にとっては便利だとは思いますが、
この機能がついている事によって、復旧しなきゃいけないとプレッシャーを感じるならば問題だと思います。
そういう意味で、機能をつけないのではなく、必要な人には使えるという選択肢を提示した方がいいのではないかと
思い、>>293のような書き込みをしました。

305スライムクライム:2009/05/09(土) 16:23:50 ID:???
さて、微妙に要望追加。

ファンクションキーのショートカットで、累計時間を「ストック数と一緒に」投稿するにはどこをどうしたらいいか。
タグそのま張りつけてももちろんだめですし、リクエストリストの最後の動画の類型時間を所得で切ればいいんですがその方法が分からないので・・・

306なまはいさん@お腹いっぱい。:2009/05/09(土) 19:47:20 ID:???
VOCALOID生放送をBGMにし、Socket.mxmlを触ろうとしましたが、さすがにうまくいかなかったorz
そして気がつけば今日も終わりという。

307wata_z:2009/05/09(土) 19:55:59 ID:???
>>306で気分が滅入ったので気分転換に>>305を考えてみる

116/*F5*/: function(){NicoLive.postComment("現在のストック:"+RequestManager.RequestQueues.length+" 累計:"+RequestManager.getCumulativeTime(RequestManager.RequestQueues[RequestManager.RequestQueues.length-1].id), "");},

これでうまくいきませんか?

308スライムクライム:2009/05/09(土) 21:48:07 ID:???
>>307
うまくいきました。
ありがとうございます。

309トーン:2009/05/10(日) 00:11:20 ID:???
 せっかくだからショートカットを利用して、F6以降も色々やってみました。

117/*F6*/: function(){NicoLive.postComment("現在のストック:"+RequestManager.RequestQueues.length+" 累計:"+RequestManager.getCumulativeTime(RequestManager.RequestQueues[RequestManager.RequestQueues.length- 1].id), "");},
118/*F7*/: function(){NicoLive.postComment("リクエストは随時受付中です。", "");},
119/*F8*/: function(){NicoLive.postComment("次は主セレクトでお送りします。", "");},

 F10を除いてこれ以降もF15までできるみたいです。キーコードの値を設定することによって英字や数字、テンキーなども使えるみたいですが、あまり増やしすぎると覚えられないなどの点もあり、ファンクションキーに限るのがいいかと思います。

310トーン:2009/05/10(日) 00:22:06 ID:???
 追記ですが、何故か>>294の改造を施しても0としか表示されなかったので、実装を諦めましたorz
 代わりに>>307に則ってショートカットを増やしてみました。

311スライムクライム:2009/05/10(日) 05:16:29 ID:???
>>310

自分も同じ状況になりました。
もしやとは思うのですが、新着チェックをオフにすると、同時に削除動画チェックと多重チェックが飛ばされるということはないでしょうか?
まだ試していないのですが、これからやってみるつもりです。

312スライムクライム:2009/05/10(日) 06:57:30 ID:???
>>311を実行した結果です
セッティングスの新着チェックはtureで、
メインの迎撃コメント送信部分を、強制で今日を10 アップロードを1として回避させたところ、
削除動画チェックは復活しましたが、多重リクエストは機能していません。
そのIDのコメントが見れないことを考えると、ID所得部分で何か足りないかおかしい部分があると思います。

313スライムクライム:2009/05/10(日) 07:28:53 ID:???
>>307 エラー報告です
リクエストストックが0の状態だと、累計時間の部分でエラーが発生するようです。
多分所得できないからだと思いますが、対応は可能でしょうか?
よろしくお願いします

314トーン:2009/05/10(日) 22:03:48 ID:???
>>313
 >>249の方法を利用して

  116/*F5*/: function(){
    try{
      var long = RequestManager.getCumulativeTime(RequestManager.RequestQueues[RequestManager.RequestQueues.length- 1].id);
    }catch( e ){
      var long = 0;
    }
      NicoLive.postComment("現在のストック:"+RequestManager.RequestQueues.length+" 累計:"+RequestManager.getCumulativeTime(long), "");
    },

 で試してみてはいかがでしょう。テストは行っていませんが、一応エラーは出ませんでした;

315トーン:2009/05/10(日) 22:58:11 ID:???
 >>282>>204の問題についても同様に解決……?
 個人的なものなので、エラーが起きるかもしれませんが、一応案を載せておきます。
 あ、コードは204をそのままコピーしたものから改造してます。

【VideoInformation.js】
・・・
var __VideoInformation__MylistIDs = __VideoInformation__getMylistIDs();
//add start
var __VideoInformation__playStateTimer = 0;
//add end

function __VideoInformation__onConnect(lv){
・・・
    __VideoInformation__receiveComment(new Chat("<chat>/play "+contents[i].text+"</chat>"));
//add start
    // 接続時に流れている動画の進捗状態を表示
    if(__VideoInformation__playStateTimer!=0){
     clearInterval(__VideoInformation__playStateTimer);
     __VideoInformation__playStateTimer = 0;
    }
    try{
     var start_time = Number(contents[i].getAttributeNode("start_time").value)-9*60*60;
     var duration = Number(contents[i].getAttributeNode("duration").value);
    }catch( e ){
     var start_time = 0;
     var duration = 0-31;
    }
    __VideoInformation__playStateTimer = setInterval(function(){
     __VideoInformation__showplayState(start_time,duration);
    },500);
//add end
   }
  }
 });
}
//add start
function __VideoInformation__showplayState(start_time,duration){
 var now_time = Math.floor((new Date().getTime()+new Date().getTimezoneOffset()*1000*60)/1000);
 var played_time = now_time-start_time;
 if(played_time < duration){
  document.getElementById("playState").style.cssText = "color:red;";
  var str = convertTimeString(played_time)+"/"+convertTimeString(duration);
 }else if(duration-played_time>=0-30){
  document.getElementById("playState").style.cssText = "color:WindowText;";
  var str = "再生終了";
  clearInterval(__VideoInformation__playStateTimer);
  __VideoInformation__playStateTimer = 0;
 }else{
  document.getElementById("playState").style.cssText = "color:WindowText;";
  var str = " ";
  clearInterval(__VideoInformation__playStateTimer);
  __VideoInformation__playStateTimer = 0;
 }
 document.getElementById("playState").innerHTML = str;
}
//add end

316SAMMA(TM):2009/05/10(日) 23:11:17 ID:???
これまでJASRAC管理コードしか拾えなかったニコリクですが、一応e-licenseコードも拾えるようにしました。
ただし、制限つき。コードの数字のあとにELかelを付与してください。
例:sm2352095 138-4748-1 24575el
もちろん、e-licenseコード単体でもおk。JASRAC管理コードも併記できます。
みれば分かると思いますが、JRCコードも入れられます。1234567JRCで入力。
ただしニコ動ではJRC管理楽曲は使えません。
で・・・スクリプトですが・・・大幅に変更箇所がありますw
主に変数名とタグ名ですが。

まずは置換推奨項目。変更しなくても動きます。
・置換関係。
タグ名:#JASCodeを#MusCodeに置換。
該当ファイル:settings.js,RequrstManager.js
settingsの変数:settings["NoJASCode"]をsettings["NoMusCode"]に置換。
該当ファイル:settings.js,RequrstManager.js
関数名:loadJASCodeをloadMUSICCodeに置換
該当ファイル:Main.js
関数名:checkJASCodeをcheckMUSICCodeに置換
該当ファイル:Main.js,Menu.js
・個別変更項目
ファイル:RequestManager.js内
32行目付近
if(type!="JASCode") RequestManager.Requests[id][type] = afterValue;

if(type!="MusCode") RequestManager.Requests[id][type] = afterValue;
139行目付近
前略・・・(this, 'JASCode','"+R.id+"')・・・

前略・・・(this, 'MusCode','"+R.id+"')・・・
に変更。
そのほか、説明コメントをJASコード(JASRAC管理コード)から管理コードに置換。
情報コメントなどを適当に変更してください。
ここまで、変更推奨項目。

317SAMMA(TM):2009/05/10(日) 23:12:12 ID:???
変更必須項目。
中の説明は前述の変更推奨項目を実行しているものとします。
・置換項目
変数名:JASCodes[R.id]をMusCodes[R.id]に置換
該当ファイル:RequrstManager.js
・変更項目
ファイル:Main.js
変数追加。
var JASCodes = new Array();
の部分を
var MusCodes = new Array();
var JASCodes = new Array();
var ELCodes &nbsp;= new Array();
var JRCCodes = new Array();
に変更。
98行目付近
// リクエストのチェック
function receiveComment_Request(Chat){
//del if(!acceptRequest) return;
var text = Zen2Han(Chat.text);
checkMUSICCode(text);
var sms &nbsp;= text.match(/(sm|nm)\d+/g);

// リクエストのチェック
function receiveComment_Request(Chat){
//del if(!acceptRequest) return;
var text = Zen2Han(Chat.text);
var sms &nbsp;= text.match(/(sm|nm)\d+/g);
checkMUSICCode(sms,text);
に。
187行付近。function checkMUSICCodeを以下と入れ替え。
// 管理コード付きリクエストをチェック
function checkMUSICCode(sms,text){
//del var smJAS = text.match(/(sm|nm)\d+.+?\d{3}-\d{4}-\d{1}/ig);
 if (!sms) return;
 var smJAS = text.match(/(sm|nm)\d+.+?[0-9a-zA-Z]{3}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]/ig);
 var smEL &nbsp;= text.match(/(sm|nm)\d+.+?\d+el/ig);
 var smJRC = text.match(/(sm|nm)\d+.+?\d{7}jrc/ig);
 if(smJAS) {
  for(var i=0,l=smJAS.length; i<l; i++){
//del   var jc = smJAS[i].match(/\d{3}-\d{4}-\d{1}/);
   var jas = smJAS[i].match(/[0-9a-zA-Z]{3}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]/);
   JASCodes[sms[0]] = jas;
  }
 }
 if(smEL) {
  for(var i=0,l=smEL.length; i<l; i++){
   var el = smEL[i].match(/\d+el/);
   ELCodes[sms[0]] = el;
  }
 }
 if(smJRC) {
  for(var i=0,l=smJRC.length; i<l; i++){
   var jrc = smJRC[i].match(/\d{7}jrc/);
   JRCCodes[sms[0]] = jrc;
  }
 }
 MusCodes[sms[0]] = "";
 if (JASCodes[sms[0]]) MusCodes[sms[0]] += JASCodes[sms[0]]+" ";
 if (ELCodes[sms[0]] ) MusCodes[sms[0]] += &nbsp;ELCodes[sms[0]]+" ";
 if (JRCCodes[sms[0]]) MusCodes[sms[0]] += JRCCodes[sms[0]]+" ";
}
貼り付け前に全角SPをTABと置換してください。

ファイル:Menu.js
21行目付近
// テキスト内の動画IDを取り込み
function importText(){
var text = window.showModalDialog("./System/Import.hta","","status:no;help:no;resizable:yes");
if(!text || text=="") return;
checkMUSICCode(text);
var sms &nbsp;= text.match(/(sm|nm)\d+/ig);
if(!sms) return;
for(var i=0,l=sms.length; i<l; i++){
ImportNumber++;
RequestManager.addRequestQueue(new RequestQueue(sms[i], "I", ImportNumber));
}
}

// テキスト内の動画IDを取り込み
function importText(){
var text = window.showModalDialog("./System/Import.hta","","status:no;help:no;resizable:yes");
if(!text || text=="") return;
var sms &nbsp;= text.match(/(sm|nm)\d+/ig);
checkMUSICCode(sms,text);
if(!sms) return;
for(var i=0,l=sms.length; i<l; i++){
ImportNumber++;
RequestManager.addRequestQueue(new RequestQueue(sms[i], "I", ImportNumber));
}
}
に変更。

これで全部のはず。動かなければ言って下さい。

318wata_z:2009/05/11(月) 20:48:14 ID:???
さて・・・w2kさんが欲しがってた生主のコメントを特定する方法が分かりました。
でも、動画番号表示の件は気をつけてね〜。

[chat.js]

function Chat()の中のthis.text;
の下に
this.premium;
を追加



以上です・・・
なお、コメントタブに表示したい場合は以下を追加(必須ではありません)

[comment.js]

.replace(/{#Text}/g, Chat.text.replace("\n","<br>"))
の下に以下を追加(2カ所有ります)
.replace(/{#premium}/g, Chat.premium)


なお、判定方法ですが、chat.premiumが3であれば生主コメントとなります。
で、私の場合は
__Comment__receiveComment(Chat)
の中の
;
の下に
if (Chat.premium == 3) HTML = "<font color=\"#ff0000\">" + HTML + "</font>"
を追加して、生主コメントを赤表示にしています。

319noroma:2009/05/11(月) 21:20:45 ID:???
某所で提案したんですが、動画番号の後ろの扱いについて。

・動画番号の後ろの単語を無条件で取り込む
・JASコードの様式ならJASコードとして認識
・数字のみならe-licenseコードとして認識(別に何のコードと認識してもよい)
・それ以外のパターンはリクコメントとして認識

取り込む単語の数を調整することで2つのコードも拾えます。
また、リクエストと同時に縛りを募集するような状況にも対応できます。

「あ」を付けたら「あ」も取り込んじゃうわけですね。

こんな仕様はどうだろうかと思いました。

320SAMMA(TM):2009/05/11(月) 21:32:16 ID:???
イーライセンスコード対応版について。
イーライセンスコードは10000から始まる5桁のようなので、変更お願いします。
ファイル:Main.js の function checkMUSICCode 関数
var smEL &nbsp;= text.match(/(sm|nm)\d+.+?\d+el/ig);

var smEL &nbsp;= text.match(/(sm|nm)\d+.+?[0-9]{5}el/ig);

var el = smEL[i].match(/\d+el/);

var el = smEL[i].match(/[0-9]{5}el/);
に変更してください。変更しなくても動きます。
ついでに
JASコード対応部分についてそれぞれ
var smJAS = text.match(/(sm|nm)\d+.+?[0-9][0-9a-z][0-9]-[0-9]{4}-[0-9]/ig);
var jas = smJAS[i].match(/[0-9][0-9a-z][0-9]-[0-9]{4}-[0-9]/);
JRCコード対応部分もそれぞれ
var smJRC = text.match(/(sm|nm)\d+.+?[0-9]{7}jrc/ig);
var jrc = smJRC[i].match(/[0-9]{7}jrc/);
に変更を推奨です。

現時点の問題点ですが、
リクエストタブの中でコードの修正を行っても、リクエストの部分だけが書き換わるだけで、
コメント表示や再生履歴の方に反映されません。
当然、それぞれのDBも更新されません。
現状は再リクエストで対応するしかないですね。

321SAMMA(TM):2009/05/11(月) 21:37:11 ID:???
>>319
「あ」つけても、「あ」なんか取り込みませんよw
ちなみにJRCコードは後ろのJRC3文字は仕様です。
ですのでそれをちょっと利用させてもらったというだけです。
>>320でちょっと不具合を修正しました。
数字5文字連続+ELでないと取り込まないようにしました。
同じようにJRCコードも数字7文字連続+JRC。
もうちょい厳密にやるなら、空白+数字5文字+ELとかやるべきかもしれません。
現状の仕様だと動画idの後ろにELとかJRCとかつけると誤動作しますので。

322スライムクライム:2009/05/12(火) 06:07:18 ID:???
最低限テストでエラーが出なかったので・・・
情報コメントでIDが送信されたときの対処方法です
ここまでの更新をほぼすべて導入した状態から説明します
// リクエストのチェック
function receiveComment_Request(Chat){
//del if(!acceptRequest) return;
var text = Zen2Han(Chat.text);
var sms = text.match(/(sm|nm|s m|n m|sm |nm )\d+/g);
checkMUSICCode(sms,text);

この下に
if(Chat.premium == 3){
sms = ""
}

を追加
その下、
if(!acceptRequest){
この行から、
// JASコード定義済み動画IDをロード
function loadMusCode(){
この行の上(ここはそのまま)を、
if(sms != ""){
if(!acceptRequest){
NicoLive.postComment(">>"+Chat.no+"さん、<br>リクエスト非受付迎撃"passionorange big");
}else if(sms[1]){
NicoLive.postComment(">>"+Chat.no+"さん、<br>1コメ複数リク迎撃", "passionorange big");
}else if(NGIDs[sms[0]]) {
NicoLive.postComment(">>"+Chat.no+"さん、その動画は<br />主NG迎撃", "passionorange big");
}else if(settings["AddPlayedVideoId2NGIDs"]&&PlayedVideoIds[sms[0]]) {
NicoLive.postComment(">>"+Chat.no+"さん、その動画は<br>直前再生迎撃", "passionorange big");
}else if(settings["CheckNew"]){
// 新着かどうか確認し、新着だった場合は運営コメで通達
NicoLive.getXML("http://ext.nicovideo.jp/api/getthumbinfo/&quot; + sms[0], function(xmldom){
if(!xmldom.getElementsByTagName("first_retrieve")[0]) {
NicoLive.postComment(">>"+Chat.no+"さん <br />削除・非公開迎撃", "passionorange big");
}else{
var first_retrieve = xmldom.getElementsByTagName("first_retrieve")[0].text.replace(/T.+/," ").replace(/-/g,"/");
// 現在および投稿された日時をそれぞれGMT時刻に合わせて1970/1/1を起点とした日数に置換
var today = 10;
var uploadedDay = 1;
if(today-uploadedDay<8) {
NicoLive.postComment(">>"+Chat.no+"さん、その動画は<br>新着迎撃", "passionorange big");
} else {
//多重IDチェック
if (UserIDs[Chat.user_id] == undefined){
UserIDs[Chat.user_id] = 1;
}else{
UserIDs[Chat.user_id] = UserIDs[Chat.user_id] + 1;
}
RequestManager.addRequestQueue(new RequestQueue(sms[0], "C", Chat.no, UserIDs[Chat.user_id], Chat.user_id));
}
}
});
}else{
//add end
RequestManager.addRequestQueue(new RequestQueue(sms[0], "C", Chat.no));
//add start
}
//add end
}
}
}

迎撃コメントと新着判定部分は適時調整してください(特に新着判定)
これで主コメントの動画IDは受け取らないはずです・・・

323スライムクライム:2009/05/12(火) 06:10:06 ID:???
おっと、>>322はMain.jsになります。
考えてみたら、スペースに置き換えるのを忘れていました・・・
TABも、適時調整挿入をお願いします。
あと、リクエストチェックの
var sms = text.match(/(sm|nm|s m|n m|sm |nm )\d+/g);
この部分は、
var sms = text.match(/(sm|nm)\d+/g);

これに置き換えてください。
絶対です。
このままだとスペース入りの動画IDに削除迎撃コメントをぶちかますだけですのでご了承ください。
いや、お気をつけください

324SAMMA(TM):2009/05/12(火) 09:00:00 ID:???
>>320
ごめんなさい。一部修正。
JASコード対応部分についてそれぞれ
var smJAS = text.match(/(sm|nm)\d+.+?[0-9][0-9a-zA-Z][0-9]-[0-9]{4}-[0-9]/ig);
var jas = smJAS[i].match(/[0-9][0-9a-zA-Z][0-9]-[0-9]{4}-[0-9]/);
イーライセンスコード対応部分について
var smEL &nbsp;= text.match(/(sm|nm)\d+.+?[0-9]{5}(EL|el)/ig);
var el = smEL[i].match(/\s[0-9]{5}(EL|el)\s/);
JRCコード対応部分にそれぞれ
var smJRC = text.match(/(sm|nm)\d+.+?[0-9]{7}(JRC|jrc)/ig);
var jrc = smJRC[i].match(\s/[0-9]{7}(JRC|jrc)\s/);

JASコードについてテキスト取り込み時の大文字入力に対応。(動画idは小文字だけです。現状まま)
>>321の区切り文字(空白)込みのチェックにも対応しました。
\dを使っていないのは負数を認識しないようにするためです。(JASコードに識別子つけた時に誤動作)

現在の問題点。
・リクエスト画面の修正未対応。
・動画idにELをつけた時にスクリプトエラーになる。
 JRCつけた時にはならないけど、もしかしたらidが8桁にあった時にエラーになるかも。

数字5桁でコード認定にする事は多分可能ですが、
将来、数字10桁の動画id入力対応もあるかと思いますので、現段階では対応しません。
現状でも放送画面の運営コメで数字10桁を打ち込むと動画再生開始します。
こちらの仕様が判明するまでは未対応で。
・・・&beta;の頃はサイトの種類を考慮しないこっちの仕様の方がメインだったんだけどな・・・。

325なまはいさん@お腹いっぱい。:2009/05/12(火) 11:41:21 ID:???
iフラグがあれば、大文字小文字は区別しませんよ、と言ってみる
参考:http://www.tohoho-web.com/js/regexp.htm

万全を期すなら、動画IDについても[0-9]とすべきかも?
というか、smsには動画IDが含まれてるはずなので、数字以外(=\D)+コードを検知できれば十分かと。
つまりこんな感じかな?

var smJAS = text.match(/\D[0-9][0-9a-z][0-9]-[0-9]{4}-[0-9]/ig);
var smEL = text.match(/\D[0-9]{5}el/ig);
var smJRC = text.match(/\D[0-9]{7}jrc/ig);

というか、JASコードが複数あるケースにいまだに対応されてない件・・・

326SAMMA(TM):2009/05/12(火) 16:29:22 ID:???
>>325
大文字小文字の件。
そう思ってたんですが、txt取り込みで試して見たところうまくいかなかったので両方入れてみた・・・と言うのが実際のところ。
うまくいってたかもしれないけどなんか勘違いしたかも・・・。
動画idも厳密には言われる通りだと思います。
悪意を持ってリクする人がいなければおkと言う感じかな。
ただ実際には動画があるかどうかのチェックに行く時点で撥ねられてるのでリストには上がってこない・・・?

初期取り込み部分で動画idも込みで取り込んでるのは、動画idのない行のチェックをしないようにということなんですが、
まぁ、よく考えれば2重チェックですね・・・。

コード複数対応については思わないわけでもないですが、ほとんどの場合それは、メドレーってことですよね?
となると・・・メドレーは編曲の範疇に入っちゃうので、ぼかなまに限っていえば扱えない案件なので・・・。
対応自体はそれほど難しくないと思いますけど。

327SAMMA(TM):2009/05/12(火) 22:28:24 ID:???
>>324 修正。コード入力部分では多分最後。
var jas = smJAS[i].match(/\s[0-9][0-9A-Z][0-9]-[0-9]{4}-[0-9]/i);
var el = smEL[i].match(/\s[0-9]{5}EL/i);
var jrc = smJRC[i].match(/\s[0-9]{7}JRC/i);
ぞれぞれ置き換えをお願いします。
JASコード及び識別子の大文字小文字両対応版です。

現在の問題点。
・リクエスト画面での修正の反映未対応。
 画面表示、再生履歴表示、DB更新問題。

328noroma:2009/05/15(金) 01:36:34 ID:???
一応、必要なさげだけど、赤いコメと剥奪関連の修正

// 副管理者機能変更(コメント)
function dummyAdminCmtChg(){
    if(document.getElementById("dummyAdminCmtCheck").checked){
        NicoLive.postComment("ゲストさんいらっしゃいませ", "yellow");
        if(document.getElementById("dummyAdminNGCheck").checked) NicoLive.postComment("/ngadd ID " + document.getElementById("dummyAdminID").value + " 0 0", "");
    }else{
        NicoLive.postComment("ゲストさんさようなら", "yellow");
        if(document.getElementById("dummyAdminNGCheck").checked) NicoLive.postComment("/ngdel ID " + document.getElementById("dummyAdminID").value, "");
    }
}
// 副管理者機能変更(コマンド)
function dummyAdminCmdChg(){
    if(document.getElementById("dummyAdminCmdCheck").checked){
        NicoLive.postComment("ゲストコマンド受付開始", "yellow");
    }else{
        NicoLive.postComment("ゲストコマンド受付終了", "yellow");
    }
}

329noroma:2009/05/15(金) 01:37:31 ID:???
「さようなら」じゃなくて「ありがとうございました」の方が良かったorz

330子ネタ:2009/05/15(金) 05:26:43 ID:???
動画情報タブで詳細情報を見れるようにしてみた。

<img src=\"http://niconail.info/&quot;+VideoID+&quot;\" alt=\""+VideoID+" : "+title+"\" width=\"314\" height=\"178\">

<img src=\"http://niconail.info/&quot;+VideoID+&quot;\" alt=\""+VideoID+" : "+title+"\" width=\"314\" height=\"178\" onClick=\"RequestManager.setAlert('"+VideoID+"')\">
に変えるだけ。

331子ネタじゃなくて小ネタが正解かw:2009/05/15(金) 05:28:08 ID:???
該当ファイルはVideoInfomation.jsね

332スライムクライム:2009/05/15(金) 21:37:17 ID:???
>>322がありえないほど読みにくかったので書き直し・・・
Main.js

function receiveComment_Request(Chat){



//add start
 //副管理者機能

これの前に

 if(Chat.premium == 3){
  sms = ""
 };


を追加。
//add end
 if(sms && !(/^\/(play|playsound|swapandplay) smile:/.test(text))){
//add start
の下に
   if(sms != ""){
を追加


// JASコード定義済み動画IDをロード
の上に
}
を追加、

追加した
  if(sms != ""){

}
の間に挟まれた行すべてにTABを挿入
これ+>>318で主コメントに含まれる動画IDをニコリクは拾わなくなります。

333なまはいさん@お腹いっぱい。:2009/05/15(金) 22:08:57 ID:???
質問ってか要望なんですが・・・図々しくて本当に申し訳ないんですが

副管理者に権限与えるのと同時に副管理者に

ニックネーム(コテハン)見たいなのつけることできませんでしょうか?・・・

今権限持ってるのが誰かとか特定できると何かと便利だろうと思います

スプリクト全くできないのでお願いすることしかできません・・・

本当に図々しくてすいません・・・ご検討お願いします

334なまはいさん@お腹いっぱい。:2009/05/16(土) 07:40:28 ID:???
ソースちゃんと見てないけど
・画面上に「サブ主名」テキストボックス設置(タブで隠れてるような場所)
・「 サブ主名.value & ")" & 拾ってきたコメント 」をコメント出力
で可能じゃないかな。
サブ主ごとにそのサブ主名変えたいって話なら、サブ主特定する時にサブ主名入力を促すinputbox表示、空白なら「サブ主」をデフォ表示とか。

335noroma:2009/05/16(土) 09:53:46 ID:???
ここのところ、企画放送に引っ張りだこの副管理者機能ですが、設計&開発者の想定を上回る使い方をされてると思います。
そのため、どうしてもトラブルになってしまっているところもあるようです。
そこで改善策ですが、今の自分のスキルでは、ちょっと対応できそうもありません。
問題点を挙げてみますので、対応していただけるとありがたいです。
また、他に問題点があれば補完願います。

・/が含まれる場合(w2k版は対応済?)
・ID設定時、コピペでなくコメ番指定、右クリックなどの対応
・NG解除時、解除漏れによる問題→解除時には全解除→他の設定も消える?
・主か副主(ゲスト)か識別できるような機能
・赤い文字コワイヨー、剥奪ってコワイヨー(対応済?)

今のところこんなもんかな?
対応済があれば、バージョンを教えてくだしあ。

336w2k:2009/05/16(土) 16:05:02 ID:???
>・/が含まれる場合(w2k版は対応済?)

これについては、主要コマンドに限定しています。

>・ID設定時、コピペでなくコメ番指定、右クリックなどの対応

うちでは今こんな感じで使ってます。時間がないので断片的にですが・・・

【Comment.js】
function __Comment__receiveComment(Chat){
の中で
.replace(/{#ID}/g, "<span onclick=\"__Comment__showPopup(event.clientX, event.clientY, '"+Chat.user_id+"')\" oncontextmenu=\"setSelectedUseridToDummyAdmin('" + Chat.user_id + "')\">" + Chat.user_id + "</span>")

【Main.js】
function setSelectedUseridToDummyAdmin(UserId){
 if(confirm(UserId+"\nにコメント権限を付加しますか?")){
  document.getElementById("dummyAdminCmtCheck").checked=true;
  document.getElementById("dummyAdminID").value = UserId;
  NicoLive.postComment("ID:" + UserId + "<br>にコメント権限を付加しました", "big red");
  NicoLive.postComment("/ngadd ID " + UserId + " 0 0", "");
 }
}

あるいは、自貼りのときは「sm〜 自貼り」とリクしてもらうようにして、
ストックにおいても自貼りとわかるようにしておき、
再生時に自動で自貼り主のコメが上に出るようにするとかいいかも。

・・・とアイディアだけ出してみる。時間のある人やってみてくだしあw

>・NG解除時、解除漏れによる問題→解除時には全解除→他の設定も消える?

これについては、分かりかねます。。

>・主か副主(ゲスト)か識別できるような機能

if (Chat.user_id == document.getElementById("dummyAdminID").value){
の中で
NicoLive.postComment("自貼り主:"+Chat.text〜
などとすればいけるかも?

>・赤い文字コワイヨー、剥奪ってコワイヨー(対応済?)
まぁこれについては、どこを直せばいいか、大体分かるかな?

ただ、ひとつ気になってるのが、
一部の半角文字が正確に反映されない問題。。。
アーカイブ見て気づいた・・・

337w2k:2009/05/17(日) 07:27:22 ID:???
>>初代さん
自動接続機能について

俺はco154とco154??の両方に入ってるんですが、
自動接続をco154に設定したところ、両方がヒットしてしまうようです。

回避方法としては、AutoConnectTimer()にて、下記のように、拡張子を入れてあげればよさそうです。

 rep = new RegExp("<img src=\"http://icon.nicovideo.jp/community/co&quot; + settings["AutoLoginCommID"] + "\.jpg.+\n.+\n.+\n.+\n.+\n.+\n.+\n.+\n.+\n.+<a href=\"http://live.nicovideo.jp/watch/lv\[0-9\]+");

338スライムクライム:2009/05/17(日) 15:05:53 ID:???
暇だから需要もないであろう、動画URL表示他の改造をしてました。
もし導入したい人がいたらどうぞ。
同じくここまでの改造を導入してある前提で貼り付けます。
settings.js

settings["VideoURLINFO"] = "動画URL {#VideoURLINFO}"
settings["VideoURL"] = "動画URL {#VideoURL}"
//URLを送信するかどうか
//true=送信する false= 送信しない
settings["VideoURLPOST"] = false
を適当に追加(場所はどこでも良いです)

Main.js

 if(settings["InfoComment2"]!=""){
  setTimeout(function(){
   NicoLive.postComment(RequestManager.getInfoComment2(id), "");
  }, settings["InfoCommentTimer"]);
 }
の下に
// URLが設定されていたら時間差投稿
 if(settings["VideoURLPOST"]){
  setTimeout(function(){
   NicoLive.postComment(RequestManager.getVideoURLINFO(id), "marineblue big");
  }, settings["InfoCommentTimer"]);
 }
を追加

VideoInformation.js

      RequestManager.getInfoComment(VideoID) + "<br>" +
      RequestManager.getInfoComment2(VideoID) + "<br>"

      RequestManager.getInfoComment(VideoID) + "<br>" +
      RequestManager.getInfoComment2(VideoID) + "<br>"+
      RequestManager.getVideoURL(VideoID) + "<br>"
に変更
TAB数違いで2個あるので両方とも変更してください。

339スライムクライム:2009/05/17(日) 15:07:39 ID:???
RequestManafer.js

 _replaceHTML: function(str, R){
の中の
//add start タイプ表示箇所を追加
    .replace(/{#Type}/g, "<span id=\"TYP"+R.id+"\" onclick=\"RequestManager.setAlert('"+R.id+"')\" title=\"クリックで詳細情報を表示\"></span>")
    .replace(/{#RNum}/g, "<span onclick=\"__Comment__showPopup(event.clientX, event.clientY, '"+RQ.UserID+"')\">" + RQ.requestNum + "</span>")
の下ぐらいに、
//URLタグ追加 
    .replace(/{#VideoURL}/g, "<A Href=http://www.nicovideo.jp/watch/&quot;+id+&quot;&gt;http://www.nicovideo.jp/watch/&quot;+R.id+&quot;&lt;/A&gt;&quot;)
    .replace(/{#VideoURLINFO}/g, "http://www.nicovideo.jp/watch/&quot;+R.id)
を追加

すべての
.replace(/{#Date}/g, R.getDateString(settings["InfoCommentDate"]))
の下ぐらいに、
//URLタグ追加 
     .replace(/{#VideoURL}/g, "<A Href=http://www.nicovideo.jp/watch/&quot;+id+&quot;&gt;http://www.nicovideo.jp/watch/&quot;+id+&quot;&lt;/A&gt;&quot;)
     .replace(/{#VideoURLINFO}/g, "http://www.nicovideo.jp/watch/&quot;+id)
を追加

さらに、
 getInfoComment2: function(id){
の下にある、
  ;
 },
の下に、
//URL送信専用
 getVideoURLINFO: function(id){
  var R = this.Requests[id];
  if(!R) return "";
//add start JASコードなしの場合
//add end
  return settings["VideoURLINFO"]
     .replace(/{#ID}/g, id)
     .replace(/{#Title}/g, R.title)
     .replace(/{#PName}/g, R.name)
     .replace(/{#View}/g, R.view)
     .replace(/{#Comm}/g, R.comm)
     .replace(/{#List}/g, R.list)
//add start
     .replace(/{#Kiki}/g, R.kiki)
     .replace(/{#Myri}/g, R.myri)
     .replace(/{#Hiky}/g, R.hiky)
//add end
     .replace(/{#Time}/g, R.length)
     .replace(/{#Date}/g, R.getDateString(settings["InfoCommentDate"]))
//URLタグ追加 
     .replace(/{#VideoURL}/g, "<A Href=http://www.nicovideo.jp/watch/&quot;+id+&quot;&gt;http://www.nicovideo.jp/watch/&quot;+id+&quot;&lt;/A&gt;&quot;)
     .replace(/{#VideoURLINFO}/g, "http://www.nicovideo.jp/watch/&quot;+id)
//del      .replace(/{([^}]*?)#JASCode([^{]*?)}/g, JASCodes[R.id] ? function(match,$1,$2){return $1+JASCodes[R.id]+$2;} : "")
//add start JASコード関連の修正
     .replace(/{([^}]*?)#MusCode([^{]*?)}/g, RegExp.$1+MusCodes[R.id]+RegExp.$2)
//add end
  ;
 },
//URL表示専用
 getVideoURL: function(id){
  var R = this.Requests[id];
  if(!R) return "";
//add start JASコードなしの場合
//add end
  return settings["VideoURL"]
     .replace(/{#ID}/g, id)
     .replace(/{#Title}/g, R.title)
     .replace(/{#PName}/g, R.name)
     .replace(/{#View}/g, R.view)
     .replace(/{#Comm}/g, R.comm)
     .replace(/{#List}/g, R.list)
//add start
     .replace(/{#Kiki}/g, R.kiki)
     .replace(/{#Myri}/g, R.myri)
     .replace(/{#Hiky}/g, R.hiky)
//add end
     .replace(/{#Time}/g, R.length)
     .replace(/{#Date}/g, R.getDateString(settings["InfoCommentDate"]))
//URLタグ追加 
     .replace(/{#VideoURL}/g, "<A Href=http://www.nicovideo.jp/watch/&quot;+id+&quot;&gt;http://www.nicovideo.jp/watch/&quot;+id+&quot;&lt;/A&gt;&quot;)
     .replace(/{#VideoURLINFO}/g, "http://www.nicovideo.jp/watch/&quot;+id)
//del      .replace(/{([^}]*?)#JASCode([^{]*?)}/g, JASCodes[R.id] ? function(match,$1,$2){return $1+JASCodes[R.id]+$2;} : "")
//add start JASコード関連の修正
     .replace(/{([^}]*?)#MusCode([^{]*?)}/g, RegExp.$1+MusCodes[R.id]+RegExp.$2)
//add end
  ;
 },
を追加

340スライムクライム:2009/05/17(日) 15:12:46 ID:???
この改造を導入すると、
{#VideoURL}タグでリンク付きでURLを表示
{#VideoURLINFO}タグでリンクなしのURLを表示します。
ただし、ニコニコ生放送の仕様で、主コメントがリンクタグに対応していないので、
{#VideoURLINFO}のタグを用意しました。
メインは、リクエストタブと動画情報タブでのURL表示です。
情報コメントでURLを表示したい場合のみ、
settings["VideoURLPOST"] = false

settings["VideoURLPOST"] = true
に変更してください。
リクエストタブの部分については、自分で表示場所を設定してください。
settings["ItemHTML"]
に追加すれば表示されるはずです。

341スライムクライム:2009/05/17(日) 15:25:54 ID:???
>>339ですが、
かなり余計なところがあるとは思うのですが、
一気に削ったらエラー吐かれたのでそのままにしてあります。
できる人は削ってしまって結構ですー

342スライムクライム:2009/05/17(日) 16:25:11 ID:???
>>339の訂正・・・
RequestManafer.js

 _replaceHTML: function(str, R){
の中の
//add start タイプ表示箇所を追加
    .replace(/{#Type}/g, "<span id=\"TYP"+R.id+"\" onclick=\"RequestManager.setAlert('"+R.id+"')\" title=\"クリックで詳細情報を表示\"></span>")
    .replace(/{#RNum}/g, "<span onclick=\"__Comment__showPopup(event.clientX, event.clientY, '"+RQ.UserID+"')\">" + RQ.requestNum + "</span>")
の下ぐらいに、
//URLタグ追加 
    .replace(/{#VideoURL}/g, "<A Href=http://www.nicovideo.jp/watch/&quot;+id+&quot;&gt;http://www.nicovideo.jp/watch/&quot;+R.id+&quot;&lt;/A&gt;&quot;)
    .replace(/{#VideoURLINFO}/g, "http://www.nicovideo.jp/watch/&quot;+R.id)
を追加

ですが、追加した
    .replace(/{#VideoURL}/g, "<A Href=http://www.nicovideo.jp/watch/&quot;+id+&quot;&gt;http://www.nicovideo.jp/watch/&quot;+R.id+&quot;&lt;/A&gt;&quot;)

    .replace(/{#VideoURL}/g, "<A Href=http://www.nicovideo.jp/watch/&quot;+R.id+&quot;&gt;http://www.nicovideo.jp/watch/&quot;+R.id+&quot;&lt;/A&gt;&quot;)
に変更してくださるようお願いします

343w2k:2009/05/18(月) 09:05:21 ID:???
管理コードうんぬんの話

Main.js

function loadMusicCode(){
 try{
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var file = fso.OpenTextFile("System\\jascode.csv");
  while(!file.AtEndOfStream){
   var line = file.ReadLine();
   checkMusicCode(line);
  }
  file.Close();
 }catch(e){}
}

// 管理コード付きリクエストをチェック
function checkMusicCode(text){
 var sms = text.match(/(sm|nm)[0-9]+/);
 if(!sms) return;
 var smJAS = text.match(/\D[0-9][0-9a-z][0-9]-[0-9]{4}-[0-9]/ig);
 var smEL = text.match(/\D[0-9]{5}el/ig);
 var smJRC = text.match(/\D[0-9]{7}jrc/ig);
 if(smJAS){
  for(var i=0,l=smJAS.length; i<l; i++){
   var jas = String(smJAS[i].match(/[0-9][0-9A-Z][0-9]-[0-9]{4}-[0-9]/));
   if(JASCodes[sms[0]]==undefined||JASCodes[sms[0]]==""){
    JASCodes[sms[0]] = jas;
   }else if(!JASCodes[sms[0]].match(jas)){
    JASCodes[sms[0]] +=" " + jas;
   }
  }
 }
 if(smEL){
  for(var i=0,l=smEL.length; i<l; i++){
   var el = String(smEL[i].match(/[0-9]{5}el/));
   if(ELCodes[sms[0]]==undefined){
    ELCodes[sms[0]] = el;
   }else if(!ELCodes[sms[0]].match(el)){
    ELCodes[sms[0]] += " "+el;
   }
  }
 }
 if(smJRC){
  for(var i=0,l=smJRC.length; i<l; i++){
   var jrc = String(smJRC[i].match(/[0-9]{7}jrc/));
   if(JRCCodes[sms[0]]==undefined){
    JRCCodes[sms[0]] = jrc;
   }else if(!JRCCodes[sms[0]].match(jrc)){
    JRCCodes[sms[0]] += " "+jrc;
   }
  }
 }
 MusCodes[sms[0]] = "";
 if (JASCodes[sms[0]]){MusCodes[sms[0]] += JASCodes[sms[0]]+" "}else{JASCodes[sms[0]] = ""}
 if ( ELCodes[sms[0]]){MusCodes[sms[0]] += ELCodes[sms[0]]+" "}else{ ELCodes[sms[0]] = ""}
 if (JRCCodes[sms[0]]){MusCodes[sms[0]] += JRCCodes[sms[0]]+" "}else{JRCCodes[sms[0]] = ""}
 if(document.getElementById("INF"+sms[0])) RequestManager.replaceHTML(RequestManager.Requests[sms[0]]);
}

344w2k:2009/05/18(月) 09:12:07 ID:???
RequestManager.js

RequestManager.prototype = {
 initialize: function(){
  this.Events["Play"] = function(id){
   alert("Play:"+id)
  };
  this.Events["Edit"] = function(element, type, id){
   var beforeValue = element.innerHTML;
   if(beforeValue==settings["NoPName"]){
    beforeValue = "[" + RequestManager.Requests[id].tags.join("][") + "]";
   }
   // 管理コードなしの場合
   if(beforeValue==settings["NoMusCode"]){
    beforeValue = "";
   }
   var afterValue = prompt("正しい"+type+"を編集してください\n[ctrl]+[Z]で一つ前の状態に戻る、[キャンセル]か空白にして[OK]で未修正のまま終了", beforeValue);
   if(afterValue && afterValue!=beforeValue){
    if(type=="muscode"){
     JASCodes[id] = ELCodes[id] = JRCCodes[id] = MusCodes[id] = "";
     checkMusicCode(id+" "+afterValue);
    }else{
     RequestManager.Requests[id][type] = afterValue;
    }
    element.innerHTML = afterValue;
   }
  }
 },

345w2k:2009/05/18(月) 09:13:52 ID:???
// 以下は環境により違うかも

 _replaceHTML: function(str, R){
  if(!R || !R instanceof Request) return str;
  var RQ = this.RequestQueues[this.Indexes[R.id]];
  // 管理コードなしの場合
  if(!MusCodes[R.id]) MusCodes[R.id]=settings["NoMusCode"];
  return str
    .replace(/{#ID}/g, R.id)
    .replace(/{#Title}/g, "<label ondblclick=\"RequestManager.Events['Edit'](this, 'title','"+R.id+"')\">"+R.title+"</label>")
    .replace(/{([^}]*?)#PName([^{]*?)}/g, function(match,$1,$2){return $1+"<label ondblclick=\"RequestManager.Events['Edit'](this, 'name','"+R.id+"')\">"+R.name+"</label>"+$2;})
    .replace(/{#View}/g, R.view)
    .replace(/{#Comm}/g, R.comm)
    .replace(/{#List}/g, R.list)
    .replace(/{#Kiki}/g, R.kiki)
    .replace(/{#Myri}/g, R.myri)
    .replace(/{#Hiky}/g, R.hiky)
    .replace(/{#Time}/g, R.length)
    .replace(/{#CTime}/g, "<label id=\"CT"+R.id+"\">"+this.getCumulativeTime(R.id)+"</label>")
    .replace(/{#Date}/g, "<span id=\"DAT"+R.id+"\">"+R.getDateString(settings["ItemHTMLDate"])+"</span>")
    .replace(/{([^}]*?)#MusCode([^{]*?)}/g, function(match,$1,$2){return $1+"<label ondblclick=\"RequestManager.Events['Edit'](this, 'muscode','"+R.id+"')\">"+MusCodes[R.id]+"</label>"+$2;})
    .replace(/{#Tags}/g, "<div title=\""+R.tags+"\">[tag]</div>")
    .replace(/{#Type}/g, "<span id=\"TYP"+R.id+"\" onclick=\"RequestManager.setAlert('"+R.id+"')\" title=\"クリックで詳細情報を表示\"></span>")
    .replace(/{#RNum}/g, function(){if(RQ.requestNum>0){return "<span onclick=\"__Comment__showPopup(event.clientX, event.clientY, '"+RQ.UserID+"')\">ID:"+RQ.UserID+"による"+ RQ.requestNum + "回目のリクエスト</span><br>"}else{return ""}})
  ;
 },

346w2k:2009/05/18(月) 09:15:59 ID:???
 // 再生時の運営者コメント getInfoComment2、getPlayLogも同様
 getInfoComment: function(id){
  var R = this.Requests[id];
  if(!R) return "";
  return settings["InfoComment"]
     .replace(/{#ID}/g, id)
     .replace(/{#Title}/g, R.title)
     .replace(/{([^}]*?)#PName([^{]*?)}/g, function(match,$1,$2){if(R.name!=settings["NoPName"]){return $1+R.name+$2;}else{return ""}})
     .replace(/{#View}/g, R.view)
     .replace(/{#Comm}/g, R.comm)
     .replace(/{#List}/g, R.list)
     .replace(/{#Kiki}/g, R.kiki)
     .replace(/{#Myri}/g, R.myri)
     .replace(/{#Hiky}/g, R.hiky)
     .replace(/{#Time}/g, R.length)
     .replace(/{#Date}/g, R.getDateString(settings["InfoCommentDate"]))
     .replace(/{([^}]*?)#MusCode([^{]*?)}/g, function(match,$1,$2){if(MusCodes[R.id]!=settings["NoMusCode"]){return $1+MusCodes[R.id]+$2;}else{return ""}})
  ;
 },

347w2k:2009/05/18(月) 09:19:58 ID:???
一応、自分のところではこんな感じでやってます。まだ試行錯誤の状態ですが^^;

348w2k:2009/05/18(月) 11:42:11 ID:???
忘れてた、Menu.jsもいじってたw

// テキスト内の動画IDを取り込み
function importText(){
 var text = window.showModalDialog("./System/Import.hta","","status:no;help:no;resizable:yes");
 if(!text || text=="") return;
 text = text.split("\n");
 for(var i=0;i<text.length;i++){
  checkMusicCode(text[i]);
  var sms = text[i].match(/(sm|nm)\d+/ig);
  if(sms) {
   for(var j=0,l=sms.length; j<l; j++){
    ImportNumber++;
    RequestManager.addRequestQueue(new RequestQueue(sms[j], "I", ImportNumber));
   }
  }
 }
}

349higumon:2009/05/18(月) 18:50:21 ID:???
>副管理者機能

こんなことできたら、うれしいなって妄想

・※番号をツールに入力すると、
 該当番号のIDを自動的に読み込むことができる。
 (IDのコピペは正直あせる)

・※番号入力と同時に名前を入力しておけば、
  副管理者機能を有効にするときに、
 『(ID番号)さん、よろしくお願いします』みたいな無粋なものでなく
 例えば、この間の企画放送でいえば(具体名あげちゃうけど)
 『 マリアpさん、よろしくお願いします 』みたいな※にできると、
 最高なんですが。

 難しいですかね?

350wata_z:2009/05/18(月) 19:04:27 ID:???
>>349
ID指定は試してみましたが、難しそうですね
あたらにIDをため込んでそこから引っ張ってこないと動かない可能性あり
または、特定のコメントを収集する機能をつけて、それでIDを取得するという手もあります

名前については、すでにソフトを作っています
ただ、まだテストが出来ていないので公開していません



ところで・・・なぜにマリアPw

351noroma:2009/05/18(月) 19:19:50 ID:???
IDというかコメ番ですね。
コメントタブに表示されるコメント&IDって溜め込んでませんでしたっけ?
できるような気がしたので書いたんですが。

ってどこに書いたっけか?

352noroma:2009/05/18(月) 19:21:44 ID:???
あー、コメが多すぎて重くて動かないのか。
理解。

353wata_z:2009/05/18(月) 21:06:00 ID:???
>>352
いや、ため込んでいるはず何ですが、それにアクセスしようとするとエラーが出まして
いろいろ試してみたんですが、挫折中というわけですw
最悪、コメントタブ(HTML)から検索するっていう手もあるんですけどね

という事で、名前をつける改造をやってみた
ただ、私のソフトとw2k版がだいぶ違ってきているので、w2k版の人は導入できないかもしれません
おとなしくw2kさんが改造するのを待ちましょうw

354wata_z:2009/05/18(月) 21:07:52 ID:???
[NicoRequest.hta]

<div id="dummyAdmin">の中身を以下に変更

<div id="dummyAdmin">
<fieldset>
    <legend>副管理者</legend>
    <input type="checkbox" id="dummyAdminCmtCheck" onclick="dummyAdminCmtChg()"><label for="dummyAdminCmtCheck">コメントを受け付ける </label><br>
    <input type="checkbox" id="dummyAdminCmdCheck" onclick="dummyAdminCmdChg()"><label for="dummyAdminCmdCheck">コマンドを受け付ける </label><input type="checkbox" id="dummyAdminNGCheck"><label for="dummyAdminNGCheck">同時にNGリストに追加</label><br>
    <label>名前:</label><input id="dummyAdminName" type="text" size="6" value=""><label>ID:</label><input id="dummyAdminID" type="text" size="32" value="">
</fieldset>
</div>


[main.js]

先頭に以下を追加

var dummyAdminSetCmdID;    //副管理者設定ID(コマンド)
var dummyAdminSetCmdName; //副管理者設定名前(コマンド)
var dummyAdminSetCmtID;    //副管理者設定ID(コメント)
var dummyAdminSetCmtName;  //副管理者設定名前(コメント)

355wata_z:2009/05/18(月) 21:10:29 ID:???
[main.js]

function receiveComment_Request(Chat)
の中の副管理者機能の部分を以下に変更

//副管理者機能
if (Chat.user_id == dummyAdminSetCmdID){
    if (document.getElementById("dummyAdminCmdCheck").checked
    && ((/^\/(play|playsound|swapandplay) (sm|nm)\d+$/.test(text))
    || (/^\s+\/(play|playsound|swapandplay) (sm|nm)\d+$/.test(text))
    || (/^\/(play|playsound|swapandplay) (sm|nm)\d+ sub$/.test(text))
    || (/^\s+\/(play|playsound|swapandplay) (sm|nm)\d+ sub$/.test(text))
    || (/^(sm|nm)\d+$/.test(text))
    || (/^\s+(sm|nm)\d+$/.test(text))
    || (/^\/(swap|soundonly (on|off)|stop)/.test(text))
    || (/^\s+\/(swap|soundonly (on|off)|stop)/.test(text)))){

    NicoLive.postComment(Chat.text.replace(/</g,"<").replace(/>/g,">").replace(/\n/g,"<br>").replace(/\r/g,""), Chat.mail!=undefined?Chat.mail.replace("184",""):Chat.mail);
    return;
    }
}
if (Chat.user_id == dummyAdminSetCmtID){
    if (document.getElementById("dummyAdminCmtCheck").checked
    && !((/^\/.+$/.test(text)) || (/^\s+\/.+$/.test(text))
    || (/^(sm|nm)\d+$/.test(text))
    || (/^\s+(sm|nm)\d+$/.test(text)))){

        if (dummyAdminSetCmtName != ""){
            NicoLive.postComment(document.getElementById("dummyAdminName").value+":"+Chat.text.replace(/</g,"<").replace(/>/g,">").replace(/\n/g,"<br>").replace(/\r/g,""), Chat.mail!=undefined?Chat.mail.replace("184",""):Chat.mail);
        }else{
            NicoLive.postComment(Chat.text.replace(/</g,"<").replace(/>/g,">").replace(/\n/g,"<br>").replace(/\r/g,""), Chat.mail!=undefined?Chat.mail.replace("184",""):Chat.mail);
        }
        return;
    }
}

356wata_z:2009/05/18(月) 21:14:34 ID:???
[main.js]

function dummyAdminCmtChg()
を以下に変更

function dummyAdminCmtChg(){
    if(document.getElementById("dummyAdminCmtCheck").checked){
        if (document.getElementById("dummyAdminName").value != ""){
            NicoLive.postComment(document.getElementById("dummyAdminName").value + "さん<br>に主コメント権限を与えました", "big");
            dummyAdminSetCmtName = document.getElementById("dummyAdminName").value;
        }else{
            NicoLive.postComment("ID:" + document.getElementById("dummyAdminID").value + "<br>に主コメント権限を与えました", "big");
            dummyAdminSetCmtName = "";
        }
        if(document.getElementById("dummyAdminNGCheck").checked) NicoLive.postComment("/ngadd ID " + document.getElementById("dummyAdminID").value + " 0 0", "");
        dummyAdminSetCmtID = document.getElementById("dummyAdminID").value;
    }else{
        if (dummyAdminSetCmtName != ""){
            NicoLive.postComment(dummyAdminSetCmtName + "さん<br>から主コメント権限を奪いました", "big");
        }else{
            if (dummyAdminSetCmtID != ""){
                NicoLive.postComment("ID:" + dummyAdminSetCmtID + "<br>から主コメント権限を奪いました", "big");
            }else{
                NicoLive.postComment("ID:" + document.getElementById("dummyAdminID").value + "<br>から主コメント権限を奪いました", "big");
            }
        }
        if (dummyAdminSetCmtID != ""){
            if(document.getElementById("dummyAdminNGCheck").checked) NicoLive.postComment("/ngdel ID " + dummyAdminSetCmtID, "");
        }else{
            if(document.getElementById("dummyAdminNGCheck").checked) NicoLive.postComment("/ngdel ID " + document.getElementById("dummyAdminID").value, "");
        }
    }
}

357wata_z:2009/05/18(月) 21:15:35 ID:???
[main.js]

function dummyAdminCmdChg()
を以下に変更

function dummyAdminCmdChg(){
    if(document.getElementById("dummyAdminCmdCheck").checked){
        if (document.getElementById("dummyAdminName").value != ""){
            NicoLive.postComment(document.getElementById("dummyAdminName").value + "さん<br>に主コマンド権限を与えました", "big");
            dummyAdminSetCmdName = document.getElementById("dummyAdminName").value;
        }else{
            NicoLive.postComment("ID:" + document.getElementById("dummyAdminID").value + "<br>に主コマンド権限を与えました", "big");
            dummyAdminSetCmdName = "";
        }
        dummyAdminSetCmdID = document.getElementById("dummyAdminID").value;
    }else{
        if (dummyAdminSetCmdName != ""){
            NicoLive.postComment(dummyAdminSetCmdName + "さん<br>から主コマンド権限を奪いました", "big");
        }else{
            if (dummyAdminSetCmdID != ""){
                NicoLive.postComment("ID:" + dummyAdminSetCmdID + "<br>から主コマンド権限を奪いました", "big");
            }else{
                NicoLive.postComment("ID:" + document.getElementById("dummyAdminID").value + "<br>から主コマンド権限を奪いました", "big");
            }
        }
    }
}

358wata_z:2009/05/18(月) 21:20:30 ID:???
仕様の話

以前要望のあった、次から次へとコメント権限を付加するときに、さきにIDを変更してしまい、NGのままになるのを防止(IDを内部で保存)

で、今回の名前の件ですが、コマンド付加は単純に名前欄になにか入っているとIDの代わりに名前で表示されます
コメント付加についても同様ですが、コメント付加されたコメントの先頭に”名前:”がつくようになります
この名前も保存しているため、途中で変更して解除した場合も最初に付加した人の名前が表示されます
ただ、途中でコメントに付加される名前を変えたい・削除したい事もあると思うので、
コメントに付加される名前のみテキストボックスの名前を参照するようにしています。
よってテキストボックスの中を途中で変更すると付加される名前も変わるようになっています。

359wata_z:2009/05/18(月) 22:13:27 ID:???
コメントNoからIDを検索するの、なにか勘違いしていたようです

[NicoRequest.hta]

<div id="dummyAdmin">
の中を以下に変更(レイアウト変えました)

<div id="dummyAdmin">
<fieldset>
    <legend>副管理者</legend>
    <input type="checkbox" id="dummyAdminCmtCheck" onclick="dummyAdminCmtChg()"><label for="dummyAdminCmtCheck">コメントを受け付ける </label><br>
    <input type="checkbox" id="dummyAdminCmdCheck" onclick="dummyAdminCmdChg()"><label for="dummyAdminCmdCheck">コマンドを受け付ける </label><input type="checkbox" id="dummyAdminNGCheck"><label for="dummyAdminNGCheck">同時にNGリストに追加</label><br>
    <label>名前:</label><input id="dummyAdminName" type="text" size="6" value=""><br>
    <label>ID:</label><input id="dummyAdminID" type="text" size="32" value=""><label> ←</label><input id="dummyAdminNo" type="text" size="4" value=""><input type="button" value="取得" onclick="GetNotoID()">
</fieldset>

[main.js]

以下を最後に追加

//コメントNoよりIDを検索
function GetNotoID(){
    var findNo = document.getElementById("dummyAdminNo").value;

    document.getElementById("dummyAdminID").value = findNotoID(findNo);
}

[Comment.js]

以下を最後に追加


//コメントNoからID検索
function findNotoID(findNo){
    var CmtNum = __Comment__CommentLog.length;

    for(var i=CmtNum-1; i>=0; i--){
        if (__Comment__CommentLog[i].no == findNo){
            var userID = __Comment__CommentLog[i].user_id;
            if (userID != undefined) return userID;
        }
    }

    return "";
}

直接Comment.jsの関数を読んでも良かったのですが、なんとなく分けました

360SAMMA(TM):2009/05/19(火) 01:38:52 ID:???
なんかいろいろ仕様が変わってるので、どれに入れられるか分からないけど。
再生時間カウントダウンの表示を追加。

NicoRequest.htaを修正。
#divState{
 position:absolute;
 width:300px;
 left:expression(document.body.clientWidth-this.clientWidth-3);
 top:4px;
}

Main.jsを修正。
function convertTimeString(num0){
 if(num0<0){
sg = "-";
  num=-num0;
 }else{
  sg = "";
  num= num0;
 }
 mm=parseInt(num/60);
 if(mm<10) mm = "0"+mm;
 ss=parseInt(num%60);
 if(ss<10) ss = "0"+ss;
 return sg+mm+":"+ss;
}
のように書き換え。

361SAMMA(TM):2009/05/19(火) 01:39:29 ID:???
以下バージョンにより違います。
2.3.2.3以前の場合。
Main.js
function getTimeLeft()を修正。
document.getElementById("playState").innerHTML = tagF+convertTimeString(timeLeft)+"/"+convertTimeString(PlayTime)+tagT;

document.getElementById("playState").innerHTML = "再生/"+tagF+convertTimeString(timeLeft)+"/"+convertTimeString(PlayTime-timeLeft)+"/"+convertTimeString
に書き換え。

2.3.2.4以降の場合。
Videoinfomation.js
function __VideoInformation__showplayState(start_time,duration)を修正。

var str = convertTimeString(played_time)+"/"+convertTimeString(duration);

var str = "再生/"+convertTimeString(played_time)+"/"+convertTimeString(duration-played_time)+"/"+convertTimeString(duration);
に。
 }else if(duration - played_time > 0){
  document.getElementById("playState").style.cssText = "color:red;";

 }else if(duration - played_time > -20){
  if (document.getElementById("playState").innerHTML == "再生終了"){
   document.getElementById("playState").style.cssText = "color:WindowText;";
   str = "再生終了";
  }else{
  document.getElementById("playState").style.cssText = "color:red;";
  }
に書き換え。
2.3.2.5の場合、さらにその下、
 }else if(duration - played_time > -20){

 }else if(duration - played_time > -30){
に書き換え。

表示としては、
再生/再生時間/残り時間/動画の時間
例としては
再生/1:23/1:37/3:00 残り時間/12:34
のようになります。

362SAMMA(TM):2009/05/19(火) 01:41:35 ID:???
すみません。なんか抜けました。
>>361の2.3.2.3以前の分。
document.getElementById("playState").innerHTML = "再生:"+tagF+convertTimeString(timeLeft)+"/"+convertTimeString(PlayTime-timeLeft)+"/"+convertTimeString(PlayTime)+tagT;
になります。

363noroma:2009/05/19(火) 02:21:29 ID:???
>>353
名前追加仕様入れてみました。
とりあえず試したところ、名前入れるとコマンドが使えませんね。

364wata_z:2009/05/19(火) 08:55:40 ID:???
>>363
ああ、これ私もなりました
そういえば、書いてませんでしたね

どのバージョン使われているか分からないのですが、
元々のバージョンとw2kバージョンのコーディングがいろいろ変わっておりそれで動かなくなっている可能性あり

[Main.js]のfunction receiveComment_Request(Chat)の中

副管理者機能の下に

var text = Zen2Han(Chat.text);
checkJASCode(text);

という記述があると思いますが、この部分を副管理者機能の前に持って行ってください

365noroma:2009/05/19(火) 10:13:50 ID:???
うちは、EE版の最終バージョンに毛が生えた状態です。
名前入れると、行頭に/が来ないので動かないだけだと思いまーす。
この辺は、各自の用途に合わせてカスタマイズするのが良さそう。

366wata_z:2009/05/19(火) 10:59:05 ID:???
>>365
最初にコマンドを許可しているかどうか判定し、許可しているならばコメントがコマンドなのか判定し、コマンドを送信
次に、コメントを許可しているかどうか判断し、許可しているならばコメントがコマンドでない事を判定し、コメント送信

>名前入れると、行頭に/が来ないので動かないだけだと思いまーす
コマンドと認識されている場合は前に名前を付けないので、そういう動きはしないかと・・・

まあ、noromaさんが持っているソフトがどんなのかにもよりますけどね

367noroma:2009/05/19(火) 15:12:20 ID:???
うちのは↑でも書いた通り、巣のEE版に初代の修正入れてるだけですよ。

ま、今日帰ってから見てみます。
この辺が自己責任。

あと、昨日テストしてて思ったのですが、主をやってるときって、NG登録のコメも全部見えるんでしたっけ?
通常コメは消えないわ、NGリストに反映されないわで、効果が見えませんでした。
なんか間違えてる?

368wata_z:2009/05/19(火) 15:35:27 ID:???
>>367
コメントが2重で見えるのはNGされた本人だけです
よって、主からは2重で見えないはず
みたい場合は、ツールのコメントから見るしかないです

NGリストについては
コマンドを直接打ち込んだものに関してはNGリストに反映されません
ここからは予測になりますが、ニコ生の画面からNG指定をした後にコマンドで解除すると
一覧に残った状態で、NGあ解除されるはずです
つまり、NG・NG解除のコメントを受信してリストを更新している訳じゃないって事ですね(これはテストで確認済み)

369SAMMA(TM):2009/05/19(火) 16:00:46 ID:???
NGの動作ですが、
ブラウザでリロード、あるいは更新ボタンを押すと、設定が消えてしまうようで、NGされたはずのコメが見えたりします。
(ただし追試験の必要あり。)
ボーマスカタログのときに3窓で監視wしてるときに、一般ユーザで見てた2つのやつで確認しています。
ブラウザはsafariとChrome。ついでにfirefoxでも確認。
録画中だったのでie系ブラウザでは確認していませんが。

370SAMMA(TM):2009/05/19(火) 16:08:46 ID:???
ついでに・・・/disconnectコマンドですが、これはクライアント側の停止命令のようですね。
これもリロードすることにより生放送を再び見ることが出来ます。
ただし現実的には時間を過ぎる(配信停止になる)と入口に戻されちゃいますが。
生主画面では、放送する側の画面は生きてますが、下の生放送画面が停止します。
つまり配信停止、あるいはサーバがコネクションを切るまでは復活可能。

これで1つ分かったことは、放送主画面ではflashアプリが3つ(放送の設定パネル、主コメ、生放送クライアント)独立で動いていること。
例の数字ですが、ここから分かることは、bit0でユーザ種別、bit1でアプリ種別。
なんて置いてみると、2が存在しない理由がなんとなくわかりますね。
まぁ、あまり役に立たない知識ですが。
/disconnectを見たらツールを切断しようかと思ったんだけど・・・やめた方がよさそう?
再接続コマンド(同じ放送に繋ぎなおし)を作ればいいかな。

371wata_z:2009/05/19(火) 16:30:13 ID:???
>>369
パケットを見たところ、運営のNGリスト取得コマンドは有るんですが、主NGのリスト取得コマンドが無かったように思います
よって、クライアント側でNGリストを管理しているんじゃないでしょうか
だから、途中から入出&リロードした場合それまでのNGが反映されないのではないかと思ってます

まあ、あくまでも予測ですが・・・

>/disconnect
その仕組みを応用したのが、主途中退出によるロスタイム発生ですね
また、強制切断をしないことにより主画面を閉じてもコメントを見ることが出来るのでそのままでいいかと

#昔、放送終了10秒以内に/disconnectが来なかったら延長と見なし、自動延長機能を作ったんですが、
 上記ロスタイム発生により意味が無くなりましたw

372SAMMA(TM):2009/05/19(火) 17:04:03 ID:???
いや、/disconnectを見たら切断しようと思ったのは、
番組を早期終了したときに、ツールが繋がったままで30分以内に新しく放送が立ち上がったときに
自動接続やら何やらがうまく動かなかったことに由来しています。
もちろん、/disconnectが来なかったら自動延長と言うのも考えたりするんですけどね。
まぁ、主が自分で/disconnectとか打つことはないと思うのでw、それを見たら切断でも構わないとは思うんですけど。
それより、時間終了後に気づいて(ツールの)延長できない事態をなんとかしたいですけど、
私じゃさっぱり分かりませんw

373noroma:2009/05/19(火) 17:13:26 ID:???
あーなるほど。
あの画面のリストに反映される訳ではないのですね。

気になったのは、ボーマス企画の時にSHIKIさんのNGが最後まで解除されなかったことです。
リストに見えなきゃ分かりませんね。
それに、解除の方法がない。
リロードで全解除になるんですか?
それなら、対処のしようはありますが。

374wata_z:2009/05/19(火) 17:24:59 ID:???
>>373
リロードだと、リスト上解除されていますが、実際は解除されていません
NG処理をやっているのは視聴者側ですからね

解除の方法は・・・再度NG→解除するか、手動でコマンドを打ち込むぐらいかな
ログがないので分かりませんが、あの時って再NGやってましたよね?

ちなみに昨日アップしたソフトであれば、解除漏れがなくなるはずなので、お試しあれ

375noroma:2009/05/19(火) 17:49:54 ID:???
>>335で書いたNG解除漏れの件、対応してもらってますよね。
一つ心配なのは、ツールが落ちちゃった時のことなんです。
上の状況見る限り、そこまで対応するのは難しいですね。
落ちないように祈るしかないか。

376SAMMA(TM):2009/05/19(火) 17:55:28 ID:???
>>373-374
あの時は主コメでのNG削除は行われていないです。
当時のログで確認済み。手元には残ってないから今から確認は出来ませんけど。
同様に何人かはNGになったままのはずです。
クライアント側をリロードすることで、主によるNG指示はクリアされるようですが、
それを視聴者にお願いするのはちょっとねw
私とはつよさんの書き込みから、
 生放送パネル(生主)と視聴アプリ(クライアント)は別物
 NG指示は生放送パネルに反映されない
 視聴アプリでNG処理
とのことなので、指示処理を誤ってしまうとよく分からないことになってしまいますね。

2.3.2.5版の方でとりあえず私独自で副管理者部分を書き換えてNGID処理部分を改善してますのであとでうpします。
コメのユーザー名の部分は実装していません。
ついでにNGID処理を後でも指示出来る様に追加しています。
動作はしてますが、副作用などのチェックはしていません。
(たとえばコメとコマンド両方の権限を同じユーザに与えた場合)など。

377SAMMA(TM):2009/05/19(火) 18:06:42 ID:???
>>375
IDを外部保存しておくしかないですね。メモ帳とかw
自貼り第5回のときは、実際にそうしています。
名前(コメ番) 動画id ID
みたいなリストを随時作成しながら放送してました。
まぁ、自貼りの場合、確認と実際の紹介のときのタイミングが余りに離れすぎてて検索不能になったりすることもあるし、
事前にやれることは出来るだけ事前に準備してないと、混乱しまくりですからw

あの企画放送のあと、生放送でも言ったんですが、ツールのログで右クリックでID取れるんですが、コメ流れまくりだとスクロールしちゃってフォーカス合わなくて実は非常にとりにくいんですねw
生放送のコメからNGID設定ボタンから取ったほうが実は簡単だったりw(スクロールしないしフォーカスも一度クリックすればずれないし)
ということもあったりします。

378higumon:2009/05/19(火) 18:24:04 ID:???
あの時の話。
SHIKIさんの時に、何を勘違いしたのか、
ニコリクを私の方で一旦終了させてしまってます。
その後再起動したわけですが。

ログが必要なら提出した方がいいですか?

379noroma:2009/05/19(火) 19:11:54 ID:???
ログは必要ないと思いますよ。
今、話に参加されてる人は、状況を正確に把握しているようですので。
取り扱いの注意書が必要かな?

380SAMMA(TM):2009/05/19(火) 20:24:15 ID:???
お約束どおり、2.3.2.5での改造コード。
想定している使用にはなっていますが、副作用はチェックしてないので使用にはご注意ください。
変数名は、はつよさんの改造コードに準拠してます。ただし、「名前」は未実装です。

NicoRequest.hta
副管理者の設定部分の差し替え。
  <fieldset>
   <legend>副管理者</legend>
   <input type="checkbox" id="dummyAdminCmtCheck" onclick="dummyAdminCmtChg()" /><label for="dummyAdminCmtCheck">コメントを受け付ける</label>
   <input id="dummyAdminCmtID" type="text" size="32" value=""
    onchange="var e=document.getElementById;if(this.value==''){e('dummyAdminCmtCheck').checked=false;}">
   <input type="checkbox" id="dummyAdminCmtNGCheck" onclick="dummyAdminCmtNGChg()" /><label for="dummyAdminCmtNGCheck">同時にNGリストに追加</label><br />
   <input type="checkbox" id="dummyAdminCmdCheck" onclick="dummyAdminCmdChg()" /><label for="dummyAdminCmdCheck">コマンドを受け付ける</label>
   <input id="dummyAdminCmdID" type="text" size="32" value=""
    onchange="var e=document.getElementById;if(this.value==''){e('dummyAdminCmdCheck').checked=false;}">
   <input type="checkbox" id="dummyAdminCmdNGCheck" onclick="dummyAdminCmdNGChg()" /><label for="dummyAdminCmdNGCheck">同時にNGリストに追加</label><br />
  </fieldset>

main.js
先頭部分に追加。
var dummyAdminSetCmdID;  //副管理者設定ID(コマンド)
var dummyAdminSetCmdName; //副管理者設定名前(コマンド):未使用
var dummyAdminSetCmtID;  //副管理者設定ID(コメント)
var dummyAdminSetCmtName; //副管理者設定名前(コメント):未使用

function receiveComment_Request(Chat)の変更
副管理者機能の部分。
 if (Chat.user_id == document.getElementById("dummyAdminID").value){
    :    :    :    :    :
 }
を以下に差し替え。
 if (Chat.user_id == dummyAdminSetCmdID){
  if (document.getElementById("dummyAdminCmdCheck").checked
   && (
     &nbsp; (/^\/(play|playsound|swapandplay) (sm|nm)[0-9]+$/.test(text))
    || (/^\s+\/(play|playsound|swapandplay) (sm|nm)[0-9]+$/.test(text))
    || (/^\/(play|playsound|swapandplay) (sm|nm)[0-9]+ sub$/.test(text))
    || (/^\s+\/(play|playsound|swapandplay) (sm|nm)[0-9]+ sub$/.test(text))
    || (/^(sm|nm)[0-9]+$/.test(text))
    || (/^\s+(sm|nm)[0-9]+$/.test(text))
    || (/^\/(swap|soundonly (on|off)|stop)/.test(text))
    || (/^\s+\/(swap|soundonly (on|off)|stop)/.test(text))
   )
  ){
   NicoLive.postComment(Chat.text.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/\n/g,"<br>").replace(/\r/g,""), Chat.mail!=undefined?Chat.mail.replace("184",""):Chat.mail);
   return;
  }
 }else if (Chat.user_id == dummyAdminSetCmtID){
  if (document.getElementById("dummyAdminCmtCheck").checked
   && !(
     &nbsp; (/^\/.+$/.test(text))
    || (/^\s+\/.+$/.test(text))
    || (/^(sm|nm)[0-9]+$/.test(text))
    || (/^\s+(sm|nm)[0-9]+$/.test(text))
   )
  ){
   NicoLive.postComment(Chat.text.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/\n/g,"<br>").replace(/\r/g,""), Chat.mail!=undefined?Chat.mail.replace("184",""):Chat.mail);
   return;
  }
 }
&ltと&gtは半角にしてください。
あと、全角SPはTABに変換です。
続きます。

381SAMMA(TM):2009/05/19(火) 20:26:28 ID:???
副管理者機能変更部分を差し替え。
// 副管理者機能変更(コメント)
から
function NicoCookieImporter(flag, browserType, cookieLifeSpan){
直前までを差し替え。
// 副管理者機能変更(コメント)
function dummyAdminCmtChg(){
 if(document.getElementById("dummyAdminCmtCheck").checked){
  if(!CheckdummyAdminCmtIDValue()) return;
  if(dummyAdminSetCmtID!=null){
   NicoLive.postComment("ID:" + dummyAdminSetCmtID + "<br>のコメント権限を解除しました", "big red");
   NicoLive.postComment("/ngdel ID " + dummyAdminSetCmtID , "");
   dummyAdminSetCmtID=null
  }
  dummyAdminSetCmtID=document.getElementById("dummyAdminCmtID").value
  NicoLive.postComment("ID:" + dummyAdminSetCmtID + "<br>にコメント権限を設定しました", "big red");
  if(document.getElementById("dummyAdminCmtNGCheck").checked) NicoLive.postComment("/ngadd ID " + dummyAdminSetCmtID + " 0 0", "");
 }else{
  NicoLive.postComment("ID:" + dummyAdminSetCmtID + "<br>のコメント権限を解除しました", "big red");
  NicoLive.postComment("/ngdel ID " + dummyAdminSetCmtID , "");
  dummyAdminSetCmtID=null
 }
}

// 副管理者機能変更(コメントNGIDのみ)
function dummyAdminCmtNGChg(){
 if(document.getElementById("dummyAdminCmtNGCheck").checked){
  if(!CheckdummyAdminCmtIDValue()) return;
  NicoLive.postComment("/ngadd ID " + dummyAdminSetCmtID + " 0 0", "");
 }else{
  NicoLive.postComment("/ngdel ID " + dummyAdminSetCmtID , "");
 }
}

// 副管理者機能変更(コマンド)
function dummyAdminCmdChg(){
 if(document.getElementById("dummyAdminCmdCheck").checked){
  if(!CheckdummyAdminCmdIDValue()) return;
  if(dummyAdminSetCmdID!=null){
   NicoLive.postComment("ID:" + dummyAdminSetCmdID + "<br>のコマンド権限を解除しました", "big red");
   NicoLive.postComment("/ngdel ID " + dummyAdminSetCmdID , "");
   dummyAdminSetCmdID=null
  }
  dummyAdminSetCmdID=document.getElementById("dummyAdminCmdID").value
  NicoLive.postComment("ID:" + dummyAdminSetCmdID + "<br>にコマンド権限を設定しました", "big red");
  if(document.getElementById("dummyAdminCmdNGCheck").checked) NicoLive.postComment("/ngadd ID " + dummyAdminSetCmdID + " 0 0", "");
 }else{
  NicoLive.postComment("ID:" + dummyAdminSetCmdID + "<br>のコマンド権限を解除しました", "big red");
  NicoLive.postComment("/ngdel ID " + dummyAdminSetCmdID , "");
  dummyAdminSetCmdID=null
 }
}

// 副管理者機能変更(コマンドNGIDのみ)
function dummyAdminCmdNGChg(){
 if(document.getElementById("dummyAdminCmdNGCheck").checked){
  if(!CheckdummyAdminCmdIDValue()) return;
  NicoLive.postComment("/ngadd ID " + dummyAdminSetCmdID + " 0 0", "");
 }else{
  NicoLive.postComment("/ngdel ID " + dummyAdminSetCmdID , "");
 }
}

382SAMMA(TM):2009/05/19(火) 20:26:59 ID:???
つづき。
function CheckdummyAdminCmdIDValue(){
 if(document.getElementById("dummyAdminCmdID").value==""){
  document.getElementById("dummyAdminCmdCheck").checked=false;
  document.getElementById("dummyAdminCmdNGCheck").checked=false;
  document.getElementById("dummyAdminCmdID").focus();
  return false;
 }else{
  return true;
 }
}
function CheckdummyAdminCmtIDValue(){
 if(document.getElementById("dummyAdminCmtID").value==""){
  document.getElementById("dummyAdminCmtCheck").checked=false;
  document.getElementById("dummyAdminCmtNGCheck").checked=false;
  document.getElementById("dummyAdminCmtID").focus();
  return false;
 }else{
  return true;
 }
}

function setSelectedUseridToDummyAdmin(UserId){
 document.getElementById("Tab").selectedIndex = 4;
 document.getElementById("dummyAdminCmtID").value = UserId;
}

以上です。全角SPはTABに変換。
なお、想定している動きは確認していますが、想定外の動作をする可能性があるのでそのつもりで組み込んでください。
追加機能としては、
・コメ機能とコマンド機能のUSERIDの分離と記憶。
・機能付与時にそれ以前に設定していたユーザーの機能を外す告知。(NGも外す)
 基本はチェック外した時に設定も外れるはずなので必要ないはず。
・NGIDのチェックを独立動作。あとでNG入れたり外したりが可能。
 つまりNGチェック入れ忘れてもあとで追加できる。
ユーザー名機能は入れてません。

383wata_z:2009/05/19(火) 21:30:09 ID:???
個人的に、今のリクツールは機能を詰め込みすぎている気がする
で、動作ももっさりになってるわけで・・・

今w2kさんがいろいろな機能を付加したパッケージをアップされていますが
当然視聴者にとって便利な機能も付加されています。

で、生主に限定した機能のみのツールが有れば軽くていいかなーと思ってたり
誰か作りませんか?w

仕様としては・・・
①動画情報タブの廃止。ただし、現在の動画が分かるように、リクエストタブの最上位に現在放送中の情報表示。
 また、放送中動画情報も放送情報からでは無く、再生コマンド押による情報取得に変更。
 これにより、動画再生時の動画情報・マイリスト取得ロジック不要による負荷軽減

②自動接続機能の削除
 便利なんですが、確実に接続する為には手動が一番かと。
 あと、たまにエラーが出ることがあるので、これによる動作不良の防止

③逆に、副管理者機能による主NGが、ツールの再起動でも対応できるように・・・等の不測時の処理の作り込み。

ようは通信を減らして安定性をアップさせたいって事ですね。

あ、言い出しっぺの法則は無しですよーw

384noroma:2009/05/19(火) 22:23:36 ID:???
>>383
詰め込みすぎて起動しない人もいるわけで・・・

まあ自分の場合、リク迎撃はおろか、連続コメ機能もまだ入れることが出来ないでいますからね
なにが起動の邪魔をしているのやら・・・

385wata_z:2009/05/19(火) 22:35:43 ID:???
>>384
そういえば、昔会社のPCwでリクツールを動かしたことが有るんですが、少し間にw2k版を動かしてみると動かなかった事あり
なにかの機能が邪魔してるのかな?
ちなみにその時は起動する度になにかプロセスは動くんですが、リクツール自体は表示されませんでした

386noroma:2009/05/19(火) 22:53:44 ID:???
>>385
mshta.exeですね。
確か通信のプロセスだとか。
それは動いてるらしいんですが、だんまりを決め込むんですよね。
多分、通信のタイミングがずれて、受信待ちで止まってるんじゃないかと思ってますけど。

387w2k:2009/05/22(金) 13:21:30 ID:???
/ngadd実行時に、/ngdel〜をファイルに書き出すようにして、
次回起動・接続時にそのファイルがあればそのコマンドを実行できるようにする。

というのはどうでしょうか。

いきなり自動実行というのもアレなので、
ダイアログを出して許可したときのみ実行、みたいな感じで。

388w2k:2009/05/22(金) 13:22:53 ID:???
>>386
うちでもたまにありますね。
そういうときは、mshta.exeを一旦終了させてから再度やってみるといいようです。

389SAMMA(TM):2009/05/22(金) 13:55:36 ID:???
2.3.2.5で再生時のリクリスト削除でたまにエラーが出ますね。
RequestManeger.jsの340行付近かな。
再現理由がトンと不明なので原因がつかめませんが・・・。

390SAMMA(TM):2009/05/22(金) 14:03:34 ID:???
>>387
また機能拡張になってしまいますがw
NGリスト・・・と言うより、副管理者リストをローカルで持っちゃうというのも1つの手かもしれません。
副管理者機能をタブで1つ追加。
その中に、名前、ID、NGチェックボックス、権限チェックボックス(コメ、コマンド)
これでID管理できてれば、見通しはよくなりますよね。
保存と復帰機能があれば不慮の事故でも安心ですし。
複数人で主コメを使うことを想定するのであれば、必要になってくるかもしれません。
現状は該当者一人というのが想定される使用条件だと思うので。

えっと、htaとかjavascriptとかさっぱりなので、言いだしっぺの法則は適用除外でw

391wata_z:2009/05/22(金) 14:29:12 ID:???
>>390
IDは定期的に変わるので管理するのは難しそう
まあ、企画の支援目的であれば、予め規格主には184でない番号を教えてもらい、
それをリスト化するってのは出来るかもしれません

ただ、いまいち複数人を副管理者に設定するシチュエーションが浮かばない

>>388
終了後、再度実行してもmsha.exeが裏で動くのみです
ちなみにEEさんの最終版だと動いたりします
というか、いろいろソフトをコメントにして試してみましたが、原因分かりません
onloadの最初にalerを入れてもダイアログが出てこないので、もっと根本的な原因の様な気がする


・・・というか、昼間からみなで書き込みしてますが、休日ですか?w

392SAMMA(TM):2009/05/22(金) 15:09:13 ID:???
>>391
そうですか?w
ちょっと企画枠で話が出てましたけど、企画主が枠を取れなくて、支援主が生主。
そこにゲストというのでこの3人が主コメを使いそうな感じ。
そうではなくて、何も同時に使うというわけでもなく、過去の自貼り枠、higumonさんの企画なんかは複数ID機能があるとかなり楽できます。
あと、作品にPが一人というわけでなく、楽曲師さんと絵師さんが一緒に現れたりとかもありましたし。
まぁ、多少は実装方法を考えないと、主コメの取り合いになりそうですがw
自貼り枠なんかは、場の雰囲気もあって、わりと主の気ままで運営してますけど、
この前のボーマス告知企画はかなり大変そうでしたね。操作慣れしてないこともあったみたいだけど。
まぁ、たくさんのゲストを抱えるとそれだけで大忙しなわけですw

ところで、ニコリク起動しない件。
2.3.2.5を最初に起動したときには・・・1〜2分かかった気がw
今は10秒ぐらいで起動しますけど。
あれ、外部ファイル(logファイルとか保存ファイルとか)がいっぱいあるので、そのファイルがないと検索に時間がかかるのかな?
あと、デフォルトでテストコミュに自動接続になってたりしてたはずなので、それで起動しないのかもw

金曜日の昼間なのに書き込みいぱーいw
はつよさんも、今日は休日なんですね?w
わたし?クラインの壷にはまって、逃避中〜w。upsidedown insideout(謎

393w2k:2009/05/22(金) 15:27:59 ID:???
副管理人が複数いると、発言のタイミングがかぶったときえらいことになりそうなw

ってか、自分でもたまに
起動しないor起動しても接続できないorマイリス一覧が取得できない
などと色々な不具合があったりして、ちょっと躓き中だったりorz<改造

え、俺? 普段夜勤の俺にとっては普通なんですがw

394higumon:2009/05/22(金) 16:53:09 ID:???
>>392

>この前のボーマス告知企画はかなり大変そうでしたね。操作慣れしてないこともあったみたいだけど。
>まぁ、たくさんのゲストを抱えるとそれだけで大忙しなわけですw
副管理人機能をあんなに使ったのは、今回はじめてですし、
なかなか慣れなかったですね。正直。

裏でskype、MSNメッセンジャーで打合せ(3つ先の出演者ぐらいまで)
してましたので、放送中全く余裕がなかったです。
少しでも負担が減ってくれると助かるわけですが。

今日はもう仕事は手仕舞い。
どうせ送別会(自分のではない)で残業ないし。
・・・いつものとおり職場な訳ですがw

395higumon:2009/05/22(金) 17:01:45 ID:???
あ、あと。

複数ID機能あると、自分の企画の場合助かりますね。
AさんからBさんへゲストが変わる場合
これまでですと、Aさんに一度でてもらってからBさんに入ってもらう必要が
ありますが、
複数あれば Aさん→Bさんin→A・Bさん混在→Aさんout→Bさん
というような、引渡しが可能になりますからね。

396wata_z:2009/05/22(金) 17:22:52 ID:???
なるほど、企画の種類によっては需要がありそうですね

ってことで・・・

(ノ・∀・)ノ =====[副管理者機能パワーアップ要望]))゚Д゚)・∵.<397

397SAMMA(TM):2009/05/22(金) 17:32:17 ID:???
>>395
ああ、それがありましたねw
あのコメ権限を引き抜くタイミングって難しいんですよねw
あまり待ってもいられないから、そこそこに引き抜いちゃったりしてw
意外に気を使うシーンですよねw

ちょっとかんがえてみ・・・
===[副管理者機能パワーアップ要望]))゚Д゚)・∵.
ぐはっ

ちょwwwどこかで食らったからっていって、やめてくださいwww
というか、こんなくネタを引っ張るのは9月まで禁止w(8月でも可w

398noroma:2009/05/22(金) 17:39:46 ID:???
華麗にスルーw

一つ機能要望が。
今のツールは、リクエスト収集、つまり動画番号を集めるためのツールです。
これをちょっといじって、特定の語句をカウントするような機能ができないかな?と考えています。
用途は「ネタ曲選手権」
みんなでネタ曲を持ち寄って、鑑賞及び審査をしてもらおうと。
この時の審査基準が「w」の数、というのを考えてます。
自分で考えようとも思ったのですが、ここで聞くのもありだなと思って、ネタバレ覚悟で聞いてみました。

399wata_z:2009/05/24(日) 01:00:30 ID:???
ちょいと質問というか、アンケート?

生放送で公開しましたが、複数人対応の副管理者機能について
途中でツールを落とした場合の話ですが、
ソフトの作りやすさもあって、登録した管理者設定は残さないようにしようと思っています
そのかわり、終了時に主NGだけ解除するようにして最低限どうにもならない状態だけは回避しようと思っています。

それともやはり副管理者設定情報保持(名前、ID、コメントON/OFF、コマンドON/OFF、NG ON/OFF)は必要ですか?

400noroma:2009/05/24(日) 01:15:12 ID:???
>>399
主NGだけ回避していれば問題ないと思います。
それ以外の場合はかなり特殊な状況かと思われますので、切り捨てても構わないかと。

401noroma:2009/05/24(日) 01:17:01 ID:???
しいて言うなら、NG登録IDをファイルに書き出しておくくらいの機能があればいいかなとは思いました。
それを使っての復旧は手作業任せ。

402noroma:2009/05/24(日) 01:18:36 ID:???
もしくは、復旧専用ツールを別途用意する。

連投すみませんm(_ _)m

403w2k:2009/05/24(日) 06:45:33 ID:???
>>401に1票ノ

ツール以前にPCそのものが落ちてしまう場合もあるかもなので、
PCを再度起動して復帰できれば、
あらかじめファイルに書き出しておくことで
復旧できるようになる・・・というのが理由です。

404SAMMA(TM):2009/05/24(日) 16:50:37 ID:???
>>401案に再起動時にこのファイルを読んで解除コメを実行・・・というところかな。
リセットされた状態に戻すところまで。
主NG設定でなく解除だから、何もなかったとしてもとりあえず問題ないかな?という感じ。
自動化できるならの話。
自動実行まではしなくても、NG削除コマンドまで含めて書いてくれてればそれでいいかも。
基本的には非公開コマンドの類なので、コマンド探してやってくれとはいえない状況かと。

405noroma:2009/05/24(日) 17:53:47 ID:???
>>404
それは>>402で書いてある通り、あえて別で用意するべきかと。
詰め込みすぎて重いんですがら、普段使わない機能は別にすればいいんじゃないかと。

確かに、手動ならコマンド含めてテキストにあるとありがたいですね。

406トーン:2009/05/24(日) 23:01:07 ID:???
 Main.js

 リクナンバーのlv表示の自分で出来たので書き込んでおきます。
 多分もう需要があって不必要だと思いますが自分で組み込みたい方用に。

 上の方(グローバル変数部分)に
var LVID;
 を追加。

 connect関数(function connect(PS))内
PlayLog += "lv"+PS.lv+"\n";
 の下に
LVID = "lv"+PS.lv;
 を追加。

 複数行あるであろう
RequestManager.addRequestQueue(new RequestQueue(sms[0], "C", Chat.no));
 を
RequestManager.addRequestQueue(new RequestQueue(sms[0], LVID, Chat.no));
 に変更。

 これでlvxxxxxx-smxxxxxxxと表示されるはず……です。

407トーン:2009/06/05(金) 14:06:24 ID:???
 急用が入りました。
 30分程度で済むのでPart6161をを23分で切り上げ、Part6162はリクエストを受け付けない自動放送ということにします。
 万一事故が起こったら申し訳ないです

408トーン:2009/06/06(土) 19:04:19 ID:???
 遅れました。誤爆です。

409なまはいさん@お腹いっぱい。:2009/06/18(木) 22:01:48 ID:???
すみません。色々考えたのですが分からないので相談させてください…orz
JASコードのついているものとそうでないものをソートで分けられますでしょうか?
順番は気にしません。コードのあるものと無いものが分けられればおkなのですが…

410なまはいさん@お腹いっぱい。:2009/06/18(木) 23:33:01 ID:???
>>409
自分でやる気にはならないのですが、できると思いますよ。
JASコードは動画単位で持ってる情報の筈(動画番号や再生数と同じ)なので、普通にソート対象にするか、
空白のもので不具合起きそうなら、「000000000」みたいな適当な初期値持たせてやれば大丈夫だと思います。

411w2k:2009/07/04(土) 14:33:46 ID:???
俺がうpした改造ニコリクをご利用の皆様へ

特殊なコードがコメントされると、ニコリクが使い物にならなくなる脆弱性が発見されました。
解決法としては、Main.jsやComment.jsをメモ帳で開き、
.replace(/&lt;/g,"<")
.replace(/&gt;/g,">")
を全削除&上書き保存でとりあえず問題ないことを確認しました。
(「&」は半角です)

取り急ぎ報告まで。

ご迷惑をかけてしまい、まことに申し訳ありませんが、よろしくお願いします。

なお、後ほど様々な機能を追加したVerをうpする予定です。

# 機能面は満足のいくところまで来ているんですが、りどみをどうするか悩む;;

412w2k:2009/07/04(土) 16:16:32 ID:???
まだまだ検証不足の感は否めませんが、自分が使ってる最新Verをうpしました。
http://www1.axfc.net/uploader/He/so/233042.lzh&amp;key=vocaloid
バグ報告はこのスレでお願いします。

ちなみに、
 動作確認環境
  Win2k+IE6(VirtualPC上)
  Vista+IE8+NCI(実機)

うん、ぜんぜん足りないねorz

413小ネタ:2009/07/13(月) 17:07:00 ID:???
再生した動画が鯖にアクセスすることなくマイリスに登録済みかどうか分かるようにしてみたので書いてみる。

【VideoInformation.js】

function __VideoInformation__getMylistIDs(){
 (略)
 for(var i=0,l=Options.length; i<l; i++){
  Options[i].match(/ href="mylist\/(.+?)">(.+?)<\/a><\/strong>/ig);
  var id = Number(RegExp.$1);
  var name = RegExp.$2;
  if(!isNaN(id)){
   xmlhttp.open("GET","http://www.nicovideo.jp/mylist/&quot; + id, false);
   xmlhttp.send();
   var Options2 = xmlhttp.responseText.match(/<h3><a class="video" href="watch\/([^\"]+?)">([^<]+?)<\/a><\/h3>/ig);
   if(Options2){
    var VideoIDs = new Array();
    for(j=0;j<Options2.length;j++){
     Options2[j].match(/<h3><a class="video" href="watch\/([^\"]+?)">([^<]+?)<\/a><\/h3>/ig);
     VideoIDs.push(RegExp.$1);
    }
    if(Options2.length<500) {
     result.push({id: id, name: name, VideoIDs: VideoIDs, flag: true});
    }else{
     result.push({id: id, name: name, VideoIDs: VideoIDs, flag: false});
    }
   }
  }
 }
 return result;
}

function __VideoInformation__receiveComment(Chat, flag){
 (略)
    for(var i=0,l=__VideoInformation__MylistIDs.length; i<l; i++){
     if(settings["CheckPlayedVideoIdIsAdd2Mylists"]){
      // マイリスに登録されてるかどうか調査
      for(j=0;j<__VideoInformation__MylistIDs[i].VideoIDs.length;j++){
       if(__VideoInformation__MylistIDs[i].VideoIDs[j]==VideoID){
        document.getElementById("checkMylistResult").innerHTML += VideoID+'はマイリスト「'+__VideoInformation__MylistIDs[i].name+'」に登録されています。<br>';
        AllreadyExist = true;
       }
      }
     }
     if(!(settings["CheckPlayedVideoIdIsAdd2Mylists"] && __VideoInformation__MylistIDs[i].flag==false)){
      var opt = document.createElement("option");
      (略)

414小ネタ:2009/07/13(月) 17:14:27 ID:???
>>413の処置により、ストックにある動画がマイリスに登録されてるかどうかが分かるようになったのでこちらも。

【Request.js】

function Request(){

this.mylist = new Array();
を追加

Request.prototype = {
 initialize: function(id, xmldom){

  for(var i=0,l=__VideoInformation__MylistIDs.length; i<l; i++){
   for(var j=0;j<__VideoInformation__MylistIDs[i].VideoIDs.length;j++){
    if(__VideoInformation__MylistIDs[i].VideoIDs[j]==this.id){
     this.mylist.push({id: __VideoInformation__MylistIDs[i].id, name: __VideoInformation__MylistIDs[i].name});
    }
   }
  }
を追加

【RequestManager.js】
 _replaceHTML: function(str, R){

  return str
のreplaceに
   .replace(/{#Mylist}/g,function(){
    var tmp = "";
    for(i=0;i<R.mylist.length;i++){
     tmp += "["+R.mylist[i].name + "] ";
    }
    return tmp.replace(/ $/,"");
   })
を追加

【settings.js】
settings["ItemHTML"]に
<b>登録済みマイリスト/</b>{#Mylist}
のように追加

415なまはいさん@お腹いっぱい。:2009/07/16(木) 21:51:50 ID:???
>>413を修正して、マイリスに登録されている動画の数を視認できるようにしてみた

【VideoInformation.js】

function __VideoInformation__getMylistIDs(){
 (略)
   if(Options2){
    var VideoIDs = new Array();
    var l2=Options2.length;
    for(var j=0;j<l2;j++){
     Options2[j].match(/<h3><a class="video" href="watch\/([^\"]+?)">([^<]+?)<\/a><\/h3>/ig);
     VideoIDs.push(RegExp.$1);
    }
    result.push({id: id, name: name, VideoIDs: VideoIDs, count: new String(l2)});
   }else{
    result.push({id: id, name: name, VideoIDs: [], count: "0"});
   }
  }
 }
 return result;
}

function __VideoInformation__receiveComment(Chat, flag){
 (略)
    for(var i=0,l=__VideoInformation__MylistIDs.length; i<l; i++){
     if(settings["CheckPlayedVideoIdIsAdd2Mylists"]){
      // マイリスに登録されてるかどうか調査
      for(j=0;j<__VideoInformation__MylistIDs[i].VideoIDs.length;j++){
       if(__VideoInformation__MylistIDs[i].VideoIDs[j]==VideoID){
        document.getElementById("checkMylistResult").innerHTML += VideoID+"はマイリスト「"+__VideoInformation__MylistIDs[i].name+"」に登録されています。<br>";
        AllreadyExist = true;
       }
      }
     }
     if(!(settings["CheckPlayedVideoIdIsAdd2Mylists"] && __VideoInformation__MylistIDs[i].count=="500")){
      var opt = document.createElement("option");
      opt.appendChild(document.createTextNode(__VideoInformation__MylistIDs[i].name+"(登録数:"+__VideoInformation__MylistIDs[i].count+")"));
      opt.setAttribute("value", __VideoInformation__MylistIDs[i].id);
      sel.appendChild(opt);
     }
    }
    (略)
}

416なまはいさん@お腹いっぱい。:2009/07/16(木) 21:52:25 ID:???
// 続き
function __VideoInformation__addMylist(VideoID){
 (略)
  if(result && result.result=="success"){
   document.getElementById("addMylistResult").innerHTML += VideoID + "をマイリスト「" + addMylistSel.options[addMylistI].text.replace(/(.+/,"")+"」に登録しました";
   if(document.getElementById("checkMylistResult").innerHTML.match("はどのマイリストにも登録されていません。")){
    document.getElementById("checkMylistResult").innerHTML = VideoID+"はマイリスト「"+addMylistSel.options[addMylistI].text.replace(/(.+/,"")+"」に登録されています。<br>";
   }else{
    document.getElementById("checkMylistResult").innerHTML += VideoID+"はマイリスト「"+addMylistSel.options[addMylistI].text.replace(/(.+/,"")+"」に登録されています。<br>";
   }
   for(var i=0,l=__VideoInformation__MylistIDs.length; i<l; i++){
    if(__VideoInformation__MylistIDs[i].id==mylistID){
     __VideoInformation__MylistIDs[i].VideoIDs.push(VideoID);
     __VideoInformation__MylistIDs[i].count = new String(Number(__VideoInformation__MylistIDs[i].count)+1);
     addMylistSel.options[addMylistI].text = addMylistSel.options[addMylistI].text.replace(/(.+/,"(登録数:"+__VideoInformation__MylistIDs[i].count+")");
     break;
    }
   }
  }else if(result.result=="duperror"){
   document.getElementById("addMylistResult").innerHTML += VideoID + "は既にマイリスト「" + addMylistSel.options[addMylistI].text.replace(/(.+/,"") + "」に登録されています。";
  }else if(result.result=="maxerror"){
   alert("マイリスト「" + addMylistSel.options[addMylistI].text.replace(/(.+/,"") + "」はすでに満杯なので追加できません。\n他のマイリストを指定してください。");
  }else{
   alert("想定外のエラー:"+result.result);
  }
 (略)
}

417noroma:2009/07/18(土) 04:47:45 ID:???
副管理者機能にて登録告知をOFFにしている場合、NG登録コマンドが出ていない様子。
登録・変更・削除、いずれのチェックボックスがOFFになってもNG登録されないようです。

まだまだ検証不足なのでもう少し調べますが、今のところわかっているのはこれだけです。

418w2k:2009/07/23(木) 21:23:22 ID:???
一部に興味ある方がいらしたようなので、今日のミクライブで使ってたツールをちょっと手直ししてうpしてみました。

http://www1.axfc.net/uploader/Sc/so/20194.lzh&amp;key=vocaloid

はっきり言っておいら仕様なので、環境によっては不具合出るかも;;

419なまはいさん@お腹いっぱい。:2009/08/03(月) 22:09:15 ID:???
NicoRequest w2k式VorcaloidArrange_2327α4不具合報告
りどみの「このスレ」がどこかわからなかったのでこちらへ
OS:XP Pro SP3
コメからリクを拾ってくるが動画情報取得中...と表示されたところでエラーダイアログがでます

ライン:19
文字:27021
エラー:書き込みできません。
コード:0
URL:file:///C:/Documents%20and%20Settings/ユーザー名/デスクトップ/NicoRequest%20w2k式VorcaloidArrange_2327α4/NicoRequest%20w2k式VorcaloidArrange_2327α4/System/jquery.min.js

こちらの環境のせいかもしれませんが一応ご報告まで

420なまはいさん@お腹いっぱい。:2009/08/09(日) 20:13:51 ID:???
w2k VA_2327&alpha;を改造したいのですが、
どこをどういじればいいのかわからないため
みるべき場所を教えていただけないでしょうか。

改造したい点は以下の通りです。
・タブの順序の入れ替え
・「コメントフィルター」「連続コメント」タブを「コメント管理」として統合
・「リクエスト」タブのサムネイルを、クリックして表示に戻す
・「リクエスト」タブの、聞き入り度/マイリス率/正義値を削除
・「動画情報」タブの、聞き入り度/マイリス率/正義値を削除

421蒼空碧葉:2009/08/12(水) 14:03:46 ID:???
>>420
今この場でわかるだけ
①・② NicoRequest.hta
④・⑤ settings.js
たしか、③ リクタブのサムネイル表示は、
settings.jsとRequestManager.jsをいじるんだったと思います。
回答になったかどうかはわかりませんが、一応

422トーン:2009/08/15(土) 19:32:43 ID:???
 自動接続のメンバーオンリー放送の件ですが

  //放送ID抽出
  rep = new RegExp("<img src=\"http://icon.nicovideo.jp/community.*/co&quot; + document.getElementById("autoConnectComm").value + "\.jpg.+\n.+\n.+\n.+\n.+\n.+\n.+\n.+\n.+<a href=\"http://live.nicovideo.jp/watch/lv\(\[0-9\]+\)","g");
  tmp = xmldom.match(rep);

 の下に

  if(!tmp){
   rep = new RegExp("<img src=\"http://icon.nicovideo.jp/community.*/co&quot; + document.getElementById("autoConnectComm").value + "\.jpg.+\n.+\n.+\n.+\n.+\n.+\n.+\n.+\n.+\n.+<a href=\"http://live.nicovideo.jp/watch/lv\(\[0-9\]+\)","g");
   tmp = xmldom.match(rep);
  }

 をつけることでとりあえず動作を確認しました。

423なまはいさん@お腹いっぱい。:2009/08/16(日) 02:15:20 ID:???
>>421
ありがとうございます
何とか改良に励んでみようと思います

424bd_(5代目):2009/09/20(日) 08:32:27 ID:???
延長機能APIの経緯をまとめてみました→http://fushizen.net/~bd/enchou-desc.txt
うちはLinuxを使っているので直接ツールの開発に参加できませんが、とりあえず
誰かの役に立てるかなと思って作ってみました。あと、ツール開発とかに関しては新参なので、
もしかして情報が被っちゃったら無視してくださいw

425なまはいさん@お腹いっぱい。:2009/10/06(火) 12:37:52 ID:???
ニコリクでSocketManagerなんたらのエラーに悩んでる方へ

SocketManager.js の

alert("SocketManager.receiveComment/〜

の行頭に

//

を入れると幸せになれるかも?

426蒼空微風涼輝碧葉 ◆cIzCbmvzRI:2009/11/02(月) 22:43:44 ID:???
http://www1.axfc.net/uploader/Sc/so/51619.lzh&amp;key=mirrorsound
NicoRequest VorcaloidArrange蒼空碧葉式_232SH-β-A-0800
ニコニコ動画9式のマイリスト系に対応しました。
あと、動画情報開いたりするのをサムネイルに移動しました。
コメントログ出力を調整しました。
etc
以上に重たいですが・・・

427null:2009/12/15(火) 11:48:23 ID:???
ちょっとテストしますよ

428なまはいさん@お腹いっぱい。:2009/12/15(火) 15:16:53 ID:???
ボカロ曲垂れ流し兼ニコリクテスト lv8190253 2009/12/15(火) 13:06:56開始
sm3381792 鏡音リン オリジナル曲『Dolls』
sm6131948 【がくっぽいど】暴君三三七拍子【オリジナル】
nm4383186 【KAITO】「卑怯戦隊うろたんだー」(a cappella version)
sm6044481 【巡音ルカ】月の浜辺
nm6416879 【KAITO】ROAD AHEAD【オリジナルだよ
sm4399506 【鏡音リン・レン】 Type ACT.2! ??新しいセカイへ?? 【オリジナル曲】
nm3382581 【初音ミク】【KAITO】ソラアオイヤ【オリジナル】
nm7601701 【メグッポイド】カントリーガール【オリジナル曲】

ボカロ曲垂れ流し兼ニコリクテスト lv8190847 2009/12/15(火) 13:37:23開始
nm7823295 【めぐっぽいど】 少年カミカゼ-改 【オリジナルRe:master】
sm6607299 【KAITO,レン】さかしま少年アリス【オリジナル】
sm1755938 MEIKO姉さんオリジナル曲「Palette」
nm6475122 【巡音ルカ】could be/could be 【オリジナル】
nm4752749 【KAITO】鳥獣戯画 (修正版)【オリジナル】
sm5265960 【MEIKO】 オリジナル曲 ??鉄巨人より?? 『仮想現実』 修正版
nm6271514 【巡音ルカ】 graduation 【オリジナル】
nm6005634 【巡音ルカ】Time for happiness??【オリジナル】

ボカロ曲垂れ流し兼ニコリクテスト lv8191534 2009/12/15(火) 14:07:44開始
sm4016347 【鏡音リンACT2】Time&Space【オリジナル曲】
nm6049209 【巡音ルカ】ダブルラリアット【オリジナル】
sm5587040 【MEIKO】Close My Eyes (dGOS Remix)【ReMaster】
sm5599781 【がくぽ】既成事実 -full.ver【カバー】
sm3528388 【リンオリジナル曲】運命の時の少女【作ったんDA☆】
nm4136946 【がくっぽいど】 喪失モノクローム 【オリジナル】

ボカロ曲垂れ流し兼ニコリクテスト lv8192316 2009/12/15(火) 14:38:05開始
sm2914634 「Decayed to the tooth」 オリジナル曲 feat. 鏡音リン
sm6243085 【MEIKO】So-La 【巡音ルカ】
sm9023529 【初音ミク】某〇×△□より【オリジナル曲】
sm7552114 【巡音ルカ】『滅菌都市』
nm5809204 瑠璃の涙 鏡音リン・レンオリジナル
sm2117793 鏡音リン・レンがFCの拡張音源チップに搭載!【ステレオツインズ】
nm7539204 鏡音リンオリジナル Noiz are Nel

4291行で200字投稿できるかテスト:2009/12/23(水) 16:41:00 ID:???
12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890

430なまはいさん@お腹いっぱい。:2009/12/23(水) 16:45:32 ID:???
この掲示板、1行で何文字まで行けるんだろう?
ニコのコミュ掲示板では192文字までが限界らしいけど、
ここでは200でもいけるみたいだし、ちょっと謎・・・
1行で何文字までなのか、何行までなのか、全部で何文字までなのか、
これらが分かると開発上助かるなぁ・・・w

4316だ@掲示板管理人:2009/12/23(水) 17:04:36 ID:KwLBiU7o
>>430
参考になるかな。
http://2353.up.seesaa.net/image/A4B7A4BFA4E9A4D0C0DFC4EA.jpg
一行の制限という設定項目は存在しません。
多分一レス最多文字数そのままじゃないかな?

432430:2009/12/23(水) 17:31:11 ID:???
>>431
DLしますた、参考にさせてもらいますね。

というか、さすがに1行で数千字とかはプログラム的にダメな気がするw

433なまはいさん@お腹いっぱい。:2009/12/24(木) 12:54:45 ID:???
test

434なまはいさん@お腹いっぱい。:2009/12/24(木) 12:55:34 ID:???
test2

435なまはいさん@お腹いっぱい。:2009/12/24(木) 12:56:43 ID:XwKyUJZA
test3

436なまはいさん@お腹いっぱい。:2009/12/24(木) 12:59:05 ID:???
test4

437みっくみくにされました:みっくみくにされました
みっくみくにされました

438437:2009/12/24(木) 16:51:49 ID:???
ちょww1行1000文字もいけるのかwwwww

439みっくみくにされました:みっくみくにされました
みっくみくにされました

440みっくみくにされました:みっくみくにされました
みっくみくにされました

441test:2009/12/24(木) 17:03:05 ID:???
まじか・・・どこまでいけるんだ?(荒らしまがいなことしてスマソ

442管理人:2009/12/24(木) 22:10:13 ID:XwKyUJZA
>>437
>>439
>>440
TOPページにあると表示が崩れるから削除しとくよ

443なまはいさん@お腹いっぱい。:2009/12/26(土) 19:12:57 ID:???
生主、改造者のみなさんありがとうございます。
要望も受付けているとの事なので検討お願いします。

殿堂入り間近の動画を生放送で流さないような改造はできますか?
一気に10万再生を超えないように99500〜10万の間は再生しないという風にできればいいと思います。
早々ない事とは思いますが、以前殿堂入り直後の曲が放送された事はあります。
本家の動画で1再生ずつ増えるのを見守ってる人達にとっては大事な事だと思うので。
それでは失礼しました。

444なまはいさん@お腹いっぱい。:2009/12/26(土) 19:51:26 ID:???
リクがあった瞬間に動画情報を取り込む仕組みになってたと思うので、
その時点での再生数をチェックして、何らかの処理(注意マークの表示やリク拒否)を組み込めば良いのかな。
チェック内容を入力ボックスでも用意していじれるようにしておけば、リクの基準による自動排除もできるかな。

最近いじってないのでやらないけど、できそうな人はチャレンジしてみてくらはい。

445なまはいさん@お腹いっぱい。:2009/12/26(土) 22:29:29 ID:???
>>443 こんな感じ?(文字の色が変わるだけですが・・・)

RequestManager.js 115行目付近

.replace(/{#View}/g, R.view)



.replace(/{#View}/g, function(){
var vnum = R.view;
if((vnum>=99500) && (vnum<100000)){
return "<font color=red>殿堂入直前 "+vnum+"</font>";
}else{return vnum;}})

自動除外とかについてはわからんので,できる方お願いします.

446445:2009/12/27(日) 15:57:00 ID:???
もう少し改造してみた.
確認ダイアログ表示後にリクエストを自動削除するようにしてみました.

.replace(/{#View}/g, function(){
if((R.view>=99500) && (R.view<100000)){
var delreq=window.confirm(R.id +"は殿堂入直前です。\n リクエストから除外しますか?");
if (delreq==1){
delreqid=R.id;
setTimeout("RequestManager.deleteRequestQueueById(delreqid)",100);}}
return R.view})

447443:2009/12/30(水) 16:08:10 ID:???
>>445
早速ありがとうございます。
自動削除されるなら見落としもないと思います。
数値を変えれば、来場者数によって変更もできて便利そうですね。

448なまはいさん@お腹いっぱい。:2010/03/01(月) 08:29:51 ID:???
なんか見つけたので保守ageしつつペタペタ
http://d.hatena.ne.jp/rallus/searchdiary?word=%2A%5B%A5%CB%A5%B3%A5%EA%A5%AF%A5%A8%A5%B9%A5%C8%5D

449w2k:2010/03/25(木) 17:27:11 ID:???
メンテで運営コメ投稿の仕様が変わったので、対処法を書いておきます。
なお、ニコリク2.3.2をベースとしていますのでアシカラズ。

【Main.js】
 冒頭
  var token = "";//追加

 __VideoInformation__onConnect(PS.lv);
 の後に
  NicoLive.getXML("http://live.nicovideo.jp/api/getpublishstatus?v=lv&quot;+PS.lv, function(xmldom){
   if(!xmldom&&!xmldom.getElementsByTagName("token")) return false;
   token = xmldom.getElementsByTagName("token")[0].text;
  });
 を追加

【NicoLive.js】
 postComment: function(body, mail){
 の
 xmlhttp.Open("GET", "http://watch.live.nicovideo.jp/api/broadcast/lv&quot;+lv+&quot;?body=&quot;+encodeURIComponent(body)+&quot;&amp;mail=&quot;+encodeURIComponent(mail), true);
 を
 xmlhttp.Open("GET", "http://watch.live.nicovideo.jp/api/broadcast/lv&quot;+lv+&quot;?body=&quot;+encodeURIComponent(body)+&quot;&amp;mail=&quot;+encodeURIComponent(mail)+&quot;&amp;token=&quot;+token, true);
 に差し替え。

以上です。

ちなみに、getpublishstatusは放送主以外がアクセスするとエラーを返してきます。
なので、接続時のgetplayerstatusのAPIでis_ownerを診断するようにしておいたほうがいいかも。

450w2k:2010/03/25(木) 17:33:15 ID:???
追記
NicoLive.jsのほうですが、
if(token=="") return;
を入れておくと、無駄なアクセスを抑制できます。

一例:
 postComment: function(body, mail){
  if(!SocketManager.connected||token=="") return;
  <以下略>

451w2k:2010/03/25(木) 20:24:05 ID:???
NicoRequest2.3.2をほんの少しいじって、仕様変更に対応させてみました。
http://w2k.choitoippuku.com/live/tools/NicoRequest_custom/

不具合がありましたら、こちらのスレにて報告していただけると幸い。

※先読みなど、主の動画IDコメをリクとして処理してしまうのもそのままになってますw

452なまはいさん@お腹いっぱい。:2010/11/04(木) 15:28:20 ID:???
マイリストの取得でこけるようになってしまったので、
VideoInformation.js(co7642で公開してる0325版の場合はMylist.js)の
ttp://ext.nicovideo.jp/api/deflist/list
ttp://ext.nicovideo.jp/api/mylist/list?group_id=

ttp://www.nicovideo.jp/api/deflist/list
ttp://www.nicovideo.jp/api/mylist/list?group_id=
に書き換えてみてください

453なまはいさん@お腹いっぱい。:2011/06/24(金) 08:26:18 ID:14AM6Lkw
マイリスト取得でエラーが出るようになったんですが、
何が原因かさっぱりわからないので対処出来ません。
Mylist.jsのあるタイプがエラー出るようです。

「自分で解析しろ」「古いバージョン使え」「違うツール使え」
以外の方法があったら教えていただきたいです。

454saihane:2011/06/24(金) 13:19:40 ID:???
私の使っている(いじっている)ニコリクには Mylist.js というファイルがないため
まったく参考にならない可能性はありますが、マイリストグループのデータが
うまく取得できない点に関して私は暫定で次のように修正しました。

https://github.com/ryochin/nicoreq_mikunopop/commit/a7bcbd6e52ffe9d1d2d20a43d7eed0198056955b

html 内から JSON を抜き出すのではなく、API から直接データを得ています。

もし全く違うお話をされているのならごめんなさい。参考まで。

455w2k:2011/06/25(土) 17:27:40 ID:???
>>453
失礼ながら、

>>452
> マイリストの取得でこけるようになってしまったので、
> VideoInformation.js(co7642で公開してる0325版の場合はMylist.js)の
> ttp://ext.nicovideo.jp/api/deflist/list
> ttp://ext.nicovideo.jp/api/mylist/list?group_id=
> を
> ttp://www.nicovideo.jp/api/deflist/list
> ttp://www.nicovideo.jp/api/mylist/list?group_id=
> に書き換えてみてください

の処理はお済ですか?

やっているのにエラーになる場合、ブラウザのCookieが拾えていないかもしれません。

NicoCookieImporterをお使いでしたら、ブラウザのバージョンアップによって
Cookieの共有ができなくなってしまった可能性があります。

現状、自PCはVista32bit+IE9ですが、一応Cookie共有ツールなしで使えていますが・・・。



NicoCacheが使えるのであれば、、こういうのもあるので紹介しておきます。

複数のブラウザでニコニコ動画にログインし直さなくていい NicoCache_nl の Extension 作ってみた
http://d.hatena.ne.jp/edvakf/20110308/1299605635

実際に使ってみましたが、任意のブラウザ&ニコリクで放送できました。
試してみる価値はあると思いますが、いかがでしょうか。

456hamasuho:2013/05/11(土) 23:14:22 ID:2UQLJ8KQ
>>451 :w2k:2010/03/25(木) 20:24:05 ID:???
>>NicoRequest2.3.2をほんの少しいじって、仕様変更に対応させてみました。
>>http://w2k.choitoippuku.com/live/tools/NicoRequest_custom/
>>
>>不具合がありましたら、こちらのスレにて報告していただけると幸い。
>>
>>※先読みなど、主の動画IDコメをリクとして処理してしまうのもそのままになってますw

こちらをieの保護モード下などに対応した近代化改修バージョンを作成しました。

http://nicorerun.com/otherdata/NicoRequest_custom_modrepair201305.zip

内容は

http://nicorerun.com/blog/?date=20130101

こちらを参照下さい。


近代化改修の内容はみればわかりますが、場当たり的なものです。

457hamasuho:2013/05/11(土) 23:20:55 ID:2UQLJ8KQ
申し訳ありませんが、スキル不足なので質問などは受け付けられません。
ご自分で問題解決が可能な方のみご利用ください。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板