+ if ($delete or $duser) {
+ &News::writeNews();
+ &status("NewsFlush: deleted: $delete news entries; $duser user cache.");
+ }
+}
+
+sub chanlimitCheck {
+ my $interval = &getChanConfDefault("chanlimitcheckInterval", 10);
+
+ if (@_) {
+ &ScheduleThis($interval, "chanlimitCheck");
+ return if ($_[0] eq "2");
+ }
+
+ my $str = join(' ', &ChanConfList("chanlimitcheck") );
+
+ foreach $chan ( &ChanConfList("chanlimitcheck") ) {
+ next unless (&validChan($chan));
+
+ if ($chan eq "_default") {
+ &WARN("chanlimit: we're doing $chan!! HELP ME!");
+ next;
+ }
+
+ my $limitplus = &getChanConfDefault("chanlimitcheckPlus", 5, $chan);
+ my $newlimit = scalar(keys %{ $channels{$chan}{''} }) + $limitplus;
+ my $limit = $channels{$chan}{'l'};
+
+ if (scalar keys %netsplitservers) {
+ if (defined $limit) {
+ &status("chanlimit: netsplit; removing it for $chan.");
+ &rawout("MODE $chan -l");
+ $cache{chanlimitChange}{$chan} = time();
+ &status("chanlimit: netsplit; removed.");
+ }
+
+ next;
+ }
+
+ if (defined $limit and scalar keys %{ $channels{$chan}{''} } > $limit) {
+ &FIXME("LIMIT: set too low!!! FIXME");
+ ### run NAMES again and flush it.
+ }
+
+ if (defined $limit and $limit == $newlimit) {
+ $cache{chanlimitChange}{$chan} = time();
+ next;
+ }
+
+ if (!exists $channels{$chan}{'o'}{$ident}) {
+ &status("ChanLimit: dont have ops on $chan.") unless (exists $cache{warn}{chanlimit}{$chan});
+ $cache{warn}{chanlimit}{$chan} = 1;
+ &chanServCheck($chan);
+ next;
+ }
+ delete $cache{warn}{chanlimit}{$chan};
+
+ if (!defined $limit) {
+ &status("chanLimit: setting for first time or from netsplit, for $chan");
+ }
+
+ if (exists $cache{chanlimitChange}{$chan}) {
+ my $delta = time() - $cache{chanlimitChange}{$chan};
+ if ($delta < $interval*60) {
+ &DEBUG("chanLimit: not going to change chanlimit! ($delta<$interval*60)");
+ return;
+ }
+ }
+
+ &rawout("MODE $chan +l $newlimit");
+ $cache{chanlimitChange}{$chan} = time();
+ }