]> ruin.nu Git - NDIRC.git/blobdiff - Commands/Usermgm.pm
getanti command
[NDIRC.git] / Commands / Usermgm.pm
index 02ff82df133a1b9c56a4ddab662d503545586479..88a222ebfa9e87ff9243e63ba62ca1359cab90ba 100644 (file)
@@ -423,7 +423,7 @@ my $points = class extends NDIRC::Command {
        method execute ($c,$msg) {
                my ($nick,$points) = $msg =~ /^(\S+)(?: (-?(:?\d+|\d*\.\d+)))?$/ or die 'ARGS';
 
-               return unless $self->check($c,$nick);
+               return unless $self->check($c,$nick,$points);
 
                $points //= 1;
 
@@ -449,7 +449,7 @@ my $points = class extends NDIRC::Command {
                }
                $f->finish;
        }
-       method check ($c,$nick) {
+       method check ($c,$nick,$points) {
                return 1;
        }
 };
@@ -460,7 +460,7 @@ command a => {
        acl => q(irc_a)
 }, class {
        extends $points->name;
-       method check ($c,$nick) {
+       method check ($c,$nick,$points) {
                my ($fleets) = $c->model->selectrow_array(q{
 SELECT count(*) FROM raids r
        JOIN raid_targets rt ON r.id = rt.raid
@@ -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;