番外:print()メソッドとIRCのオブジェクト構造

シーンイン/リザレクトスクリプトを次回セッション用にいじってて、改造に直接は関係しないけどメモしておいた方がいいような気がすることがでてきたので、メモ。

1)print()メソッド

今後使うかは分かりませんが、メモとして。


内部処理を自分のチャンネルログにだけこっそり表示するもうひとつの方法として検討したのがこれです。printメソッド。
LimeChatのヘルプによると、

void print(String text)
チャンネルログに文字列を出力します。

こういうメソッドです。
ようするに、サーバにメッセージを送信しないけど、自分のチャンネルログには意図した文字列がまるでNoticeコマンドで受け取った文字列のように表示されます。

書き方はこんなかんじ。
function event::onChannelText(prefix, channel, text)
{
    //Channelオブジェクトの宣言
    var channelObject = findChannel(channel);
    
    if (text.match(/%/)) {
        //サーバに送らず、チャンネルログにだけ出力。
        channelObject.print ('print massage');
        //Noticeメッセージとして出力
        send(channel, 'Notice massage');
    }

}

最初の関数宣言event::onChannelText(prefix, channel, text)で引数として渡されてる「channel」は単なる文字列です。なのでチャンネル情報を引き出したり操作したりしたければ、改めてオブジェクトとして宣言せねばなりません。
それがfindChannel。渡された文字列にマッチする Channel オブジェクトを返す、グローバル関数です。

結果。

1)スクリプト主「B_Dice」のチャンネルログ

23:06 (B_Dice) %
23:06 print massage
23:06 (B_Dice) Notice massage

2)お付き合いテスト用ユーザその1「ten-you」のチャンネルログ

23:06 (B_Dice) %
23:06 (B_Dice) Notice massage

3)お付き合いテスト用ユーザその2「ten」のチャンネルログ

23:06 (B_Dice) %
23:06 (B_Dice) Notice massage


スクリプト主である「B_Dice」以外のログには、「print massage」という文字列が表示されていないのが分かります。

2)オブジェクトの構造

もうひとつメモ。IRCの(?)オブジェクトの構造について。

  • グローバル(?)
    • Window
    • Prefix
    • Channel
      • ChannelMode
      • ChannelMember
        • ChannelMemberMode
    • File
    • Clipboard
    • EbentContext

ヘルプによると大体こんな関係。
グローバルに属するプロパティやメソッド以外は、必ずオブジェクトを宣言(?)しなければいけません。
……ということに気づくのにどんだけかかってんだか、自分。