use strict; use vars qw($VERSION %IRSSI); $VERSION = '1.0'; %IRSSI = ( authors => 'Gavin Sharp', contact => 'gavin@gavinsharp.com', name => 'botgzline', description => 'Automatically gzlines bots', license => 'Public Domain', url => 'http://gavinsharp.com/scripts/', changed => 'Tue May 12 2009 19:42:55 PDT', ); sub gzline_bot_join { my $debug = Irssi::settings_get_bool('botgzline_debug'); Irssi::print("Checking enabled state...") if $debug; return unless (Irssi::settings_get_bool('botgzline_enabled')); my ($server,$chan,$nick,$hostmask)=@_; # server: Irssi::Irc::Server=HASH(0x86aa8b8) # chan: #foo # nick: gavin # hostmask: gavin@moz-B77DEAEB.mozilla.org Irssi::print("Checking server name...") if $debug; return unless ($server->{address} == 'irc.mozilla.org'); Irssi::print("Checking join nick...") if $debug; return unless ($nick =~ /[A-Z0-9-]{2,7}[0-9]{3}/); gline($nick,$hostmask,$server,"windrone"); } sub gzline_bot_notice { my $debug = Irssi::settings_get_bool('botgzline_debug'); Irssi::print("Checking enabled state...") if $debug; return unless (Irssi::settings_get_bool('botgzline_enabled')); my ($server,$msg,$nick,$addr,$target)=@_; # server: Irssi::Irc::Server=HASH(0x98f00c8) # msg: Forbidding Q-lined nick [USA|00|MP|4646] from [72.50.29.113]. # nick: gravel.mozilla.org # addr: Irssi::print("Checking server name...") if $debug; return unless ($server->{address} == 'irc.mozilla.org'); Irssi::print("Checking notice nick...") if $debug; return unless ($nick =~ /mozilla.org/); Irssi::print("Checking msg...") if $debug; return unless ($msg =~ /^Forbidding Q-lined nick \[?((USA|FRA|TUR|DEU|ESP|BRA|POL|GBR|AUS|AffScaN|XP-).+)\]? from \[([\d.]+)\]/); my $botnick = $1; my $ip = $3; Irssi::print("Checking for ip...") if $debug; return unless ($ip =~ m/(\d+)\.(\d+)\.(\d+)\.(\d+)/); Irssi::print("Checking for valid ip...") if $debug; return unless ((0|int($1)|int($2)|int($3)|int($4)) < 256); gzline($botnick, $ip, $server, "dronebot"); } sub gzline { my ($nick,$ip,$server,$message)=@_; my $cmd = "quote gzline +*@" . "$ip 2d $message"; my $announce = "automatically gzlined $nick [$ip]"; #Irssi::print($announce . ": " . $cmd); $server->command("/msg #irc.mozilla.org $announce"); $server->command($cmd); } sub gline { my ($nick,$hostmask,$server,$message)=@_; my $cmd = "quote gline $nick 1d $message"; my $announce = "automatically glined $nick [$hostmask]"; #Irssi::print($announce . ": " . $cmd); $server->command("/msg #irc.mozilla.org $announce"); $server->command($cmd); } Irssi::settings_add_bool('gavinscripts', 'botgzline_enabled', 1); Irssi::settings_add_bool('gavinscripts', 'botgzline_debug', 0); Irssi::signal_add_last("message irc notice", "gzline_bot_notice"); Irssi::signal_add_last("message join", "gzline_bot_join");