#/#############################################################################\ ## Ongeboren's script collection # ## Copyright (C) 2002 - 2005 ongeboren # ## Version: 2.1 # ## Requires: XChat 2.0.8+ # ## Distributed under the GPL license # #\#############################################################################/ sub onge_filter_server_notices { my $me = Xchat::get_info ( "nick" ); my $serv = lc( Xchat::get_info ( "server" ) ); return Xchat::EAT_NONE if ( lc($_[0][0]) ne lc(":$serv") ); if ( $_[1][6] =~ /^Client connecting: (\S+) \((\S+)\@(\S+)\) \[(\S+)\]/ ) { return onge_filter_process_conn ($1, $2, $3, $4, $_[1][6], $me, $serv); } elsif ( $_[1][6] =~ /^Client exiting: (\S+) \((\S+)\@(\S+)\) \[(.*)\] \[(\S+)\]$/ ) { return onge_filter_process_exit ($1, $2, $3, $5, $4, $_[1][6], $me, $serv); } elsif ( $_[1][6] =~ /^I.line is full for (\S+)\[(\S+)\@(\S+)\] \((\S+)\)/ ) { return onge_filter_process_ifull ($1, $2, $3, $4, $_[1][6], $me, $serv); } elsif ( $_[1][6] =~ /^User (\S+) \((\S+)\@(\S+)\).*is a possible spambot/ ) { return onge_filter_process_spambot ($1, $2, $3, $_[1][6], $me, $serv); } elsif ( $_[1][6] =~ /^(\S+) \((\S+)\@(\S+)\) is doing a .whois on you/ ) { return onge_filter_process_whois ($1, $2, $3, $_[1][6], $me, $serv); } elsif ( $_[1][6] =~ /(\S+!\S+\@\S+) on (\S+) is requesting gline for \[(\S+)\] \[(.*)\]\s*$/ ) { return onge_filter_gline_requests ($1, $2, $3, $4, $_[1][6], $me, $serv); } elsif ( $_[1][6] =~ /(\S+!\S+\@\S+) on (\S+) has triggered gline for \[(\S+)\] \[(.*)\]\s*$/ ) { return onge_filter_gline_trigger ($1, $2, $3, $4, $_[1][6], $me, $serv); } elsif ( $_[1][6] eq "oper or server has already voted" ) { return onge_filter_already_voted (); } elsif ( $_[1][6] =~ /(\S+) added temporary (\d+) min. K-Line for \[(.*)\] \[(.*)\]$/ ) { return onge_filter_klines ($1, $2, $3, $4, $_[1][6], $me, $serv); } } sub onge_filter_klines { my ($n, $t, $h, $r, $mm, $me, $serv) = @_; onge_print ( $serv, $onge_tabs_kline, "$n\t($t min): $h [$r]", undef ); return Xchat::EAT_ALL; } sub onge_filter_already_voted { if ( $onge_hide_voted ) { $onge_hide_voted++; return Xchat::EAT_ALL; } return Xchat::EAT_NONE; } sub onge_print { my ($serv, $tab, $text, $color) = @_; if ($tab) { Xchat::command( "QUERY $tab" , undef, $serv); Xchat::set_context( Xchat::find_context($tab, $serv) ); } Xchat::print( "\003$color$text\003\n" ); } sub onge_filter_gline_trigger { my ($who, $wserv, $gline, $greason, $mm, $me, $serv) = @_; my $n = ""; if( exists( $gliners_ign{ lc($wserv) } ) ) { $who =~ /(\S+)!/; if ($1) { $n = substr($1, 0, 3); } onge_print ( $serv, $onge_tabs_gline, "trigger:$n\t$gline \"$greason\"", 4 ); } else { onge_print ( $serv, $onge_tabs_req, "$who\ttrigger: $gline \"$greason\"", 4 ); } return Xchat::EAT_ALL; } sub onge_filter_gline_requests { my ($who, $wserv, $gline, $greason, $mm, $me, $serv) = @_; my $n = ""; return Xchat::EAT_ALL if ( exists( $gliners_ign{ lc($wserv) } ) ); if( exists( $gliners{ $wserv } ) ) { $who =~ /(\S+)!/; if ($1) { $n = substr($1, 0, 3); } onge_print ( $serv, $onge_tabs_gline, "req:$n\t$gline \"$greason\"", $gliners{ $wserv } ); } else { if ($gline =~ /(\S+)\@(\S+)/) { onge_print ( $serv, $onge_tabs_req, "$who\t$1\002\@\002$2 \"$greason\" /gline $gline $greason", undef ); } else { onge_print ( $serv, $onge_tabs_req, "$who\t$gline \"$greason\" /gline $gline $greason", undef ); } } return Xchat::EAT_ALL; } sub onge_filter_process_conn { my ($n, $id, $h, $ip, $mm, $me, $serv) = @_; onge_print( $serv, $onge_tabs_conn, "conn\t$n $id\002\@\002$h ($ip)", $onge_color_conn); return Xchat::EAT_ALL; } sub onge_filter_process_exit { my ($n, $id, $h, $ip, $rr, $mm, $me, $serv) = @_; if ( $onge_exit_apart ) { onge_print( $serv, $onge_tabs_exit, "exit\t$n $id\002\@\002$h ($ip)", $onge_color_exit); } else { onge_print( $serv, $onge_tabs_conn, "exit\t$n $id\002\@\002$h ($ip) $rr", $onge_color_exit); } return Xchat::EAT_ALL; } sub onge_filter_process_ifull { my ($n, $id, $h, $ip, $mm, $me, $serv) = @_; if ( $onge_kline_ifull ) { Xchat::command ("KLINE $onge_ktime_ifull *\@$h possible flood bots" ); onge_print( $serv, undef, "info\tk:lined *\002\@\002$h - I-line was full", $onge_color_info ); return Xchat::EAT_NONE; } return Xchat::EAT_NONE; } sub onge_filter_process_spambot { my ($n, $id, $h, $mm, $me, $serv) = @_; if ( $onge_kline_spam ) { Xchat::command ("KLINE $onge_ktime_spam $id\@$h possible spam bots" ); onge_print( $serv, undef, "info\tk:lined $id\002\@\002$h - spambot", $onge_color_info ); return Xchat::EAT_NONE; } return Xchat::EAT_NONE; } sub onge_filter_process_whois { my ($n, $id, $h, $mm, $me, $serv) = @_; if ( $onge_whois_on_whois > 1 ) { onge_misc_try_whois ( $n, $me, $serv, 1 ); onge_print( $serv, undef, "info\treceived a /whois from $n $id\002\@\002$h", $onge_color_info ); return Xchat::EAT_ALL; } elsif ( $onge_whois_on_whois > 0 ) { onge_misc_try_whois ( $n, $me, $serv, 0 ); onge_print( $serv, undef, "info\treceived a /whois from $n $id\002\@\002$h", $onge_color_info ); return Xchat::EAT_ALL; } return Xchat::EAT_NONE; } sub onge_oper_advanced_init { foreach my $e ( @gliners_to_ignore ) { $gliners_ign{ lc($e) } = 1; } } onge_oper_advanced_init(); Xchat::print( "\0033 Advanced IRC-operator : loaded\003\n" ); 1;