diff -urN tiarra-20040407/ChangeLog tiarra-20040418/ChangeLog --- tiarra-20040407/ChangeLog 2004-04-07 20:57:33.000000000 +0900 +++ tiarra-20040418/ChangeLog 2004-04-18 16:45:56.000000000 +0900 @@ -1,3 +1,22 @@ +2004-04-18 Topia + + * HACKING: + - BulletinBoard と remark についてを追記。 + - こまかい修正。 + + * main/IrcIO/Client.pm, module/Client/Cache.pm: + - __PACKAGE__ がダブルクォートの中では展開されないことを + 忘れていたので修正。 + + * module/Channel/Rejoin.pm: + - 自分自身がいないチャンネル(そもそもふつうはこんなことには + ならないのだが)の rejoin 判定時に error が起きるのを修正。 + +2004-04-18 phonohawk + + * main/ControlPort.pm (ControlPort::Session::main): + 誤字修正。 NOTIFT => NOTIFY + 2004-04-07 phonohawk * main/IrcIO/Server.pm (new): @@ -1567,7 +1586,7 @@ * これ以前のログは書いていません。 -# Id: $Id: ChangeLog,v 1.144 2004/04/07 11:49:58 admin Exp $ -# Author: $Author: admin $ -# Date: $Date: 2004/04/07 11:49:58 $ -# Revision: $Revision: 1.144 $ +# Id: $Id: ChangeLog,v 1.146 2004/04/18 07:44:46 topia Exp $ +# Author: $Author: topia $ +# Date: $Date: 2004/04/18 07:44:46 $ +# Revision: $Revision: 1.146 $ diff -urN tiarra-20040407/HACKING tiarra-20040418/HACKING --- tiarra-20040407/HACKING 2004-04-07 20:57:33.000000000 +0900 +++ tiarra-20040418/HACKING 2004-04-18 16:45:56.000000000 +0900 @@ -7,6 +7,9 @@ * 注意すべき事項 - Tiarra はシングルスレッドです。時間がかかる処理をそのままやってはいけません。 Timer や Hook, ソケット入出力なら ExternalSocket を使って少しずつ処理してください。 + - conf の変更が起きると、モジュールはインスタンスごと再初期化されます。 + 設定変更後にも必要なデータは、適切なオブジェクトの remark か、 BulletinBoard に + 書いてください。 * 良く使うモジュール/関数 - Mask(main/Mask.pm) @@ -33,7 +36,7 @@ + channel($str) チャンネルを探す。 ネットワーク名付きのチャンネル名が引数です。無ければ undef を返します。 + broadcast_to_clients(@messages) メッセージを全てのクライアントに送信する。 - * notify_msg($str) 全てのクライアントと、 STDOUT にメッセージを通知します。 + + notify_msg($str) 全てのクライアントと、 STDOUT にメッセージを通知します。 + notify_error($str) notify_msg を使ってエラーを通知します。 + notify_warn($str) notify_msg を使って警告を通知します。 @@ -43,6 +46,43 @@ + ::debug_mode() デバッグモードなら 1 を返します。 + ::ipv6_enabled() IPv6 が有効なら 1 を返します。 + - BulletinBoard(main/BulletinBoard.pm) + ここで紹介する関数は、全て BulletinBoard->shared->function(...) と呼んで下さい。 + + set($key, $value) 掲示板に $key という名前で値 $value をセットします。 + $value を __PACKAGE__."/key" という名前にすれば + 被りにくいと思います。 + + get($key) $key でセットした値を得ます。 + + keys BulletinBoard が保持しているテーブルを返します。 + この内容を変更すると、当然 BulletinBoard の内容も変わります。 + - Auto::Utils(module/Auto/Utils.pm) + generate_reply_closures(...) 一般的な自動反応をするのに有用なクロージャを生成する。 一般的な使い方は Skelton.pm に書いておきました。 + +* remark のあるオブジェクト + remark 機能の存在するオブジェクトと、(あるなら)広く使われている既定の remark を挙げます。 + - IrcIO::Client + - IrcIO::Server + + 情報取得系 + * server_hops 自分のつながっている server と、あるサーバの hop 数の対応を + (情報が得られたときに)記録しています。 + - IRCMessage + + 情報取得系 + * affected-channels NICK や QUIT などの全チャンネルに波及するメッセージのときに + 影響を受けたチャンネルが設定されていることがあります。 + * old-topic TOPIC 時に一つ前のトピックが設定されています。 + + 動作設定系 + * fill-prefix-when-sending-to-client + クライアントに送信するときに prefix (Tiarra が 001(RPL_WELCOME) + で返したもの) を補完します。 + * do-not-send-to-clients このメッセージを(ほかのモジュールで処理する可能性があるために + 残すけれど)クライアントには送信しないようにします。 + * do-not-send-to-servers do-not-send-to-clients と同じような理由で、サーバに送信しない + ようにします。 + - ChannelInfo + + 情報取得系 + * kicked-out そのチャンネルから蹴り出されている(すでにそのチャンネルに + いない)かどうか。 + * switches-are-known チャンネルモードを取得済みかどうか。 + - PersonInChannel + - PersonalInfo diff -urN tiarra-20040407/main/ControlPort.pm tiarra-20040418/main/ControlPort.pm --- tiarra-20040407/main/ControlPort.pm 2004-04-07 20:57:34.000000000 +0900 +++ tiarra-20040418/main/ControlPort.pm 2004-04-18 16:45:57.000000000 +0900 @@ -1,5 +1,5 @@ # ----------------------------------------------------------------------------- -# $Id: ControlPort.pm,v 1.3 2003/06/03 15:27:42 admin Exp $ +# $Id: ControlPort.pm,v 1.4 2004/04/18 06:01:16 admin Exp $ # ----------------------------------------------------------------------------- =pod << NOTIFY Log::Channel TIARRACONTROL/1.0 @@ -180,7 +180,7 @@ if ($line =~ m|^(.+?)\s+(.+?)\s+TIARRACONTROL/(\d+)\.(\d+)$|) { $this->{method} = $1; $this->{module} = $2; - if (!{GET => 1,NOTIFT => 1}->{$this->{method}}) { + if (!{GET => 1,NOTIFY => 1}->{$this->{method}}) { $this->reply(501,'Method Not Implemented'); } my $version = "$3.$4"; diff -urN tiarra-20040407/main/IrcIO/Client.pm tiarra-20040418/main/IrcIO/Client.pm --- tiarra-20040407/main/IrcIO/Client.pm 2004-04-07 20:57:33.000000000 +0900 +++ tiarra-20040418/main/IrcIO/Client.pm 2004-04-18 16:45:57.000000000 +0900 @@ -1,5 +1,5 @@ # ----------------------------------------------------------------------------- -# $Id: Client.pm,v 1.28 2004/03/19 13:21:06 topia Exp $ +# $Id: Client.pm,v 1.29 2004/04/18 07:44:46 topia Exp $ # ----------------------------------------------------------------------------- # IrcIO::Clientはクライアントからの接続を受け、 # IRCメッセージをやり取りするクラスです。 @@ -450,7 +450,7 @@ 'channel-info', $this, $ch_name, $network, $ch); }; if ($@) { # エラーメッセージは表示するが、送信処理は続ける - RunLoop->shared_loop->notify_error("__PACKAGE__ hook call error: $@"); + RunLoop->shared_loop->notify_error(__PACKAGE__." hook call error: $@"); } }; diff -urN tiarra-20040407/module/Channel/Rejoin.pm tiarra-20040418/module/Channel/Rejoin.pm --- tiarra-20040407/module/Channel/Rejoin.pm 2004-04-07 20:57:35.000000000 +0900 +++ tiarra-20040418/module/Channel/Rejoin.pm 2004-04-18 16:45:59.000000000 +0900 @@ -1,5 +1,5 @@ # ----------------------------------------------------------------------------- -# $Id: Rejoin.pm,v 1.4 2004/02/23 02:46:19 topia Exp $ +# $Id: Rejoin.pm,v 1.5 2004/04/18 07:44:47 topia Exp $ # ----------------------------------------------------------------------------- # このモジュールは動作時に掲示板のdo-not-touch-mode-of-channelsを使います。 # ----------------------------------------------------------------------------- @@ -82,7 +82,7 @@ return; } my $myself = $ch->names($server->current_nick); - if ($myself->has_o) { + if (defined $myself && $myself->has_o) { # 自分が@を持っている。 return; } diff -urN tiarra-20040407/module/Client/Cache.pm tiarra-20040418/module/Client/Cache.pm --- tiarra-20040407/module/Client/Cache.pm 2004-04-07 20:57:35.000000000 +0900 +++ tiarra-20040418/module/Client/Cache.pm 2004-04-18 16:45:57.000000000 +0900 @@ -1,6 +1,7 @@ # ----------------------------------------------------------------------------- -# $Id: Cache.pm,v 1.8 2004/04/01 09:44:41 topia Exp $ +# $Id: Cache.pm,v 1.9 2004/04/18 07:44:47 topia Exp $ # ----------------------------------------------------------------------------- +# copyright (C) 2003-2004 Topia . all rights reserved. package Client::Cache; use strict; use warnings; @@ -41,8 +42,8 @@ # チャンネルについている remark を削除。 foreach my $network (RunLoop->shared_loop->networks_list) { foreach my $ch ($network->channels_list) { - $ch->remark("__PACKAGE__/fetching-switches", undef, 'delete'); - $ch->remark("__PACKAGE__/fetching-who", undef, 'delete'); + $ch->remark(__PACKAGE__."/fetching-switches", undef, 'delete'); + $ch->remark(__PACKAGE__."/fetching-who", undef, 'delete'); } } @@ -69,21 +70,21 @@ !defined $msg->param(1)) { my $ch = $io->channel($msg->param(0)); if (defined $ch) { - $ch->remark("__PACKAGE__/fetching-switches", 1); + $ch->remark(__PACKAGE__."/fetching-switches", 1); } } elsif ($type eq 'in' && $msg->command eq RPL_CHANNELMODEIS && Multicast::channel_p($msg->param(1))) { my $ch = $io->channel($msg->param(1)); if (defined $ch) { - $ch->remark("__PACKAGE__/fetching-switches", undef, 'delete'); + $ch->remark(__PACKAGE__."/fetching-switches", undef, 'delete'); } } elsif ($type eq 'out' && $msg->command eq 'WHO' && Multicast::channel_p($msg->param(0))) { my $ch = $io->channel($msg->param(0)); if (defined $ch) { - $ch->remark("__PACKAGE__/fetching-who", 1); + $ch->remark(__PACKAGE__."/fetching-who", 1); } } elsif ($type eq 'in' && $msg->command eq RPL_WHOREPLY && @@ -91,7 +92,7 @@ # 処理の都合上、一つでも帰ってきた時点で取り消し。 my $ch = $io->channel($msg->param(1)); if (defined $ch) { - $ch->remark("__PACKAGE__/fetching-who", undef, 'delete'); + $ch->remark(__PACKAGE__."/fetching-who", undef, 'delete'); } } } @@ -148,7 +149,7 @@ return undef; } } else { - if ($info{ch}->remark("__PACKAGE__/fetching-switches")) { + if ($info{ch}->remark(__PACKAGE__."/fetching-switches")) { # 取得しているクライアントがいるなら、今回は消す。 return undef; } @@ -222,7 +223,7 @@ $sender->remark('who-cache-used', $remark); return undef; } else { - if ($info{ch}->remark("__PACKAGE__/fetching-who")) { + if ($info{ch}->remark(__PACKAGE__."/fetching-who")) { # 取得しているクライアントがいるなら、今回は消して便乗。 return undef; }