File: Conservative.pm

package info (click to toggle)
tiarra 20100212-4
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 2,732 kB
  • ctags: 1,712
  • sloc: perl: 32,032; lisp: 193; sh: 109; makefile: 10
file content (48 lines) | stat: -rw-r--r-- 1,401 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# -----------------------------------------------------------------------------
# $Id: Conservative.pm 11365 2008-05-10 14:58:28Z topia $
# -----------------------------------------------------------------------------
# copyright (C) 2004 Topia <topia@clovery.jp>. all rights reserved.
package Client::Conservative;
use strict;
use warnings;
use base qw(Module);
use Mask;
use Multicast;
use NumericReply;
use Tiarra::Utils;

sub message_io_hook {
    my ($this,$msg,$io,$type) = @_;

    if ($io->isa('IrcIO::Client') &&
	    $type eq 'out') {
	my $mark_as_need_colon = sub {
	    $msg->remark('always-use-colon-on-last-param', 1);
	    $msg;
	};
	my $command = $msg->command;

	foreach (qw(PRIVMSG NOTICE NICK WALLOPS PART NJOIN KICK TOPIC INVITE
		    PING QUIT),
		 (map { NumericReply::fetch_number("RPL_$_") }
		      (qw(MAP MAPSTART HELLO SERVLIST AWAY USERHOST ISON),
		       qw(WHOISUSER WHOISSERVER WHOWASUSER WHOISCHANNELS),
		       qw(LIST TOPIC VERSION INFO YOUREOPER TIME))),
		) {
	    if ($command eq $_) {
		return $mark_as_need_colon->();
	    }
	}
    }
    return $msg;
}

1;
=pod
info: サーバが送信するような IRC メッセージを作成するようにする
default: on

# サーバが実際に送信しているようなメッセージにあわせるようにします。
# 多くのクライアントの設計ミスを回避でき(ると思われ)ます。

=cut