Better way to kill CamlinternalOO
[xavierbot.git] / xavierbot.pl.in
index 8f01f0b..f1a4cc8 100755 (executable)
@@ -1,11 +1,12 @@
-#!/usr/bin/perl -wT
+#!/usr/bin/perl -w
 # xavierbot : an OCaml interpreter IRC bot.
 # By Richard W.M. Jones <rich@annexia.org>.
 # This code is in the Public Domain.
-# $Id: xavierbot.pl.in,v 1.7 2007/06/29 21:44:02 rjones Exp $
+# $Id: xavierbot.pl.in,v 1.9 2008/01/23 15:44:46 rjones Exp $
 
 use strict;
 use POE qw(Component::IRC Wheel::Run);
+use Getopt::Long;
 
 #----------------------------------------------------------------------
 # Start of configuration.
@@ -13,13 +14,19 @@ use POE qw(Component::IRC Wheel::Run);
 my $nick = "xavierbot";
 my $ircname = "Xavierbot";             # Printable name.
 my $server = "chat.freenode.net";
-#my $server = "devserv.devel.redhat.com";
 my $port = 6667;
 my $channel = "#ocaml";
 
 # End of configuration.
 #----------------------------------------------------------------------
-# Current state.
+
+# Command line args can override configuration.
+GetOptions ("nick=s" => \$nick,
+           "ircname=s" => \$ircname,
+           "server=s" => \$server,
+           "port=i" => \$port,
+           "channel=s" => \$channel)
+    or die "$0: GetOptions: $!";
 
 # Simple flood protection.  This counts number of lines received from
 # the toplevel, and is reset when we send a line.  If this exceeds
@@ -105,6 +112,11 @@ sub irc_public
        $kernel->post ($sender => privmsg => $channel => $_)
            foreach (@usage);
     }
+    elsif ($what =~ /^\s*xavierbot\b.*\brestart\b/) {
+       $sleeping = 0;
+       print STDOUT "got instruction to restart ...\n";
+       restart_toplevel ($heap->{ocaml});
+    }
     elsif (!$sleeping) {
        if (my ($stmt) = $what =~ m/^\s*([^\#].*;;)\s*$/) {
            $heap->{ocaml}->put ("$stmt\n");
@@ -121,11 +133,6 @@ sub irc_public
            $kernel->post ($sender => privmsg => $channel =>
                           "xavierbot wakes up");
        }
-       elsif ($what =~ /^\s*xavierbot\b.*\brestart\b/) {
-           $sleeping = 0;
-           print STDOUT "got instruction to restart ...\n";
-           restart_toplevel ($heap->{ocaml});
-       }
     }
     undef;
 }