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

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

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, "");
        }
    }
}


新着レスの表示


名前: E-mail(省略可)

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

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

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

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