From ac56812a5a79b5187a89cb7dcd9078c11ffed54e Mon Sep 17 00:00:00 2001 From: icxcnika Date: Tue, 22 Apr 2014 23:46:10 +0400 Subject: added some things in gitignore, added connection tx/rx info to status reports, added exit, sync, and ping commands, bot says which channel a restricted person tries to use ops command on, blacklist system is more intelligent (reason, person adding, can be removed), added functionality for working with URLs, automatically retries to join channels that are throttled, make sure we send passwords to NickServ@services., fixed a scheduling loophole that was exploitable, greatly reduced startup warnings due to slow syncing --- modules/classes.pl | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) (limited to 'modules/classes.pl') diff --git a/modules/classes.pl b/modules/classes.pl index 4fbfb94..5cafdbd 100644 --- a/modules/classes.pl +++ b/modules/classes.pl @@ -14,6 +14,7 @@ sub new my $self = {}; my $tbl = { "strbl" => \&strbl, + "strblnew" => \&strblnew, "dnsbl" => \&dnsbl, "floodqueue" => \&floodqueue, "floodqueue2" => \&floodqueue2, @@ -34,7 +35,8 @@ sub new "joinmsgquit" => \&joinmsgquit, "garbagemeter" => \&garbagemeter, "cyclebotnet" => \&cyclebotnet, - "banevade" => \&banevade + "banevade" => \&banevade, + "urlcrunch" => \&urlcrunch }; $self->{ftbl} = $tbl; bless($self); @@ -76,6 +78,20 @@ sub joinmsgquit return 1; } +sub urlcrunch +{ + my ($chk, $id, $event, $chan, $response) = @_; + return 0 unless defined($response); + return 0 unless ref($response); + return 0 unless defined($response->{_previous}); + return 0 unless defined($response->{_previous}->{_headers}); + return 0 unless defined($response->{_previous}->{_headers}->{location}); + if ($response->{_previous}->{_headers}->{location} =~ /$chk->{content}/i) { + return 1; + } + return 0; +} + sub check { my $self = shift; @@ -367,6 +383,23 @@ sub strbl { return 0; } +sub strblnew { + my ($chk, $xid, $event, $chan) = @_; + my $match = lc $event->{args}->[0]; + foreach my $id (keys %{$::blacklist->{string}}) { + my $line = lc $::blacklist->{string}->{$id}->{content}; + my $idx = index $match, $line; + if ( $idx != -1 ) { + my $setby = $::blacklist->{string}->{$id}->{setby}; + $setby = substr($setby, 0, 1) . "\x02\x02" . substr($setby, 1); + return defined($::blacklist->{string}->{$id}->{reason}) ? + "id $id added by $setby because $::blacklist->{string}->{$id}->{reason}" : + "id $id added by $setby for no reason"; + } + } + return 0; +} + sub nick { my ($chk, $id, $event, $chan) = @_; if ( lc $event->{nick} eq lc $chk->{content} ) { @@ -407,6 +440,11 @@ sub nuhg { return 0; } +sub invite { + my ( $chk, $id, $event, $chan) = @_; + return 1; +} + my $sfc = 0; sub flood_add -- cgit v1.2.3