2 # This is a simple script that connects stdin/stdout with a client
3 # connection to an irc server. the command line arguments are:
5 # $ ./debug_console <nick> <server> <port>
10 use AnyEvent::IRC::Client;
11 use AnyEvent::IRC::Util qw/mk_msg parse_irc_msg encode_ctcp/;
13 use Data::Dump qw(dump);
15 my $nick = $ENV{IRC_NICK} || die "IRC_NICK";
16 my $room = $ENV{IRC_ROOM} || die "IRC_ROOM";
18 warn "# $ENV{IRC_SERVER}:$ENV{IRC_PORT} $room $nick\n";
20 my $c = AnyEvent->condvar;
21 my $stdout = AnyEvent::Handle->new (fh => \*STDOUT);
22 my $con = new AnyEvent::IRC::Client;
24 my $pub = AnyEvent::Redis->new( host => $ENV{REDIS_HOST}, port => $ENV{REDIS_PORT}, on_error => sub { warn @_ } );
25 my $sub = AnyEvent::Redis->new( host => $ENV{REDIS_HOST}, port => $ENV{REDIS_PORT}, on_error => sub { warn @_ } );
27 $sub->psubscribe( 'channel *', sub {
28 my ( $message, $from ) = @_;
29 return unless $from !~ m/\Q$nick\E/; # skip our messages
30 warn "#Q<< ",dump( $from, $message );
31 my ( undef, $channel, $user ) = split(/ /,$from,3);
32 $con->send_msg( 'PRIVMSG', $room => join(' ',$channel, $user, $message) );
40 warn "Couldn't connect: $err\n";
43 $stdout->push_write ("Connected!\n");
46 $con->register ($nick, $nick, $nick);
52 . mk_msg ($msg->{prefix}, $msg->{command}, @{$msg->{params}})
56 if ( $msg->{command} eq 'PRIVMSG' ) {
57 my $channel = join(' ', 'channel', $msg->{params}->[0], $msg->{prefix});
58 $pub->publish( $channel, $msg->{params}->[1] );
59 } elsif ( $msg->{command} eq 'MODE' ) {
60 $con->send_srv( JOIN => $room );
66 "> " . mk_msg (undef, @msg) . "\n"
74 $stdin = AnyEvent::Handle->new (
77 warn "EOF on STDIN, disconnecting...\n";
78 $con->disconnect ("Console EOF");
81 warn "Error on STDIN: $!\n";
84 $stdin->push_read (line => sub {
85 my ($stdin, $line) = @_;
90 warn "eval error: $@\n";
92 $Data::Dumper::Terse = 1;
93 $stdout->push_write ("result: " . dump($r));
96 my $msg = parse_irc_msg ($line);
97 $con->send_msg ($msg->{command}, @{$msg->{params}});
104 warn "disconnect: $_[1]!\n";
109 $con->ctcp_auto_reply('VERSION', ['VERSION', 'MQR-IRC:0.1:Perl']);
111 $con->connect ($ENV{IRC_SERVER}, $ENV{IRC_PORT} || 6667);