while (1) {
($key,$val) = &randKey("factoids","factoid_key,factoid_value");
### $val =~ tr/^[A-Z]/[a-z]/; # blah is Good => blah is good.
- last if ($val !~ /^</);
+ last if (defined $val and $val !~ /^</);
+
$error++;
if ($error == 5) {
&ERROR("rF: tried 5 times but failed.");
foreach $item (keys %{ $::news{$chan} }) {
my $t = $::news{$chan}{$item}{Expire};
+ my $tadd = $::news{$chan}{$item}{Time};
+ $oldest = $tadd if ($oldest > $tadd);
+
next if ($t == 0 or $t == -1);
if ($t < 1000) {
&status("newsFlush: Fixed Expire time for $chan/$item, should not happen anyway.");
next;
}
- $oldest = $t if ($t < $oldest);
-
next unless (time() > $t);
# todo: show how old it was.
- &DEBUG("delete $chan/'$item'.");
delete $::news{$chan}{$item};
+ &VERB("NEWS: deleted '$item'", 2);
$delete++;
}
}
}
}
- &News::writeNews();
-
# &VERB("NEWS deleted $delete seen entries.",2);
- &status("NEWS deleted $delete news entries; $duser user cache.");
+ &status("NEWS deleted: $delete news entries; $duser user cache.");
+
+ &News::writeNews();
}
sub chanlimitCheck {
next unless (!defined $limit or $limit != $newlimit);
if (!exists $channels{$chan}{'o'}{$ident}) {
- &ERROR("chanlimitcheck: dont have ops on $chan.") unless (exists $cache{warn}{chanlimit}{$chan});
+ &status("ChanLimit: dont have ops on $chan.") unless (exists $cache{warn}{chanlimit}{$chan});
$cache{warn}{chanlimit}{$chan} = 1;
### TODO: check chanserv?
next;
delete $cache{warn}{chanlimit}{$chan};
if (!defined $limit) {
- &DEBUG("setting limit for first time or from netsplit for $chan");
+ &status("ChanLimit: setting for first time or from netsplit, for $chan");
}
&rawout("MODE $chan +l $newlimit");
if ($param{'DBType'} =~ /^mysql|pg|postgres/i) {
foreach $nick (keys %seencache) {
+ if (0) {
+ my $retval = &dbReplace("seen", $nick, (
+ "nick" => $seencache{$nick}{'nick'},
+ "time" => $seencache{$nick}{'time'},
+ "host" => $seencache{$nick}{'host'},
+ "channel" => $seencache{$nick}{'chan'},
+ "message" => $seencache{$nick}{'msg'},
+ ) );
+ &DEBUG("retval => $retval.");
+ delete $seencache{$nick};
+ $flushed++;
+
+ next;
+ }
+ ### OLD CODE...
+
my $exists = &dbGet("seen","nick", $nick, "nick");
if (defined $exists and $exists) {
&ircloop();
delete $cache{connect};
} else {
- &DEBUG("possible lost in space; checking.");
+ &status("IRCTEST: possible lost in space; checking. ".
+ scalar(localtime) );
&msg($ident, "TEST");
$cache{connect} = time();
}
next if (time() - $time < 60*60);
} else {
- &DEBUG("shm: $shmid is not ours or old blootbot => ($z)");
+# &DEBUG("shm: $shmid is not ours or old blootbot => ($z)");
# next;
}
}
closedir DEBIAN;
- # user/chan file check.
- foreach ("chan","users") {
- my $f = $bot_misc_dir."/blootbot.$_";
- my $backup = 0;
-
- if ( -e "$f~" ) {
- $backup++ if ( -s $f > -s "$f~");
- $backup++ if ( (stat $f)[9] - (stat "$f~")[9] > 60*60*24*7);
- } else {
- $backup++;
- }
- next unless ($backup);
-
- ### TODO: do internal copying.
- &status("Backup: $f to $f~");
- CORE::system("/bin/cp $f $f~");
- }
+ # make backup of important files.
+ &mkBackup( $bot_misc_dir."/blootbot.chan", 60*60*24*1);
+ &mkBackup( $bot_misc_dir."/blootbot.users", 60*60*24*1);
+ &mkBackup( $bot_base_dir."/blootbot-news.txt", 60*60*24*1);
# flush cache{lobotomy}
foreach (keys %{ $cache{lobotomy} }) {
return $default;
}
+sub mkBackup {
+ my($file, $time) = @_;
+ my $backup = 0;
+
+ if ( -e "$file~" ) {
+ $backup++ if ( -s $file > -s "$file~");
+ $backup++ if ((stat $file)[9] - (stat "$file~")[9] > $time);
+ } else {
+ $backup++;
+ }
+ return unless ($backup);
+
+ ### TODO: do internal copying.
+ &status("Backup: $file to $file~");
+ CORE::system("/bin/cp $file $file~");
+ CORE::system("/bin/touch $file~"); # needed!
+}
+
1;