1# ----------------------------------------------------------------------------- 2# $Id: ClientInfo.pm 11365 2008-05-10 14:58:28Z topia $ 3# ----------------------------------------------------------------------------- 4# BulletinBoardのctcp-clientinfo-で始まる値を探し、それをCLIENTINFOとして応答する。 5# ----------------------------------------------------------------------------- 6package CTCP::ClientInfo; 7use strict; 8use warnings; 9use base qw(Module); 10use CTCP; 11use Multicast; 12use BulletinBoard; 13 14# CLIENTINFO設定 15BulletinBoard->shared->ctcp_clientinfo_clientinfo('CLIENTINFO'); 16 17sub message_arrived { 18 my ($this,$msg,$sender) = @_; 19 20 if ($sender->isa('IrcIO::Server') && 21 $msg->command eq 'PRIVMSG' && 22 defined $msg->nick) { 23 24 my $ctcp = CTCP::extract($msg); 25 if (defined $ctcp && $ctcp eq 'CLIENTINFO') { 26 27 my $last = $sender->remark('last-ctcp-replied'); 28 if (!defined $last || time - $last > ($this->config->interval || 3)) { 29 # 前回のCTCP反応から一定時間以上経過している。 30 31 my $clientinfo = join( 32 ' ', 33 map { 34 BulletinBoard->shared->get($_); 35 } grep { 36 m/^ctcp-clientinfo-/; 37 } BulletinBoard->shared->keys); 38 39 my $reply = CTCP::make( 40 "CLIENTINFO $clientinfo", 41 scalar Multicast::detach($msg->nick) 42 ); 43 $sender->send_message($reply); 44 $sender->remark('last-ctcp-replied',time); 45 } 46 } 47 } 48 49 $msg; 50} 51 521; 53 54=pod 55info: CTCP CLIENTINFOに応答する。 56default: off 57section: important 58 59# CTCP::Versionのintervalと同じ。 60interval: 3 61=cut 62