]> ruin.nu Git - NDIRC.git/blobdiff - Misc.pm
Basic conversion to POE::Component::IRC
[NDIRC.git] / Misc.pm
diff --git a/Misc.pm b/Misc.pm
index 96483e10f5e9aa951cd5ac3ffe940805d6496ec6..bada45151b3df42dc46c3c60f289a7937021727d 100644 (file)
--- a/Misc.pm
+++ b/Misc.pm
 package NDIRC::Misc;
 use strict;
 use warnings;
-require Exporter;
-
-our @ISA = qw/Exporter/;
+use feature ':5.10';
 
-our @EXPORT = qw/valuecolor addCommand parseCommand commands/;
+require Exporter;
 
-our %channels;
-our %commands;
+use NDIRC::Context;
 
-$channels{'#def-ndawn'} = ['all','member','def'];
-$channels{'#nd'} = ['all','member'];
-$channels{'#ndef'} = ['all','member','scan'];
-$channels{'#nd-day'} = ['all','member'];
-$channels{'#ndintel'} = ['all','member'];
-$channels{'#nd-officers'} = ['all','member'];
-$channels{'#ndawn'} = ['all'];
-$channels{'pm'} = ['pm'];
+our @ISA = qw/Exporter/;
 
-$ND::defchan = "#def-ndawn";
-$ND::memchan = "#nd";
-$ND::scanchan = "#ndef";
-$ND::bcchan = "#nd-day";
-$ND::intelchan = "#ndintel";
-$ND::officerchan = "#nd-officers";
-$ND::communitychan = "#ndawn";
-$ND::pubchan = "#newdawn";
+our @EXPORT = qw/valuecolor parseCommand/;
 
 sub valuecolor {
        my $s = $_;
@@ -57,52 +40,49 @@ sub valuecolor {
        return $s;
 }
 
-sub addCommand {
-       my ($command, $list, $func) = @_;
-       $commands{$command} = {fun => $func, acc => $list};
-}
-
 sub parseCommand {
-       my ($msg,$channel) = @_;
-       if ($msg =~ /^(\S+)(?: (.+))?$/){
-               my $c = $1;
-               my $args = $2;
-               my @k = keys %commands;
-               if (exists $commands{$c}){
-                       my $a = $commands{$c}->{acc};
-                       my $b = (exists $channels{lc $channel} ? $channels{lc $channel} : ['all']);
-                       if (intersect($a,$b) > 0){
-                               $commands{$c}->{fun}->($args,$c);
-                               return 1;
-                       }
+       my ($msg, $server, $nick, $address, $channel, $disp,$model) = @_;
+
+       return if $channel !~ /^#/ && $msg =~ /^~/;
+       $msg = ".$msg"  if $channel !~ /^#/ && $msg =~ /^[^.!]/;
+
+       my ($p,$command,$args) = ($msg =~ /^([.!~])(\S+)(?: (.+))?/);
+
+       if ($msg =~ m{http://[\w.]+/.+?scan(_id|_grp)?=(\w+)}){
+               if (!$command || $command =~ m{^http://}){
+                       ($p,$command,$args) = ('.','addscan',$msg);
+               }elsif($command ne 'addscan'){
+                       parseCommand (".addscan $msg", $server, $nick, $address, $channel, $disp,$model)
                }
        }
-       return 0;
-}
 
-sub commands {
-       my ($channel) = @_;
-       my @commands;
-       my $b = (exists $channels{lc $channel} ? $channels{lc $channel} : ['all']);
-       for my $c (sort keys %commands){
-               my $a = $commands{$c}->{acc};
-               if (intersect($a,$b) > 0){
-                       push @commands, $c;
+       return 0 unless $disp->has_command($command,$channel);
+
+       my $reply_string;
+       given ($p){
+               when ('!'){
+                       $reply_string = "privmsg $nick";
+               }
+               when ('~'){
+                       $reply_string = "privmsg $channel";
+               }
+               default {
+                       $reply_string = "notice $nick";
                }
        }
-       return join ', ', @commands;
-}
 
-sub intersect {
-       my ($a, $b) = @_;
-       my %union;
-       foreach my $e (@{$a}) { $union{$e} = 1 }
+       $address =~ s/.*@(.*)/$1/;
+       my $c = NDIRC::Context->new({
+                       host => $address,
+                       nick => $nick,
+                       channel => $channel,
+                       disp => $disp,
+                       model => $model,
+                       server => $server,
+                       reply_string => $reply_string,
+               });
 
-       my %isect;
-       foreach my $e (@{$b}) {
-            $isect{$e} = 1 if ( exists $union{$e} )
-       }
-       return keys %isect;
+       return $disp->run_command($c,$command,$args);
 }
 
 1;