+ next if ($type ne uc($type));
+
+ foreach $nick (keys %{ $dcc{$type} }) {
+ next unless (defined $nick);
+ &status("DCC CHAT: closing DCC $type to $nick.");
+ next unless (defined $dcc{$type}{$nick});
+
+ my $ref = $dcc{$type}{$nick};
+ &dccsay($nick, "bye bye, $nick") if ($type =~ /^chat$/i);
+ $dcc{$type}{$nick}->close();
+ delete $dcc{$type}{$nick};
+ &DEBUG("after close for $nick");
+ }
+ delete $dcc{$type};
+ }
+}
+
+sub joinfloodCheck {
+ my($who,$chan,$userhost) = @_;
+
+ return unless (&IsChanConf("joinfloodCheck"));
+
+ if (exists $netsplit{lc $who}) { # netsplit join.
+ &DEBUG("joinfloodCheck: $who was in netsplit; not checking.");
+ }
+
+ if (exists $floodjoin{$chan}{$who}{Time}) {
+ &WARN("floodjoin{$chan}{$who} already exists?");
+ }
+
+ $floodjoin{$chan}{$who}{Time} = time();
+ $floodjoin{$chan}{$who}{Host} = $userhost;
+
+ ### Check...
+ foreach (keys %floodjoin) {
+ my $c = $_;
+ my $count = scalar keys %{ $floodjoin{$c} };
+ next unless ($count > 5);
+ &DEBUG("joinflood: count => $count");
+
+ my $time;
+ foreach (keys %{ $floodjoin{$c} }) {
+ $time += $floodjoin{$c}{$_}{Time};