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