# dynamic scalar. MUST BE REDUCED IN SIZE!!!
### TODO: reorder.
use vars qw(
+ $bot_misc_dir $bot_pid $bot_base_dir $bot_src_dir
+ $bot_data_dir $bot_config_dir $bot_state_dir $bot_run_dir
$answer $correction_plausible $talkchannel $bot_release
$statcount $memusage $user $memusageOld $bot_version $dbh
- $shm $host $msg $bot_misc_dir $bot_pid $bot_base_dir $noreply
- $bot_src_dir $conn $irc $learnok $nick $ident $no_syscall
+ $shm $host $msg $noreply $conn $irc $learnok $nick $ident
$force_public_reply $addrchar $userHandle $addressedother
$floodwho $chan $msgtime $server $firsttime $wingaterun
- $flag_quit $msgType
+ $flag_quit $msgType $no_syscall
$utime_userfile $wtime_userfile $ucount_userfile
$utime_chanfile $wtime_chanfile $ucount_chanfile
$pubsize $pubcount $pubtime
$msgsize $msgcount $msgtime
$notsize $notcount $nottime
+ $running
);
# dynamic hash.
$last{buflen} = 0;
$last{say} = "";
$last{msg} = "";
-$userHandle = "default";
+$userHandle = "_default";
$wingaterun = time();
$firsttime = 1;
$utime_userfile = 0;
$utime_chanfile = 0;
$wtime_chanfile = 0;
$ucount_chanfile = 0;
+$running = 0;
### more variables...
$msgtime = time();
$msgsize = 0;
&status("--- Start of quit.");
$ident ||= "blootbot"; # lame hack.
- &closeDCC();
&closePID();
&closeStats();
- &seenFlush();
- &quit($param{'quitMsg'}) if (&whatInterface() =~ /IRC/);
+ # shutdown IRC and related components.
+ if (&whatInterface() =~ /IRC/) {
+ &closeDCC();
+ &seenFlush();
+ &quit($param{'quitMsg'});
+ }
&writeUserFile();
&writeChanFile();
- &uptimeWriteFile() if (&ChanConfList("uptime"));
+ &uptimeWriteFile() if (&IsChanConf("uptime"));
&News::writeNews() if (&ChanConfList("news"));
&closeDB();
&closeSHM($shm);
&dumpallvars() if (&IsParam("dumpvarsAtExit"));
+ &symdumpAll() if (&IsParam("symdumpAtExit"));
&closeLog();
&closeSQLDebug() if (&IsParam("SQLDebug"));
return 0;
}
+ # should we use IsParam() externally where needed or hack it in
+ # here just in case? fix it later.
+ if (&IsParam($param)) {
+ &status("ICC: found '$param' option in main config file.");
+ return 1;
+ }
+
$chan ||= "_default";
my $old = $chan;
my($param,$c) = @_;
if (!defined $param) {
- &WARN("param == NULL.");
+ &WARN("gCC: param == NULL.");
return 0;
}
return $chanconf{"_default"}{$param};
}
-sub showProc {
- my ($prefix) = $_[0] || "";
+sub getChanConfDefault {
+ my($what, $default, $chan) = @_;
- if (!open(IN, "/proc/$$/status")) {
- &ERROR("cannot open '/proc/$$/status'.");
- return;
+ if (exists $param{$what}) {
+ if (!exists $cache{config}{$what}) {
+ &status("conf: backward-compat: found param{$what} ($param{$what}) instead.");
+ $cache{config}{$what} = 1;
+ }
+
+ return $param{$what};
+ }
+ my $val = &getChanConf($what, $chan);
+ return $val if (defined $val);
+
+ $param{$what} = $default;
+ &status("conf: auto-setting param{$what} = $default");
+ $cache{config}{$what} = 1;
+ return $default;
+}
+
+
+#####
+# Usage: &findChanConf($param);
+# About: Retrieve value for 'param' value from any chan.
+# Return: scalar for success, undef for failure.
+sub findChanConf {
+ my($param) = @_;
+
+ if (!defined $param) {
+ &WARN("param == NULL.");
+ return 0;
}
+ my $c;
+ foreach $c (keys %chanconf) {
+ foreach (keys %{ $chanconf{$c} }) {
+ next unless (/^$param$/);
+
+ &DEBUG("chanconf{$c}{$_} ...");
+ return $chanconf{$c}{$_};
+ }
+ }
+
+ return;
+}
+
+sub showProc {
+ my ($prefix) = $_[0] || "";
+
if ($^O eq "linux") {
+ if (!open(IN, "/proc/$$/status")) {
+ &ERROR("cannot open '/proc/$$/status'.");
+ return;
+ }
+
while (<IN>) {
$memusage = $1 if (/^VmSize:\s+(\d+) kB/);
}
} else { # delta < 0.
$delta = -$delta;
# never knew RSS could decrease, probably Size can't?
- $str = "MEM:$prefix decreased by $delta kB. YES YES YES";
+ $str = "MEM:$prefix decreased by $delta kB.";
}
&status($str);
&openLog(); # write, append.
&status("--- Started logging.");
- foreach ("debian") {
- my $dir = "$bot_base_dir/$_/";
- next if ( -d $dir);
- &status("Making dir $_");
- mkdir $dir, 0755;
- }
-
# read.
- &loadLang($bot_misc_dir. "/blootbot.lang");
+ &loadLang($bot_data_dir. "/blootbot.lang");
&loadIRCServers();
&readUserFile();
&readChanFile();
sub setupConfig {
$param{'VERBOSITY'} = 1;
- &loadConfig($bot_misc_dir."/blootbot.config");
+ &loadConfig($bot_config_dir."/blootbot.config");
- foreach ("ircNick", "ircUser", "ircName", "DBType", "tempDir") {
+ foreach ( qw(ircNick ircUser ircName DBType tempDir) ) {
next if &IsParam($_);
&ERROR("Parameter $_ has not been defined.");
exit 1;
if (! -d $param{tempDir}) {
&status("making $param{tempDir}...");
- system("mkdir $param{tempDir}");
+ mkdir $param{tempDir}, 0755;
}
# static scalar variables.
- $file{utm} = "$bot_base_dir/$param{'ircUser'}.uptime";
- $file{PID} = "$bot_base_dir/$param{'ircUser'}.pid";
+ $file{utm} = "$bot_state_dir/$param{'ircUser'}.uptime";
+ $file{PID} = "$bot_run_dir/$param{'ircUser'}.pid";
}
sub startup {
if (!$conn->connected and time - $msgtime > 900) {
&status("reconnecting because of uncaught disconnect \@ ".scalar(localtime) );
### $irc->start;
+ &clearIRCVars();
$conn->connect();
### return;
}
&DCCBroadcast("-HUP called.","m");
&shutdown();
- &loadConfig($bot_misc_dir."/blootbot.config");
+ &loadConfig($bot_config_dir."/blootbot.config");
&reloadAllModules() if (&IsParam("DEBUG"));
&setup();
my ($file) = @_;
if (!open(FILE, $file)) {
- &ERROR("FAILED loadConfig ($file): $!");
- &status("Please copy files/sample.config to files/blootbot.config");
- &status(" and edit files/blootbot.config, modify to tastes.");
+ &ERROR("Failed to read configuration file ($file): $!");
+ &status("Please read the INSTALL file on how to install and setup this file.");
exit 0;
}