From 227e9bfcf736a4a413d68b9f83a25636c13d8e0b Mon Sep 17 00:00:00 2001 From: Michael Andreen Date: Sun, 10 May 2009 00:25:01 +0200 Subject: [PATCH] Converted the .scanreqs command --- Commands/Scans.pm | 44 ++++++++++++++++++++++++++++++++++++++++++++ Scans.pm | 43 ------------------------------------------- database/roles.sql | 5 +++++ 3 files changed, 49 insertions(+), 43 deletions(-) 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; diff --git a/Scans.pm b/Scans.pm index b2621e8..2b33361 100644 --- a/Scans.pm +++ b/Scans.pm @@ -84,49 +84,6 @@ sub sendScan { } } - -our %scantypes; -{ - my $i = 1; - %scantypes = map {$_ => $i++} @scantypes; -} - -sub scanReqs { - my ($msg, $command) = @_; - - if (scanner()){ - - my @notype; - if ($msg && $msg =~ /-([pdunja]+)/){ - for (split //, $1){ - push @notype, $scantypes[$scanid{$_}-1]; - } - } - - my $reqs = $ND::DBH->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 .= "$ND::B$req->{id}$ND::O http://game.planetarion.com/waves.pl?id=$scantypes{$req->{type}}&x=$req->{x}&y=$req->{y}&z=$req->{z} " - } - - $text = 'No unhandled requests.' unless $text; - $ND::server->command("notice $ND::nick $text"); - } -} - sub getScan { my ($msg, $command) = @_; diff --git a/database/roles.sql b/database/roles.sql index 2a2e1e0..6d21757 100644 --- a/database/roles.sql +++ b/database/roles.sql @@ -3,23 +3,28 @@ INSERT INTO roles VALUES('irc_p_intel'); INSERT INTO roles VALUES('irc_masterop'); INSERT INTO roles VALUES('irc_masterinvite'); INSERT INTO roles VALUES('irc_gs'); +INSERT INTO roles VALUES('irc_scanreqs'); INSERT INTO group_roles (gid,role) VALUES(1,'irc_p_nick'); INSERT INTO group_roles (gid,role) VALUES(1,'irc_p_intel'); INSERT INTO group_roles (gid,role) VALUES(1,'irc_masterop'); INSERT INTO group_roles (gid,role) VALUES(1,'irc_masterinvite'); +INSERT INTO group_roles (gid,role) VALUES(1,'irc_scanreqs'); INSERT INTO group_roles (gid,role) VALUES(2,'irc_gs'); INSERT INTO group_roles (gid,role) VALUES(3,'irc_p_nick'); INSERT INTO group_roles (gid,role) VALUES(3,'irc_masterop'); INSERT INTO group_roles (gid,role) VALUES(3,'irc_masterinvite'); +INSERT INTO group_roles (gid,role) VALUES(3,'irc_scanreqs'); INSERT INTO group_roles (gid,role) VALUES(5,'irc_p_nick'); INSERT INTO group_roles (gid,role) VALUES(5,'irc_p_intel'); INSERT INTO group_roles (gid,role) VALUES(6,'irc_p_intel'); +INSERT INTO group_roles (gid,role) VALUES(8,'irc_scanreqs'); + INSERT INTO group_roles (gid,role) VALUES(18,'irc_p_nick'); INSERT INTO group_roles (gid,role) VALUES(18,'irc_p_intel'); -- 2.39.2