X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Fmodules.pl;h=7de063a38d22f412a991e8926d387c041171cb03;hb=f7cae48a17d6decd0a9bd997188271daa0a885b1;hp=0861982c778e89fe1a43388ea6d27d340947df56;hpb=8653377807cbd80bd24c5cc7741d0e42b82a526c;p=infobot.git diff --git a/src/modules.pl b/src/modules.pl index 0861982..7de063a 100644 --- a/src/modules.pl +++ b/src/modules.pl @@ -5,7 +5,8 @@ # Created: 20000624 # -#use strict; +# use strict; # TODO + use vars qw($AUTOLOAD); ### @@ -28,8 +29,8 @@ if ($@) { "dict" => "Dict.pl", "dumpvars" => "DumpVars.pl", "symdump" => "DumpVars2.pl", + "exchange" => "Exchange.pl", "factoids" => "Factoids.pl", - "freshmeat" => "Freshmeat.pl", "kernel" => "Kernel.pl", "perlMath" => "Math.pl", "news" => "News.pl", @@ -43,6 +44,7 @@ if ($@) { "uptime" => "Uptime.pl", "ircdcc" => "UserDCC.pl", "userinfo" => "UserInfo.pl", + "weather" => "Weather.pl", "wwwsearch" => "W3Search.pl", "whatis" => "WhatIs.pl", "wingate" => "Wingate.pl", @@ -50,20 +52,23 @@ if ($@) { "insult" => "insult.pl", "nickometer" => "nickometer.pl", "zfi" => "zfi.pl", + "zippy" => "Zippy.pl", "zsi" => "zsi.pl", + "botmail" => "botmail.pl", + "httpdtype" => "HTTPDtype.pl", ); ### THIS IS NOT LOADED ON RELOAD :( my @myModulesLoadNow; my @myModulesReloadNot; BEGIN { - @myModulesLoadNow = ('topic', 'uptime', 'news', 'rootWarn', 'symdump'); + @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/$_"; @@ -81,38 +86,23 @@ sub loadCoreModules { } sub loadDBModules { - my $f = "$bot_src_dir/modules.pl"; - $moduleAge{$f} = (stat $f)[9]; + my $f; + # todo: use function to load module. - if ($param{'DBType'} =~ /^mysql$/i) { - eval "use DBI"; - if ($@) { - &ERROR("libdbd-mysql-perl is not installed!"); - exit 1; - } - &status("Loading MySQL support."); - $f = "$bot_src_dir/db_mysql.pl"; - require $f; - $moduleAge{$f} = (stat $f)[9]; - &showProc(" (DBI // mysql)"); - } 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; } - &status("Loading pgsql support."); - require "$bot_src_dir/db_pgsql.pl"; - &showProc(" (pgsql)"); - } elsif ($param{'DBType'} =~ /^dbm$/i) { - &status("Loading Berkeley DBM support."); - $f = "$bot_src_dir/db_dbm.pl"; + &status("Loading " . $param{'DBType'} . " support."); + $f = "$bot_src_dir/dbi.pl"; require $f; $moduleAge{$f} = (stat $f)[9]; - &showProc(" $bot_src_dir/db_dbm.pl"); + + &showProc(" (DBI::" . $param{'DBType'} . ")"); } else { - &status("DB support DISABLED."); + &WARN("DB support DISABLED."); return; } } @@ -152,9 +142,9 @@ sub loadIRCModules { &showProc(" (Net::IRC)"); } else { &status("IRC support DISABLED."); - # disabling forking. - $param{forking} = 0; - $param{noSHM} = 1; + # disabling forking. Why? + #$param{forking} = 0; + #$param{noSHM} = 1; } foreach ( &getPerlFiles("$bot_src_dir/$interface") ) { @@ -168,7 +158,7 @@ sub loadIRCModules { &ERROR("require \"$mod\" => $@"); &shutdown(); exit 1; - } + } $moduleAge{$mod} = (stat $mod)[9]; &showProc(" ($_)") if (&IsParam("DEBUG")); @@ -208,40 +198,44 @@ sub loadMyModulesNow { ### rename to moduleReloadAll? sub reloadAllModules { + my $retval = ""; + &VERB("Module: reloading all.",2); # obscure usage of map and regex :) foreach (map { s/.*?\/?src/src/; $_ } keys %moduleAge) { - &reloadModule($_); + $retval .= &reloadModule($_); } &VERB("Module: reloading done.",2); + return $retval; } ### rename to modulesReload? sub reloadModule { my ($mod) = @_; my $file = (grep /\/$mod/, keys %INC)[0]; + my $retval = ""; # don't reload if it's not our module. if ($mod =~ /::/ or $mod !~ /pl$/) { &VERB("Not reloading $mod.",3); - return; + return $retval; } if (!defined $file) { &WARN("rM: Cannot reload $mod since it was not loaded anyway."); - return; + return $retval; } if (! -f $file) { &ERROR("rM: file '$file' does not exist?"); - return; + return $retval; } if (grep /$mod/, @myModulesReloadNot) { &DEBUG("rM: should not reload $mod"); - return; + return $retval; } my $age = (stat $file)[9]; @@ -249,13 +243,13 @@ sub reloadModule { if (!exists $moduleAge{$file}) { &DEBUG("Looks like $file was not loaded; fixing."); } else { - return if ($age == $moduleAge{$file}); + return $retval if ($age == $moduleAge{$file}); if ($age < $moduleAge{$file}) { &WARN("rM: we're not gonna downgrade '$file'; use touch."); &DEBUG("age => $age"); &DEBUG("mA{$file} => $moduleAge{$file}"); - return; + return $retval; } my $dc = &Time2String($age - $moduleAge{$file}); @@ -270,13 +264,15 @@ sub reloadModule { delete $INC{$file}; eval "require \"$file\""; # require or use? if (@$) { - &DEBUG("rM: failure: @$"); + &DEBUG("rM: failure: @$ "); } else { my $basename = $file; $basename =~ s/^.*\///; &status("Module: reloaded $basename"); + $retval = " $basename"; $moduleAge{$file} = $age; } + return $retval; } ### @@ -298,7 +294,7 @@ sub loadPerlModule { return 0; } else { $perlModulesLoaded{$_[0]} = 1; - &status("Module: Loaded $_[0] ..."); + &status("Loaded $_[0]"); &showProc(" ($_[0])"); return 1; } @@ -308,7 +304,7 @@ sub loadMyModule { my ($tmp) = @_; if (!defined $tmp) { &WARN("loadMyModule: module is NULL."); - return 0; + return 0; } my ($modulename, $modulebase); @@ -335,7 +331,7 @@ sub loadMyModule { &shutdown() if (defined $shm and defined $dbh); } else { # child. &DEBUG("b4 delfork 1"); - &delForked($modulebase); + &delForked($modulename); } exit 1; @@ -346,7 +342,7 @@ sub loadMyModule { &ERROR("cannot load my module: $modulebase"); if ($bot_pid != $$) { # child. &DEBUG("b4 delfork 2"); - &delForked($modulebase); + &delForked($modulename); exit 1; } @@ -354,7 +350,7 @@ sub loadMyModule { } else { $moduleAge{$modulefile} = (stat $modulefile)[9]; - &status("myModule: Loaded $modulebase ..."); + &status("Loaded $modulebase"); &showProc(" ($modulebase)"); return 1; } @@ -392,8 +388,8 @@ sub getPerlFiles { my($dir) = @_; if (!opendir(DIR, $dir)) { - &ERROR("Cannot open source directory ($dir): $!"); - exit 1; + &ERROR("Cannot open source directory ($dir): $!"); + exit 1; } my @mods;