]> ruin.nu Git - NDIRC.git/blobdiff - Usermgm.pm
Converted the .gs command
[NDIRC.git] / Usermgm.pm
index c579a3cf336282f87fa0952aefa220daf126fe6b..6771d65cf4dbd00a20912cfdaf5283b76f03f743 100644 (file)
@@ -133,25 +133,31 @@ WHERE flag = ?;
 sub laston {
        my ($msg, $command) = @_;
 
-       my ($flag,$min);
-       my $f;
        if (officer() || ia()){
-               if(defined $msg && $msg =~ /^(\w)(?: (\d+))?$/){
+               my ($flag,$min);
+               my $f;
+               if(defined $msg && $msg =~ /^(\w)(?: (\d+)(?:\|(\d+)\|(\d+))?)?$/){
                        $flag = $1;
                        $min = $2;
+                       my $forum = $3;
+                       my $claim = $4;
                        $min = 0 unless defined $min;
-                       $f = $ND::DBH->prepare(q{SELECT username
-                               ,date_part('day',now() - laston)::int AS last
-                               ,COALESCE(date_part('day',now() - (SELECT max(time) FROM forum_thread_visits WHERE uid = u.uid))::text,'?')
-                                       AS lastforum
-                               ,COALESCE(date_part('day',now() - (SELECT max(timestamp) FROM raid_claims WHERE uid = u.uid))::text,'?') AS lastclaim
-                               FROM users u
-                                       NATURAL JOIN groupmembers
-                                       NATURAL JOIN groups
-                               WHERE flag = $1 AND COALESCE(date_part('day',now() - laston) >= $2,TRUE)
-                               ORDER BY laston
+                       $f = $ND::DBH->prepare(q{SELECT username, last
+                               ,COALESCE(lastforum::text,'?') AS lastforum
+                               ,COALESCE(lastclaim::text,'?') AS lastclaim
+                               FROM (SELECT username
+                                       ,date_part('day',now() - laston)::int AS last
+                                       ,date_part('day',now() - (SELECT max(time) FROM forum_thread_visits WHERE uid = u.uid)) AS lastforum
+                                       ,date_part('day',now() - (SELECT max(timestamp) FROM raid_claims WHERE uid = u.uid)) AS lastclaim
+                                       FROM users u
+                                               NATURAL JOIN groupmembers
+                                               NATURAL JOIN groups
+                                       WHERE flag = $1
+                               ) a
+                               WHERE COALESCE(last >= $2,TRUE) AND COALESCE(lastforum >= $3,TRUE) AND COALESCE(lastclaim >= $4,TRUE)
+                               ORDER BY last DESC, lastforum DESC, lastclaim DESC
                                });
-                       $f->execute($flag,$min);
+                       $f->execute($flag,$min,$forum,$claim);
                }elsif(defined $msg && $msg =~ /^(\S+)$/){
                        $f = $ND::DBH->prepare(q{SELECT username
                                ,date_part('day',now() - laston)::int AS last
@@ -191,13 +197,21 @@ sub getShips {
        if (officer() || dc()){
                my $f = $ND::DBH->prepare(qq{SELECT username,SUM(fs.amount) AS amount
                        FROM users u 
-                               JOIN (SELECT DISTINCT ON (sender) sender AS planet,id FROM fleets
+                               JOIN (SELECT DISTINCT ON (planet) planet,fid FROM fleets
                                        WHERE mission = 'Full fleet' AND name <> 'Unit'
-                                       ORDER BY sender,tick DESC,id DESC) f  USING (planet) 
-                               JOIN fleet_ships fs ON f.id = fs.id
-                       WHERE ship ILIKE ?
+                                       ORDER BY planet,tick DESC,fid DESC) f  USING (planet) 
+                               JOIN fleet_ships fs USING (fid)
+                       WHERE ship ILIKE ? AND uid IN (SELECT uid FROM groupmembers WHERE gid = 2)
                        GROUP BY username ORDER BY amount DESC
-               });
+                       });
+               if ($command eq 'shipshome'){
+                       $f = $ND::DBH->prepare(q{
+SELECT username,SUM(amount) AS amount
+FROM available_ships
+WHERE ship ILIKE ? AND uid IN (SELECT uid FROM groupmembers WHERE gid = 2)
+GROUP BY username ORDER BY amount DESC
+                       });
+               }
                $f->execute($ship);
                my $text;
                my $i = 0;
@@ -226,14 +240,14 @@ sub getFleet {
        if (officer() || dc()){
                my $f = $ND::DBH->prepare(q{SELECT fs.ship, fs.amount, username
                        FROM fleet_ships fs
-                               JOIN (SELECT id,username
+                               JOIN (SELECT fid,username
                                        FROM fleets f
-                                               JOIN users u ON u.planet = f.sender
+                                               JOIN users u USING (planet)
                                        WHERE mission = 'Full fleet' AND name <> 'Unit'
                                                AND username ILIKE $1
-                                       ORDER BY planet,tick DESC,id DESC
+                                       ORDER BY planet,tick DESC,fid DESC
                                        LIMIT 1
-                               ) f  USING (id)
+                               ) f  USING (fid)
                        ORDER BY num
                });
                $f->execute($nick);
@@ -269,7 +283,7 @@ sub addPoints {
                || ($t eq "a" && bc())
                || ($t eq "h" && officer())
                || ($t eq "s" && scanner())){
-               $points = 1 unless (defined $points);
+               $points = 1 unless $points;
                if ($points*$points > 400){
                        $ND::server->command("msg $ND::target Values between -20 and 20 please");
                        return;