http skeleton using AnyEvent::HTTPD
[MQR.git] / scripts / mqr-track.pl
index 65e5888..bda4e51 100755 (executable)
@@ -4,16 +4,34 @@ use strict;
 use AnyEvent::Redis;
 use Data::Dump qw(dump);
 
-my $sub = AnyEvent::Redis->new( host => $ENV{REDIS_HOST}, port => $ENV{REDIS_PORT} );
+use lib 'lib';
+use MQR::Redis;
 
 my $track;
+my $regex;
 
-my $sub_cv = $sub->psubscribe('*', sub {
-       my($message, $chan) = @_;
-       warn "$chan | $message\n";
-       if ( $message =~ m/^!track\s*(.+)/ ) {
-               $track->{$chan}->{$1}++;
-               warn "# track ",dump($track);
+MQR::Redis->redis->psubscribe('*', sub {
+       my($message, $channel) = @_;
+       if ( $channel =~ m/^MSG / ) {
+               if ( $message =~ m/^!track\s*(.+)/ ) {
+                       $track->{$1} = $channel;
+                       $regex = join('|', keys %$track);
+                       warn "# track regex: $regex\n";
+               } elsif ( $regex && $message =~ m/($regex)/ ) {
+                       my $m = $message;
+                       while ( $m =~ s/($regex)// ) {
+                               my $found = $1;
+                               my $body = "TRACK [$found] $channel | $message";
+                               print "$body\n";
+                               my $to = $track->{$found} || die "no $1 in ",dump($track);
+                               $to =~ s/^MSG /SEND /g;
+                               MQR::Redis->publish( $to, $body );
+                       }
+               } else {
+                       warn "$channel | $message\n";
+               }
+       } else {
+               warn "$channel | $message\n";
        }
 });