]> ruin.nu Git - NDIRC.git/commitdiff
Main implementation
authorMichael Andreen <harv@ruin.nu>
Tue, 4 Sep 2007 17:12:25 +0000 (19:12 +0200)
committerMichael Andreen <harv@ruin.nu>
Tue, 4 Sep 2007 17:12:25 +0000 (19:12 +0200)
Misc.pm

diff --git a/Misc.pm b/Misc.pm
index 9a7e2b2ede0e12ff2a5f9b27f5e31f26127d1ef7..926ad0adaa83a71b7b39ea7039e1b56465ae6cb3 100644 (file)
--- a/Misc.pm
+++ b/Misc.pm
@@ -23,7 +23,19 @@ require Exporter;
 
 our @ISA = qw/Exporter/;
 
-our @EXPORT = qw/valuecolor/;
+our @EXPORT = qw/valuecolor addCommand parseCommand/;
+
+our %channels;
+our %commands;
+
+$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'];
 
 $ND::defchan = "#def-ndawn";
 $ND::memchan = "#nd";
@@ -33,7 +45,6 @@ $ND::intelchan = "#ndintel";
 $ND::officerchan = "#nd-officers";
 $ND::communitychan = "#ndawn";
 $ND::pubchan = "#newdawn";
-$ND::xanchan = "#ViolatorS";
 
 sub valuecolor {
        my $s = $_;
@@ -46,4 +57,39 @@ sub valuecolor {
        return $s;
 }
 
+sub addCommand {
+       my ($command, $list, $func) = @_;
+       $commands{$command} = {fun => $func, acc => $list};
+}
+
+sub parseCommand {
+       my ($msg,$channel) = @_;
+       if ($msg =~ /^(\w+)(?: (.+))?$/){
+               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);
+                               return 1;
+                       }
+               }
+       }
+       return 0;
+}
+
+sub intersect {
+       my ($a, $b) = @_;
+       my %union;
+       foreach my $e (@{$a}) { $union{$e} = 1 }
+
+       my %isect;
+       foreach my $e (@{$b}) {
+            $isect{$e} = 1 if ( exists $union{$e} )
+       }
+       return keys %isect;
+}
+
 1;