X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=Misc.pm;h=96483e10f5e9aa951cd5ac3ffe940805d6496ec6;hb=7f37aeb466310930ecb7e57e841c285372ffa8aa;hp=9a7e2b2ede0e12ff2a5f9b27f5e31f26127d1ef7;hpb=ec80f6c0dba1fd56a63d591e89f6368d468912f7;p=NDIRC.git diff --git a/Misc.pm b/Misc.pm index 9a7e2b2..96483e1 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 commands/; + +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,52 @@ 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; + } + } + } + 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 join ', ', @commands; +} + +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;