From: Michael Andreen Date: Tue, 4 Sep 2007 17:12:25 +0000 (+0200) Subject: Main implementation X-Git-Url: https://ruin.nu/git/?p=NDIRC.git;a=commitdiff_plain;h=b8b137da117a678f977dcf3699335c335885c029 Main implementation --- diff --git a/Misc.pm b/Misc.pm index 9a7e2b2..926ad0a 100644 --- 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;