1
0
Fork 0
mirror of https://github.com/perlbot/perlbuut synced 2025-06-07 16:45:40 -04:00
perlbuut/bin/bb3
2009-12-05 00:02:04 -05:00

62 lines
1.4 KiB
Perl
Executable file

#!/usr/bin/perl
use POSIX qw/setsid/;
use Getopt::Std;
my %OPTS;
# Localize the @ARGV so we preserve it
# since getopts destructively modifies it
# we need it to be intact so we can restart
# ourselves later.
BEGIN { local @ARGV=@ARGV; getopts("dm:M:c:p:", \%OPTS) };
# d daemon
# m only this role(s)
# M Every role but this Not Implemented
# c conf file
# p plugin conf file
# Guess we're being activated inside bin/, so go up a directory.
BEGIN {
if( not -e 'lib' and not -e 'etc' and -e 'bb3' ) {
chdir "..";
}
elsif( my @par_dirs = grep /tmp.*par.*cache-/, @INC ) {
# We're running under PAR!
chdir( ( grep /inc$/, @par_dirs ) [0] ); #Find the one that ends in inc/
mkdir "var"; # We need one of these..
}
elsif( $0 =~ '/' and $0 ne 'bin/bb3' ) {
my $path = $0;
$path =~ s{bin/bb3$}{};
chdir $path;
}
}
use lib 'lib';
use Bot::BB3;
use Data::Dumper;
Bot::BB3->new( {
main_conf_file => $OPTS{c} || 'etc/bb3.conf',
plugin_conf_file => $OPTS{p} || 'etc/plugins.conf',
only_roles => $OPTS{m},
} );
# Only daemonize if we're asked to.
if( $OPTS{d} ) {
setsid();
fork and exit;
open STDOUT, ">var/bb3.stdout" or die "Tried to reopen STDOUT to bb3.stdout: $!";
open STDERR, ">var/bb3.stderr" or die "Tried to reopen STDERR to bb3.stdout: $!";
close STDIN;
open my $fh, ">var/bb3.pid" or die "Failed to open pid file: $!";
print $fh $$;
close $fh;
}
POE::Kernel->run;
exit;