use AnyEvent::IRC::Util qw/mk_msg parse_irc_msg encode_ctcp/;
use AnyEvent::Redis;
use Data::Dump qw(dump);
-use Encode;
+use Carp qw(confess);
+
+use lib 'lib';
+use MQR::Redis;
my $nick = $ENV{IRC_NICK} || die "IRC_NICK";
my $room = $ENV{IRC_ROOM} || die "IRC_ROOM";
-
-warn "# $ENV{IRC_SERVER}:$ENV{IRC_PORT} $room $nick\n";
+my $server = $ENV{IRC_SERVER} || die 'IRC_SERVER';
+my $subscribe = $ENV{IRC_SUBSCRIBE} || die 'IRC_SUBSCRIBE';
my $c = AnyEvent->condvar;
my $stdout = AnyEvent::Handle->new (fh => \*STDOUT);
my $con = new AnyEvent::IRC::Client;
-my $pub = AnyEvent::Redis->new( host => $ENV{REDIS_HOST}, port => $ENV{REDIS_PORT}, on_error => sub { warn @_ } );
-my $sub = AnyEvent::Redis->new( host => $ENV{REDIS_HOST}, port => $ENV{REDIS_PORT}, on_error => sub { warn @_ } );
+warn "# server:$ENV{IRC_SERVER}:$ENV{IRC_PORT} room:$room nick:$nick subscribe:$subscribe\n";
+
+MQR::Redis->redis->psubscribe( "MSG $subscribe", sub {
+ my ( $message, $from ) = @_;
+ warn "<<<< ",dump( $from, $message );
+ return unless $from !~ m/\Q($nick|$room)\E/; # FIXME: skip our messages
+ my ( undef, $gw, $type, $user ) = split(/ /,$from);
+ MQR::Redis->publish( "SEND $nick\@$server $room $user" => "<$user> $message" );
+});
-$sub->psubscribe( 'channel *', sub {
+MQR::Redis->redis->psubscribe( "SEND $nick\@$server $room *", sub {
my ( $message, $from ) = @_;
- return unless $from !~ m/\Q$nick\E/; # skip our messages
- Encode::_utf8_on($message);
- warn "#Q<< ",dump( $from, $message );
- my ( undef, $channel, $user ) = split(/ /,$from,3);
- $con->send_msg( 'PRIVMSG', $room => join(' ',$channel, $user, $message) );
+ warn "PRIVMSG $room $message\n";
+ $con->send_msg( 'PRIVMSG', $room => $message );
});
$con->reg_cb (
);
if ( $msg->{command} eq 'PRIVMSG' ) {
- my $channel = join(' ', 'channel', $msg->{params}->[0], $msg->{prefix});
- $pub->publish( $channel, $msg->{params}->[1] );
+ my ( $to, $body ) = @{ $msg->{params} };
+ my $uid = $msg->{prefix};
+ my $user = $uid;
+ $user =~ s{!.+$}{};
+ MQR::Redis->publish( "MSG $nick\@$server $to $user $uid" => $body );
} elsif ( $msg->{command} eq 'MODE' ) {
$con->send_srv( JOIN => $room );
}
$con->ctcp_auto_reply('VERSION', ['VERSION', 'MQR-IRC:0.1:Perl']);
-$con->connect ($ENV{IRC_SERVER}, $ENV{IRC_PORT} || 6667);
+$con->connect ($server, $ENV{IRC_PORT} || 6667);
$c->wait;