X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=scripts%2Fmqr-irc-client.pl;h=408b2db90eae1b6722221c2d8bbccba61cb1d6f4;hb=41ec73724e90d07d071effd8ecadfeb70fc82e3c;hp=58d437400b40b72e9a32551f5f690f9f988127bb;hpb=139c4497de5948abbadb64a7abe7bbc795d57cfb;p=MQR.git diff --git a/scripts/mqr-irc-client.pl b/scripts/mqr-irc-client.pl index 58d4374..408b2db 100755 --- a/scripts/mqr-irc-client.pl +++ b/scripts/mqr-irc-client.pl @@ -13,24 +13,32 @@ use AnyEvent::Redis; use Data::Dump qw(dump); 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 { confess @_ } ); -my $sub = AnyEvent::Redis->new( host => $ENV{REDIS_HOST}, port => $ENV{REDIS_PORT}, on_error => sub { confess @_ } ); +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 - 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 ( @@ -55,8 +63,11 @@ $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 ); } @@ -109,6 +120,6 @@ warn dump(@msg); $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;