line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
# $Id: Pluggable.pm,v 1.5 2002/12/10 13:23:34 matt Exp $ |
2
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
package Bot::Pluggable; |
4
|
1
|
|
|
1
|
|
10899
|
use POE::Component::IRC::Object; |
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
use base qw(POE::Component::IRC::Object); |
6
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
$VERSION = '0.03'; |
8
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
use strict; |
10
|
|
|
|
|
|
|
use POE; |
11
|
|
|
|
|
|
|
|
12
|
|
|
|
|
|
|
sub add_module { |
13
|
|
|
|
|
|
|
my ($self, @modules) = @_; |
14
|
|
|
|
|
|
|
my %new_modules = map { $_ => 1 } (@{$self->{Modules}}, @modules); |
15
|
|
|
|
|
|
|
@{$self->{Modules}} = keys %new_modules; |
16
|
|
|
|
|
|
|
} |
17
|
|
|
|
|
|
|
|
18
|
|
|
|
|
|
|
sub remove_module { |
19
|
|
|
|
|
|
|
my ($self, @modules) = @_; |
20
|
|
|
|
|
|
|
my %new_modules = map { $_ => 1 } @{$self->{Modules}}; |
21
|
|
|
|
|
|
|
foreach my $mod (@modules) { delete $new_modules{$mod} } |
22
|
|
|
|
|
|
|
@{$self->{Modules}} = keys %new_modules; |
23
|
|
|
|
|
|
|
} |
24
|
|
|
|
|
|
|
|
25
|
|
|
|
|
|
|
sub modules { |
26
|
|
|
|
|
|
|
my ($self) = @_; |
27
|
|
|
|
|
|
|
return @{$self->{Modules}}; |
28
|
|
|
|
|
|
|
} |
29
|
|
|
|
|
|
|
|
30
|
|
|
|
|
|
|
sub add_object { |
31
|
|
|
|
|
|
|
my ($self, @objects) = @_; |
32
|
|
|
|
|
|
|
push @{$self->{Objects}}, @objects; |
33
|
|
|
|
|
|
|
} |
34
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
sub objects { |
36
|
|
|
|
|
|
|
my ($self) = @_; |
37
|
|
|
|
|
|
|
return @{$self->{Objects}}; |
38
|
|
|
|
|
|
|
} |
39
|
|
|
|
|
|
|
|
40
|
|
|
|
|
|
|
BEGIN { |
41
|
|
|
|
|
|
|
sub add_event { |
42
|
|
|
|
|
|
|
my $class = shift; |
43
|
|
|
|
|
|
|
my $method = shift; |
44
|
|
|
|
|
|
|
eval "sub $method {\n" . |
45
|
|
|
|
|
|
|
' my $self = $_[OBJECT]; |
46
|
|
|
|
|
|
|
$_[SENDER] = $self; |
47
|
|
|
|
|
|
|
shift(@_); |
48
|
|
|
|
|
|
|
foreach my $obj ($self->objects) { |
49
|
|
|
|
|
|
|
my $meth = $obj->can(' . "'$method'" . '); |
50
|
|
|
|
|
|
|
next unless $meth; |
51
|
|
|
|
|
|
|
my $ret = $meth->($obj, @_); |
52
|
|
|
|
|
|
|
return if $ret; |
53
|
|
|
|
|
|
|
} |
54
|
|
|
|
|
|
|
foreach my $class ($self->modules) { |
55
|
|
|
|
|
|
|
my $meth = $class->can(' . "'$method'" . '); |
56
|
|
|
|
|
|
|
next unless $meth; |
57
|
|
|
|
|
|
|
my $ret = $meth->($class, @_); |
58
|
|
|
|
|
|
|
return if $ret; |
59
|
|
|
|
|
|
|
} |
60
|
|
|
|
|
|
|
}'; |
61
|
|
|
|
|
|
|
die "Compilation of $method failed: $@" if $@; |
62
|
|
|
|
|
|
|
} |
63
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
my @methods = qw( |
65
|
|
|
|
|
|
|
irc_001 |
66
|
|
|
|
|
|
|
irc_public |
67
|
|
|
|
|
|
|
irc_join |
68
|
|
|
|
|
|
|
irc_invite |
69
|
|
|
|
|
|
|
irc_kick |
70
|
|
|
|
|
|
|
irc_mode |
71
|
|
|
|
|
|
|
irc_msg |
72
|
|
|
|
|
|
|
irc_nick |
73
|
|
|
|
|
|
|
irc_notice |
74
|
|
|
|
|
|
|
irc_part |
75
|
|
|
|
|
|
|
irc_ping |
76
|
|
|
|
|
|
|
irc_quit |
77
|
|
|
|
|
|
|
irc_dcc_chat |
78
|
|
|
|
|
|
|
irc_dcc_done |
79
|
|
|
|
|
|
|
irc_dcc_error |
80
|
|
|
|
|
|
|
irc_dcc_get |
81
|
|
|
|
|
|
|
irc_dcc_request |
82
|
|
|
|
|
|
|
irc_dcc_send |
83
|
|
|
|
|
|
|
irc_dcc_start |
84
|
|
|
|
|
|
|
irc_snotice |
85
|
|
|
|
|
|
|
|
86
|
|
|
|
|
|
|
irc_ctcp_finger |
87
|
|
|
|
|
|
|
irc_ctcp_version |
88
|
|
|
|
|
|
|
irc_ctcp_source |
89
|
|
|
|
|
|
|
irc_ctcp_userinfo |
90
|
|
|
|
|
|
|
irc_ctcp_clientinfo |
91
|
|
|
|
|
|
|
irc_ctcp_errmsg |
92
|
|
|
|
|
|
|
irc_ctcp_ping |
93
|
|
|
|
|
|
|
irc_ctcp_time |
94
|
|
|
|
|
|
|
irc_ctcp_action |
95
|
|
|
|
|
|
|
irc_ctcp_dcc |
96
|
|
|
|
|
|
|
); |
97
|
|
|
|
|
|
|
|
98
|
|
|
|
|
|
|
foreach my $method (@methods) { |
99
|
|
|
|
|
|
|
__PACKAGE__->add_event($method); |
100
|
|
|
|
|
|
|
} |
101
|
|
|
|
|
|
|
} |
102
|
|
|
|
|
|
|
|
103
|
|
|
|
|
|
|
1; |
104
|
|
|
|
|
|
|
|
105
|
|
|
|
|
|
|
__END__ |