-
Notifications
You must be signed in to change notification settings - Fork 22
/
eg-13-irc-bot.pl
78 lines (63 loc) · 1.51 KB
/
eg-13-irc-bot.pl
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env perl
# Using POE::Component::IRC. That component requires the user to
# register for events. The new Reflex::POE::Session watcher is used
# to receive all events from the component.
use strict;
use warnings;
use lib qw(../lib);
{
package Bot;
use Moose;
extends 'Reflex::Object';
use Reflex::Trait::Observer;
use Reflex::POE::Session;
use POE qw(Component::IRC);
has component => (
isa => 'Object|Undef',
is => 'rw',
);
has poco_watcher => (
isa => 'Reflex::POE::Session',
is => 'rw',
traits => ['Reflex::Trait::Observer'],
role => 'poco',
);
sub BUILD {
my $self = shift;
$self->component(
POE::Component::IRC->spawn(
nick => "reflex_$$",
ircname => "Reflex Test Bot",
server => "10.0.0.25",
) || die "Drat: $!"
);
$self->poco_watcher(
Reflex::POE::Session->new(
sid => $self->component()->session_id(),
)
);
$self->run_within_session(
sub {
$self->component()->yield(register => "all");
$self->component()->yield(connect => {});
}
)
}
sub on_poco_irc_001 {
my $self = shift;
print "Connected. Joining a channel...\n";
$self->component->yield(join => "#room");
}
sub on_poco_irc_public {
my ($self, $args) = @_;
my ($who, $where, $what) = @$args;
my $nick = (split /!/, $who)[0];
my $channel = $where->[0];
if (my ($rot13) = $what =~ /^rot13 (.+)/) {
$rot13 =~ tr[a-zA-Z][n-za-mN-ZA-M];
$self->component->yield(privmsg => $channel => "$nick: $rot13");
}
}
}
Bot->new()->run_all();
exit;