use AnyEvent;
use AnyEvent::IRC::Client;
use AnyEvent::IRC::Util qw/mk_msg parse_irc_msg encode_ctcp/;
-use Data::Dumper;
+use AnyEvent::Redis;
+use Data::Dump qw(dump);
+use Carp qw(confess);
-my ($nick, $server, $port) = @ARGV;
+my $nick = $ENV{IRC_NICK} || die "IRC_NICK";
+my $room = $ENV{IRC_ROOM} || die "IRC_ROOM";
-$nick ||= 'mqr-irc';
-$server ||= 'irc.freenode.net';
-$port ||= 6667;
+warn "# $ENV{IRC_SERVER}:$ENV{IRC_PORT} $room $nick\n";
my $c = AnyEvent->condvar;
my $stdout = AnyEvent::Handle->new (fh => \*STDOUT);
my $con = new AnyEvent::IRC::Client;
+my $sub = AnyEvent::Redis->new( host => $ENV{REDIS_HOST}, port => $ENV{REDIS_PORT}, on_error => sub { confess @_ } );
+
+$sub->psubscribe( 'channel *', sub {
+ my ( $message, $from ) = @_;
+ return unless $from !~ m/\Q$nick\E/; # skip our messages
+ warn "#Q<< ",dump( $from, $message );
+ my ( undef, $channel, $user ) = split(/ /,$from,3);
+ $con->send_msg( 'PRIVMSG', $room => join(' ',$channel, $user, $message) );
+});
+
$con->reg_cb (
connect => sub {
my ($con, $err) = @_;
. mk_msg ($msg->{prefix}, $msg->{command}, @{$msg->{params}})
. "\n"
);
+
+ if ( $msg->{command} eq 'PRIVMSG' ) {
+ my $channel = join(' ', 'channel', $msg->{params}->[0], $msg->{prefix});
+ my $pub = AnyEvent::Redis->new( host => $ENV{REDIS_HOST}, port => $ENV{REDIS_PORT}, on_error => sub { confess @_ } );
+ $pub->publish( $channel, $msg->{params}->[1] );
+ } elsif ( $msg->{command} eq 'MODE' ) {
+ $con->send_srv( JOIN => $room );
+ }
},
debug_send => sub {
my ($con, @msg) = @_;
$stdout->push_write (
"> " . mk_msg (undef, @msg) . "\n"
);
+warn dump(@msg);
},
registered => sub {
my ($con) = @_;
warn "eval error: $@\n";
} else {
$Data::Dumper::Terse = 1;
- $stdout->push_write ("result: " . Data::Dumper::Dumper ($r));
+ $stdout->push_write ("result: " . dump($r));
}
} else {
my $msg = parse_irc_msg ($line);
},
);
-$con->ctcp_auto_reply ('VERSION', ['VERSION', 'DebugConsole:0.1:Perl']);
+$con->ctcp_auto_reply('VERSION', ['VERSION', 'MQR-IRC:0.1:Perl']);
-$con->connect ($server, $port || 6667);
+$con->connect ($ENV{IRC_SERVER}, $ENV{IRC_PORT} || 6667);
$c->wait;