X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;ds=sidebyside;f=Commands%2FScans.pm;h=134629bb49fbdf69592df7824451bcd21e75e799;hb=227e9bfcf736a4a413d68b9f83a25636c13d8e0b;hp=2cb0c3c12c3db8ab85e55020501cbc1bb5ccaaf5;hpb=491db8f0abea3c779a1ecdc64f22ed233bc9546b;p=NDIRC.git diff --git a/Commands/Scans.pm b/Commands/Scans.pm index 2cb0c3c..134629b 100644 --- a/Commands/Scans.pm +++ b/Commands/Scans.pm @@ -91,4 +91,48 @@ VALUES((SELECT uid FROM users WHERE hostmask ILIKE $1),$2,$3,$4) RETURNING (id) } } +my %scantypes; +{ + my $i = 1; + %scantypes = map {$_ => $i++} @scantypes; +} + +sub scanreqs + : Help(syntax: .scanreqs [-pdunja] | Lists scan requests that haven't been handled. The argument can be used to omit types you don't have, like .scanreqs -ja to list all requests except jumpgates and advanced unit scans.) + : ACL(irc_scanreqs) +{ + my ($self, $c, $msg) = @_; + + my @notype; + if ($msg =~ /^-([pdunja]+)$/){ + for (split //, $1){ + push @notype, $scantypes[$scanid{$_}-1]; + } + }elsif($msg){ + die 'ARGS'; + } + + my $reqs = $c->model->prepare(q{ +SELECT min(sr.id) AS id, x,y,z,type +FROM scan_requests sr + JOIN current_planet_stats p ON p.id = sr.planet +WHERE sr.time > NOW() - '30 min'::INTERVAL + AND NOT EXISTS (SELECT scan_id FROM scans + WHERE planet = sr.planet + AND type = sr.type + AND tick >= sr.tick + ) + AND type <> ALL($1) +GROUP BY x,y,z,type +ORDER BY id + }); + $reqs->execute(\@notype); + my $text = ''; + while (my $req = $reqs->fetchrow_hashref){ + $text .= "$req->{id} http://game.planetarion.com/waves.pl?id=$scantypes{$req->{type}}&x=$req->{x}&y=$req->{y}&z=$req->{z} " + } + + $c->reply($text || 'No unhandled requests.'); +} + 1;