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);
19 my $nick = $ENV{IRC_NICK} || die "IRC_NICK";
20 my $room = $ENV{IRC_ROOM} || die "IRC_ROOM";
21 my $server = $ENV{IRC_SERVER} || die 'IRC_SERVER';
22 my $subscribe = $ENV{IRC_SUBSCRIBE} || die 'IRC_SUBSCRIBE';
24 my $c = AnyEvent->condvar;
25 my $stdout = AnyEvent::Handle->new (fh => \*STDOUT);
26 my $con = new AnyEvent::IRC::Client;
28 warn "# server:$ENV{IRC_SERVER}:$ENV{IRC_PORT} room:$room nick:$nick subscribe:$subscribe\n";
30 MQR::Redis->redis->psubscribe( "MSG $subscribe", sub {
31 my ( $message, $from ) = @_;
32 warn "<<<< ",dump( $from, $message );
33 return unless $from !~ m/\Q($nick|$room)\E/; # FIXME: skip our messages
34 my ( undef, $gw, $type, $user ) = split(/ /,$from);
35 MQR::Redis->publish( "SEND $nick\@$server $room $user" => "<$user> $message" );
38 MQR::Redis->redis->psubscribe( "SEND $nick\@$server $room *", sub {
39 my ( $message, $from ) = @_;
40 warn "PRIVMSG $room $message\n";
41 $con->send_msg( 'PRIVMSG', $room => $message );
49 warn "Couldn't connect: $err\n";
52 $stdout->push_write ("Connected!\n");
55 $con->register ($nick, $nick, $nick);
61 . mk_msg ($msg->{prefix}, $msg->{command}, @{$msg->{params}})
65 if ( $msg->{command} eq 'PRIVMSG' ) {
66 my ( $to, $body ) = @{ $msg->{params} };
67 my $uid = $msg->{prefix};
70 MQR::Redis->publish( "MSG $nick\@$server $to $user $uid" => $body );
71 } elsif ( $msg->{command} eq 'MODE' ) {
72 $con->send_srv( JOIN => $room );
78 "> " . mk_msg (undef, @msg) . "\n"
86 $stdin = AnyEvent::Handle->new (
89 warn "EOF on STDIN, disconnecting...\n";
90 $con->disconnect ("Console EOF");
93 warn "Error on STDIN: $!\n";
96 $stdin->push_read (line => sub {
97 my ($stdin, $line) = @_;
102 warn "eval error: $@\n";
104 $Data::Dumper::Terse = 1;
105 $stdout->push_write ("result: " . dump($r));
108 my $msg = parse_irc_msg ($line);
109 $con->send_msg ($msg->{command}, @{$msg->{params}});
116 warn "disconnect: $_[1]!\n";
121 $con->ctcp_auto_reply('VERSION', ['VERSION', 'MQR-IRC:0.1:Perl']);
123 $con->connect ($server, $ENV{IRC_PORT} || 6667);