1# -----------------------------------------------------------------------------
2# $Id: Time.pm 11365 2008-05-10 14:58:28Z topia $
3# -----------------------------------------------------------------------------
4package CTCP::Time;
5use strict;
6use warnings;
7use base qw(Module);
8use Module::Use qw(Tools::DateConvert);
9use Tools::DateConvert;
10use CTCP;
11use Multicast;
12use Config;
13use BulletinBoard;
14
15# ctcp-clientinfo-timeを設定
16BulletinBoard->shared->ctcp_clientinfo_time('TIME');
17
18sub message_arrived {
19    my ($this,$msg,$sender) = @_;
20
21    if ($sender->isa('IrcIO::Server') &&
22	$msg->command eq 'PRIVMSG' &&
23	defined $msg->nick) {
24
25	my $ctcp = CTCP::extract($msg);
26	if (defined $ctcp && $ctcp eq 'TIME') {
27
28	    my $last = $sender->remark('last-ctcp-replied');
29	    if (!defined $last || time - $last > ($this->config->interval || 3)) {
30		# 前回のCTCP反応から一定時間以上経過している。
31		my $reply = CTCP::make(
32		    'TIME :'.Tools::DateConvert::replace('%a, %Y/%m/%d %H:%M:%S %z'),
33		    scalar Multicast::detach($msg->nick)
34		);
35		$sender->send_message($reply);
36		$sender->remark('last-ctcp-replied',time);
37	    }
38	}
39    }
40
41    $msg;
42}
43
441;
45
46=pod
47info: CTCP TIMEに応答する。
48default: off
49section: important
50
51# CTCP::Versionのintervalと同じ。
52interval: 3
53=cut
54