rendered paste bodypackage Trivia::Bot::Plugins;
# some code from CPAN's Bot::Pluggable
use warnings;
use strict;
use POE;
use Trivia::Bot::Body;
use base 'Trivia::Bot::Body';
use Data::Dumper;
sub add_module {
my ($self, @modules) = @_;
my %new_modules = map { $_ => 1 } (@{$self->{Modules}}, @modules);
@{$self->{Modules}} = keys %new_modules;
}
sub remove_module {
my ($self, @modules) = @_;
my %new_modules = map { $_ => 1 } @{$self->{Modules}};
foreach my $mod (@modules) { delete $new_modules{$mod} }
@{$self->{Modules}} = keys %new_modules;
}
sub modules {
my ($self) = @_;
return @{$self->{Modules}};
}
sub add_object {
my ($self, @objects) = @_;
push @{$self->{Objects}}, @objects;
}
sub objects {
my ($self) = @_;
return @{$self->{Objects}};
}
sub add_event {
print Dumper(\@_);
my $class = shift;
my $method = shift;
# --> DEBUG <--
my $self = $_[OBJECT];
print $self;
foreach my $object ($self->objects) {
next unless $object->can($method);
my $return = eval "return $object->$method($object, @_);";
warn $@ if $@;
return if $return;
}
foreach my $module ($self->modules) {
next unless $module->can($method);
my $return = eval "return $module->$method($module, @_);";
warn $@ if $@;
return if $return;
}
# END
# ->> REDACTED <<-
# eval "sub $method {\n" .
# ' my $self = $_[OBJECT];
# $_[SENDER] = $self;
# shift(@_);
# foreach my $obj ($self->objects) {
# my $meth = $obj->can(' . "'$method'" . ');
# next unless $meth;
# my $ret = $meth->($obj, @_);
# return if $ret;
# }
# foreach my $class ($self->modules) {
# my $meth = $class->can(' . "'$method'" . ');
# next unless $meth;
# my $ret = $meth->($class, @_);
# return if $ret;
# }
# }';
# die "Compilation of $method failed: $@" if $@;
# END
}
my @methods = qw(
irc_001
irc_public
irc_join
irc_invite
irc_kick
irc_mode
irc_msg
irc_nick
irc_notice
irc_part
irc_ping
irc_quit
irc_snotice
irc_ctcp_finger
irc_ctcp_version
irc_ctcp_source
irc_ctcp_userinfo
irc_ctcp_clientinfo
irc_ctcp_errmsg
irc_ctcp_ping
irc_ctcp_time
irc_ctcp_action
irc_ctcp_dcc
);
foreach my $method (@methods) {
__PACKAGE__->add_event($method);
}
1;