# modes w/ target affecting nick => cache it.
if ($mode =~ /[bov]/) {
- if ($mode eq "o" and $nick eq "ChanServ" and $target =~ /^\Q$ident\E$/i) {
- &VERB("hookmode: chanserv deopped us! asking",2);
- &chanServCheck($chan);
- }
-
$channels{$chan}{$mode}{$target}++ if $parity;
delete $channels{$chan}{$mode}{$target} if !$parity;
+
+ # lets do some custom stuff.
+ if ($mode eq "o" and $parity) {
+ if ($nick eq "ChanServ" and $target =~ /^\Q$ident\E$/i) {
+ &VERB("hookmode: chanserv deopped us! asking",2);
+ &chanServCheck($chan);
+ }
+
+ &chanLimitVerify($chan);
+ }
}
if ($mode =~ /[l]/) {
foreach (@ignore) {
s/\*/\\S*/g;
- next unless (eval { $nuh =~ /^$_$/i });
+ next unless (eval { $nuh =~ /^$_$/i } );
+
+ # better to ignore an extra message than to allow one to get
+ # through, although it would be better to go through ignore
+ # checking again.
+ if (time() - ($cache{ignoreCheckTime} || 0) > 60) {
+ &ignoreCheck();
+ }
&status("IGNORE <$who> $message");
return;
return;
}
+# this is basically run on on_join or on_quit
sub chanLimitVerify {
- my($chan) = @_;
+ my($c) = @_;
+ $chan = $c;
my $l = $channels{$chan}{'l'};
- &DEBUG("cLV: netsplitservers: ".scalar(keys %netsplitservers) );
- &DEBUG("cLV: netsplit: ".scalar(keys %netsplit) );
+ return unless (&IsChanConf("chanlimitcheck"));
if (scalar keys %netsplit) {
- &WARN("clV: netsplit active (1); skipping.");
+ &WARN("clV: netsplit active (1, chan = $chan); skipping.");
+ return;
+ }
+
+ if (!defined $l) {
+ &DEBUG("running chanlimitCheck from chanLimitVerify; FIXME! (chan = $chan)");
+ &chanlimitCheck();
return;
}
# only change it if it's not set.
- if (defined $l and &IsChanConf("chanlimitcheck")) {
- my $plus = &getChanConfDefault("chanlimitcheckPlus", 5, $chan);
- my $count = scalar(keys %{ $channels{$chan}{''} });
- my $int = &getChanConfDefault("chanlimitcheckInterval", 10, $chan);
+ my $plus = &getChanConfDefault("chanlimitcheckPlus", 5, $chan);
+ my $count = scalar(keys %{ $channels{$chan}{''} });
+ my $int = &getChanConfDefault("chanlimitcheckInterval", 10, $chan);
- my $delta = $count + $plus - $l;
- $delta =~ s/^\-//;
+ my $delta = $count + $plus - $l;
+# $delta =~ s/^\-//;
- if ($plus <= 3) {
- &WARN("clc: stupid to have plus at $plus, fix it!");
- }
+ if ($plus <= 3) {
+ &WARN("clc: stupid to have plus at $plus, fix it!");
+ }
- if (exists $cache{chanlimitChange}{$chan}) {
- if (time() - $cache{chanlimitChange}{$chan} < $int*60) {
- return;
- }
+ if (exists $cache{chanlimitChange}{$chan}) {
+ if (time() - $cache{chanlimitChange}{$chan} < $int*60) {
+ return;
}
+ }
- &chanServCheck($chan);
+ &chanServCheck($chan);
- ### todo: unify code with chanlimitcheck()
- if ($delta > 5) {
- &status("clc: big change in limit; going for it.");
- &rawout("MODE $chan +l ".($count+$plus) );
- $cache{chanlimitChange}{$chan} = time();
- }
- }
+ ### todo: unify code with chanlimitcheck()
+ return if ($delta > 5);
+
+ &status("clc: big change in limit for $chan ($delta);".
+ "going for it. (was: $l; now: ".($count+$plus).")");
+
+ &rawout("MODE $chan +l ".($count+$plus) );
+ $cache{chanlimitChange}{$chan} = time();
}
sub chanServCheck {
($chan) = @_;
- if (!defined $chan or $chan =~ /^$/) {
+ if (!defined $chan or $chan =~ /^\s*$/) {
&WARN("chanServCheck: chan == NULL.");
return 0;
}
&rawout("WHO NickServ");
return 0;
}
- return 0 if (exists $channels{$chan}{'o'}{$ident});
+ # check for first hash then for next hash.
+ # todo: a function for &ischanop()? &isvoice()?
+ if (exists $channels{$chan} and exists $channels{$chan}{'o'}{$ident}) {
+ return 0;
+ }
&status("ChanServ ==> Requesting ops for $chan. (chanServCheck)");
&rawout("PRIVMSG ChanServ :OP $chan $ident");