X-Git-Url: https://ruin.nu/git/?p=NDIRC.git;a=blobdiff_plain;f=Misc.pm;h=bada45151b3df42dc46c3c60f289a7937021727d;hp=926ad0adaa83a71b7b39ea7039e1b56465ae6cb3;hb=e8c94cdebefdc428ea92fde6db63f18d3e8399b2;hpb=b8b137da117a678f977dcf3699335c335885c029 diff --git a/Misc.pm b/Misc.pm index 926ad0a..bada451 100644 --- a/Misc.pm +++ b/Misc.pm @@ -19,32 +19,15 @@ package NDIRC::Misc; use strict; use warnings; -require Exporter; - -our @ISA = qw/Exporter/; +use feature ':5.10'; -our @EXPORT = qw/valuecolor addCommand parseCommand/; +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,39 +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 =~ /^(\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; - } + 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 intersect { - my ($a, $b) = @_; - my %union; - foreach my $e (@{$a}) { $union{$e} = 1 } + return 0 unless $disp->has_command($command,$channel); - my %isect; - foreach my $e (@{$b}) { - $isect{$e} = 1 if ( exists $union{$e} ) + my $reply_string; + given ($p){ + when ('!'){ + $reply_string = "privmsg $nick"; + } + when ('~'){ + $reply_string = "privmsg $channel"; + } + default { + $reply_string = "notice $nick"; + } } - return keys %isect; + + $address =~ s/.*@(.*)/$1/; + my $c = NDIRC::Context->new({ + host => $address, + nick => $nick, + channel => $channel, + disp => $disp, + model => $model, + server => $server, + reply_string => $reply_string, + }); + + return $disp->run_command($c,$command,$args); } 1;