]> ruin.nu Git - NDIRC.git/commitdiff
getanti command
authorMichael Andreen <harv@ruin.nu>
Sat, 28 Nov 2009 11:52:51 +0000 (12:52 +0100)
committerMichael Andreen <harv@ruin.nu>
Wed, 6 Jan 2010 16:02:46 +0000 (17:02 +0100)
Commands/Usermgm.pm

index eed0d19718b2774bfab1f951d054e928a3dd4eeb..88a222ebfa9e87ff9243e63ba62ca1359cab90ba 100644 (file)
@@ -496,4 +496,54 @@ command h => {
        acl => q(irc_h),
 }, $points;
 
+command getanti => {
+       help => q(Usage: .getanti class [eta] | class is the target class, like fi or bs, eta is optional max eta for the ships.),
+       acl => q(irc_getships),
+}, class extends NDIRC::Command {
+       method execute ($c,$msg) {
+               my ($class,$eta) = $msg =~ /^(\S+)(?: (\d+))?$/ or die 'ARGS';
+               my $dbh = $c->model;
+
+               $eta //= 9;
+
+               my @classes = qw/Fi Co Fr De Cr Bs/;
+               for (@classes){
+                       if (lc $class eq lc $_){
+                               $class = $_;
+                               last;
+                       }
+               }
+
+               while ($eta < 9){
+                       pop @classes;
+                       pop @classes;
+                       $eta++;
+               }
+
+               my $f = $dbh->prepare(q{
+SELECT username, ship, amount, CASE WHEN $1 = t1 THEN 't1' ELSE 't2' END AS t
+FROM available_ships a
+       JOIN ship_stats s ON (a.ship = s.name)
+WHERE uid IN (SELECT uid FROM groupmembers WHERE gid = 'M')
+       AND class = ANY($2)
+       AND $1 IN (t1,t2)
+ORDER BY amount*(metal+crystal+eonium)*CASE WHEN $1 = t1 THEN 1.0 ELSE 0.6 END DESC
+                       });
+               $f->execute($class,\@classes);
+               my $text;
+               my $i = 0;
+               my $total = 0;
+               while (my $user = $f->fetchrow_hashref){
+                       $text .= "($user->{username}: $user->{ship} $user->{amount} $user->{t}) ";
+                       $i++;
+                       $total += $user->{amount};
+               }
+               if ($text){
+                       $c->reply("<b>$i</b> fleets with anti-<b>$class</b>: $text");
+               }else{
+                       $c->reply("Couldn't find any user with anti-<b>$class</b>");
+               }
+       }
+};
+
 1;