# Created: 20000624
#
-if (&IsParam("useStrict")) { use strict; }
+# use strict; # TODO
+
use vars qw($AUTOLOAD);
###
### MODULES.
%myModules = (
+ "bzflag" => "BZFlag.pl",
"countdown" => "Countdown.pl",
"debian" => "Debian.pl",
"debianExtra" => "DebianExtra.pl",
"dict" => "Dict.pl",
"dumpvars" => "DumpVars.pl",
+ "symdump" => "DumpVars2.pl",
+ "exchange" => "Exchange.pl",
"factoids" => "Factoids.pl",
"freshmeat" => "Freshmeat.pl",
"kernel" => "Kernel.pl",
- "ircdcc" => "UserDCC.pl",
"perlMath" => "Math.pl",
"news" => "News.pl",
+ "plug" => "Plug.pl",
"quote" => "Quote.pl",
"rootwarn" => "RootWarn.pl",
"search" => "Search.pl",
"topic" => "Topic.pl",
"units" => "Units.pl",
"uptime" => "Uptime.pl",
+ "ircdcc" => "UserDCC.pl",
"userinfo" => "UserInfo.pl",
+ "weather" => "Weather.pl",
"wwwsearch" => "W3Search.pl",
"whatis" => "WhatIs.pl",
"wingate" => "Wingate.pl",
+ "babelfish" => "babel.pl",
"insult" => "insult.pl",
"nickometer" => "nickometer.pl",
- "babelfish" => "babel.pl",
+ "zfi" => "zfi.pl",
+ "zippy" => "Zippy.pl",
+ "zsi" => "zsi.pl",
+ "botmail" => "botmail.pl",
);
### THIS IS NOT LOADED ON RELOAD :(
+my @myModulesLoadNow;
+my @myModulesReloadNot;
BEGIN {
- @myModulesLoadNow = ('topic', 'uptime', 'news', 'rootWarn');
+ @myModulesLoadNow = ('topic', 'uptime', 'news', 'rootWarn', 'symdump', 'botmail');
@myModulesReloadNot = ('IRC/Irc.pl','IRC/Schedulers.pl');
}
sub loadCoreModules {
my @mods = &getPerlFiles($bot_src_dir);
- &status("Loading ".scalar(@mods)." CORE modules...");
+ &status("Loading CORE modules...");
foreach (sort @mods) {
my $mod = "$bot_src_dir/$_";
}
sub loadDBModules {
- &status("Loading DB modules...");
-
- $moduleAge{"$bot_src_dir/modules.pl"} = time();
-
- if ($param{'DBType'} =~ /^mysql$/i) {
- eval "use DBI";
- if ($@) {
- &ERROR("libdbd-mysql-perl is not installed!");
- exit 1;
- }
- &showProc(" (DBI // mysql)");
-
- &status(" using MySQL support.");
- require "$bot_src_dir/db_mysql.pl";
- $moduleAge{"$bot_src_dir/db_mysql.pl"} = time();
+ my $f;
+ # todo: use function to load module.
- } elsif ($param{'DBType'} =~ /^pgsql$/i) {
-# eval "use Pg";
+ if ($param{'DBType'} =~ /^(mysql|SQLite|pgsql)$/i) {
eval "use DBI";
if ($@) {
- &ERROR("libpgperl is not installed!");
+ &ERROR("No support for DBI::" . $param{'DBType'} . ", exiting!");
exit 1;
}
- &showProc(" (pgsql)");
-
- &status(" using pgsql support.");
- require "$bot_src_dir/db_pgsql.pl";
-
- } elsif ($param{'DBType'} =~ /^dbm$/i) {
-
- &status(" using Berkeley DBM 1.85/2.0 support.");
- &ERROR("dbm support is broken... if you want it, fix it yourself!");
- &shutdown();
- exit 1;
+ &status("Loading " . $param{'DBType'} . " support.");
+ $f = "$bot_src_dir/dbi.pl";
+ require $f;
+ $moduleAge{$f} = (stat $f)[9];
-# require "$bot_src_dir/db_dbm.pl";
+ &showProc(" (DBI::" . $param{'DBType'} . ")");
} else {
-
- &status("DB support DISABLED.");
+ &WARN("DB support DISABLED.");
return;
}
}
}
sub loadIRCModules {
- if (&whatInterface() =~ /IRC/) {
+ my ($interface) = &whatInterface();
+ if ($interface =~ /IRC/) {
&status("Loading IRC modules...");
eval "use Net::IRC";
exit 1;
}
&showProc(" (Net::IRC)");
-
} else {
&status("IRC support DISABLED.");
- return;
+ # disabling forking. Why?
+ #$param{forking} = 0;
+ #$param{noSHM} = 1;
}
- foreach ( &getPerlFiles("$bot_src_dir/IRC") ) {
- my $mod = "$bot_src_dir/IRC/$_";
+ foreach ( &getPerlFiles("$bot_src_dir/$interface") ) {
+ my $mod = "$bot_src_dir/$interface/$_";
+ # hrm... use another config option besides DEBUG to display
+ # change in memory usage.
+ &status("Loading Modules \"$mod\"") if (!&IsParam("DEBUG"));
eval "require \"$mod\"";
if ($@) {
- &ERROR("lIRCM => $@");
+ &ERROR("require \"$mod\" => $@");
&shutdown();
exit 1;
}
}
if (grep /$mod/, @myModulesReloadNot) {
- &DEBUG("rM: SHOULD NOT RELOAD $mod!!!");
+ &DEBUG("rM: should not reload $mod");
return;
}
return if ($age == $moduleAge{$file});
if ($age < $moduleAge{$file}) {
- &WARN("rM: we're not gonna downgrade the file. use 'touch'.");
+ &WARN("rM: we're not gonna downgrade '$file'; use touch.");
+ &DEBUG("age => $age");
+ &DEBUG("mA{$file} => $moduleAge{$file}");
return;
}
### OPTIONAL MODULES.
###
-local %perlModulesLoaded = ();
-local %perlModulesMissing = ();
+my %perlModulesLoaded = ();
+my %perlModulesMissing = ();
sub loadPerlModule {
return 0 if (exists $perlModulesMissing{$_[0]});
return 0;
}
- my ($modulebase, $modulefile);
+ my ($modulename, $modulebase);
if (exists $myModules{$tmp}) {
($modulename, $modulebase) = ($tmp, $myModules{$tmp});
} else {
$modulename = $tmp;
}
}
- $modulefile = "$bot_src_dir/Modules/$modulebase";
+ my $modulefile = "$bot_src_dir/Modules/$modulebase";
# call reloadModule() which checks age of file and reload.
if (grep /\/$modulebase$/, keys %INC) {
&shutdown() if (defined $shm and defined $dbh);
} else { # child.
&DEBUG("b4 delfork 1");
- &delForked($modulebase);
+ &delForked($modulename);
}
exit 1;
&ERROR("cannot load my module: $modulebase");
if ($bot_pid != $$) { # child.
&DEBUG("b4 delfork 2");
- &delForked($modulebase);
+ &delForked($modulename);
exit 1;
}
&showProc(" (Time::HiRes)");
sub AUTOLOAD {
+ if (!defined $AUTOLOAD and defined $::AUTOLOAD) {
+ &DEBUG("AUTOLOAD: hrm.. ::AUTOLOAD defined!");
+ }
+ return unless (defined $AUTOLOAD);
return if ($AUTOLOAD =~ /__/); # internal.
my $str = join(', ', @_);
- &ERROR("UNKNOWN FUNCTION CALLED: $AUTOLOAD ($str)");
+ my ($package, $filename, $line) = caller;
+ &ERROR("UNKNOWN FUNCTION CALLED: $AUTOLOAD ($str) $filename line $line");
$AUTOLOAD =~ s/^(\S+):://g;
my($dir) = @_;
if (!opendir(DIR, $dir)) {
- &ERROR("cannot open source directory $dir: $!");
+ &ERROR("Cannot open source directory ($dir): $!");
exit 1;
}