]> ruin.nu Git - NDIRC.git/blobdiff - Commands/Def.pm
Converted .settype and .settypeall
[NDIRC.git] / Commands / Def.pm
index 74d0aa8dd85de111414620e2510cbb2d2483e983..e8067dd7a50b27ad147526a8bdf66acf51688914 100644 (file)
@@ -23,6 +23,8 @@ use strict;
 use warnings;
 use feature ':5.10';
 
+use CGI;
+
 use Moose;
 use MooseX::MethodAttributes;
 
@@ -79,5 +81,74 @@ ORDER BY c.landing_tick;
                .$c->nick." TO RESPOND");
 }
 
+sub settype
+       : Help(Usage: .settype incId type | or: .settyp callId X:Y:Z type | or: .settypeall callId type)
+       : Type(def)
+       : ACL(irc_settype)
+       : Alias(settypeall)
+{
+       my ($self,$c,$msg) = @_;
+       my $dbh = $c->model;
+
+       my $query = q{
+SELECT i.id,call,shiptype, coords(x,y,z),c.landing_tick - tick() AS eta
+FROM incomings i
+       JOIN current_planet_stats p ON i.sender = p.id
+       JOIN calls c ON i.call = c.id
+       };
+       my $fleets;
+       my $type;
+       my $call;
+
+       if ($self->name eq 'settypeall'){
+               ($call,$type) = $msg =~ /^(\d+) (.*)$/ or die 'ARGS';
+
+               $fleets = $dbh->prepare($query . q{
+WHERE i.call = ?
+               });
+               $fleets->execute($call);
+       }else{
+               my ($id,$x,$y,$z,$t) = $msg =~ /^(\d+) (\d+):(\d+):(\d+) (.*)$/;
+               if (defined $id){
+                       $fleets = $dbh->prepare($query . q{
+WHERE i.call = ? AND p.id = planetid(?,?,?,tick())
+                       });
+                       $fleets->execute($id,$x,$y,$z);
+               }else{
+                       ($id,$t) = $msg =~ /^(\d+) (.*)$/ or die 'ARGS';
+                       $fleets = $dbh->prepare($query . q{
+WHERE i.id = ?
+                       });
+                       $fleets->execute($id);
+               }
+               $type = $t;
+       }
+
+       $type = CGI::escapeHTML($type);
+       $dbh->begin_work;
+       my $deflog = '';
+       my $settype = $dbh->prepare(q{UPDATE incomings SET shiptype = ? WHERE id = ?});
+       while (my $inc = $fleets->fetchrow_hashref){
+               $call //= $inc->{call};
+               if ($inc->{eta} < 0){
+                       $c->reply("This call is old. Did you use the call id instead of inc id by"
+                               ." accident? You can use .settypeall callid to set the type on all incs"
+                               ." in a call. Or use webbie if you really want to update this old call.");
+                       $dbh->rollback;
+                       return;
+               }
+               $settype->execute($type,$inc->{id});
+               $deflog .= "Set fleet: [B]$inc->{id} [/B] to: [B]$type [/B]\n";
+               $c->reply("Set fleet $inc->{id} from $inc->{coords} on call $call to $type (previously $inc->{shiptype})");
+       }
+       if ($fleets->rows == 0){
+               $c->reply("No matching fleets");
+               $dbh->rollback;
+       }else{
+               $c->def_log($call,$deflog);
+               $dbh->commit;
+       }
+}
+
 1;