summaryrefslogtreecommitdiffstats
path: root/scripts/kblamehost.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/kblamehost.pl')
-rw-r--r--scripts/kblamehost.pl65
1 files changed, 65 insertions, 0 deletions
diff --git a/scripts/kblamehost.pl b/scripts/kblamehost.pl
new file mode 100644
index 0000000..3cd626c
--- /dev/null
+++ b/scripts/kblamehost.pl
@@ -0,0 +1,65 @@
+#!/usr/bin/perl
+
+use strict;
+use Irssi;
+use Irssi::Irc;
+use vars qw($VERSION %IRSSI);
+
+$VERSION = "0.0.2";
+%IRSSI = (
+ authors => 'Filippo \'godog\' Giunchedi',
+ contact => 'filippo\@esaurito.net',
+ name => 'kblamehost',
+ description => 'Kicks (and bans) people with >= 4 dots in theirs hostname',
+ license => 'GNU GPLv2 or later',
+ url => 'http://esaurito.net',
+);
+
+# TODO
+# add ban support
+
+# all settings are space-separated
+Irssi::settings_add_str('misc','kblamehost_channels',''); # channels with kicklamehost enabled
+Irssi::settings_add_str('misc','kblamehost_exclude',''); # regexps with hostnames excluded
+Irssi::settings_add_str('misc','kblamehost_dots','4'); # dots >= an host will be marked as lame
+Irssi::settings_add_str('misc','kblamehost_kickmsg','Lame host detected, change it please!'); # on-kick message
+Irssi::settings_add_str('misc','kblamehost_ban','0'); # should we ban that lame host?
+
+sub event_join
+{
+ my ($channel, $nicksList) = @_;
+ my @nicks = @{$nicksList};
+ my $server = $channel->{'server'};
+ my $channelName = $channel->{name};
+ my $channel_enabled = 0;
+ my @channels = split(/ /,Irssi::settings_get_str('kblamehost_channels'));
+ my @excludes = split(/ /,Irssi::settings_get_str('kblamehost_exclude'));
+
+ foreach (@channels)
+ {
+ $channel_enabled = 1 if($_ eq $channelName);
+ }
+
+ foreach (@nicks)
+ {
+ my $hostname = substr($_->{host},index($_->{host},'@')+1);
+ my @dots = split(/\./,$hostname); # yes i know, it's the number on fields in
+ # hostname, but array counts from 0 so element's count is number of dots
+ my $is_friend = 0;
+
+ foreach my $exclude (@excludes)
+ {
+ $is_friend = 1 if ($hostname =~ $exclude);
+ }
+
+ if( $#dots >= Irssi::settings_get_str('kblamehost_dots') && $channel_enabled == 1 && $is_friend == 0)
+ {
+ # Irssi::print("lamehost ($hostname) by $_->{nick} detected on $channelName, kicking...");
+ $server->command("kick $channelName $_->{nick} "
+ .Irssi::settings_get_str('kblamehost_kickmsg'));
+ $server->command("ban $channelName $_->{nick}") if ( Irssi::settings_get_str('kblamehost_ban') );
+ }
+ }
+}
+
+Irssi::signal_add_last("massjoin", "event_join");