From 2e39d5b2b95c2e705fd962c9752070f816c1dfec Mon Sep 17 00:00:00 2001 From: William Heimbigner Date: Wed, 4 Jul 2007 02:00:24 +0000 Subject: critical bug fix + code optimizations --- config-default/channels.xml | 1 + config-default/commands.xml | 12 ++++++++++-- meta.pl | 5 +++++ modules/classes.pl | 14 ++++++++++++++ modules/command.pl | 1 + modules/event.pl | 2 ++ modules/inspect.pl | 3 ++- modules/log.pl | 27 ++++++++++++--------------- 8 files changed, 47 insertions(+), 18 deletions(-) diff --git a/config-default/channels.xml b/config-default/channels.xml index 035fcd4..de9800b 100644 --- a/config-default/channels.xml +++ b/config-default/channels.xml @@ -193,6 +193,7 @@ sure are a ?lot of wikifag DCC SEND contentisuseless + blah AfterDeath diff --git a/config-default/commands.xml b/config-default/commands.xml index 5e5f9e8..8353b0f 100644 --- a/config-default/commands.xml +++ b/config-default/commands.xml @@ -179,8 +179,8 @@ > io 'exempt.txt'; - $conn->privmsg($event->{to}->[0], "lc $1 exempted"); + lc $1 . "\n" >> io 'exempt.txt'; + $conn->privmsg($event->{to}->[0], lc $1 . " exempted"); ]]> @@ -199,4 +199,12 @@ } ]]> + + > io 'string_blacklist.txt'; + $conn->privmsg($event->{to}->[0], "$str blacklisted"); + ]]> + diff --git a/meta.pl b/meta.pl index 4b71024..61f97ff 100755 --- a/meta.pl +++ b/meta.pl @@ -16,6 +16,7 @@ use Getopt::Long; %::eline=(); $::pass = ''; +@::string_blacklist=(); BEGIN { my @modules = qw/Xml Util Inspect Event Services Log Command Classes Actions Mysql OperQueue/; @@ -32,6 +33,7 @@ sub init { 'config|c:s' => \$::cset ); ASM::XML->readXML(); + mkdir($::settings->{log}->{dir}); $::log = ASM::Log->new($::settings->{log}); $::pass = $::settings->{pass} if $::pass eq ''; $host = ${$::settings->{server}}[rand @{$::settings->{server}}]; @@ -57,6 +59,9 @@ sub init { foreach my $item (@eline) { $::eline{lc $item} = 1; } + my @strbl = io('string_blacklist.txt')->getlines; + chomp @strbl; + @::string_blacklist = @strbl; $irc->start(); } diff --git a/modules/classes.pl b/modules/classes.pl index 93c5e12..b540a9a 100644 --- a/modules/classes.pl +++ b/modules/classes.pl @@ -11,6 +11,7 @@ sub new my $module = shift; my $self = {}; my $tbl = { + "strbl" => \&strbl, "dnsbl" => \&dnsbl, "floodqueue" => \&floodqueue, "nickspam" => \&nickspam, @@ -147,6 +148,19 @@ sub re { return 0; } +sub strbl { + my ($chk, $id, $event, $chan) = @_; + my $match = lc $event->{args}->[0]; + foreach my $line (@::string_blacklist) { + my $xline = lc $line; + my $idx = index $match, $xline; + if ( $idx != -1 ) { + return 1; + } + } + return 0; +} + sub nick { my ($chk, $id, $event, $chan) = @_; if ( lc $event->{nick} eq lc $chk->{content} ) { diff --git a/modules/command.pl b/modules/command.pl index b0523c4..04f1d90 100644 --- a/modules/command.pl +++ b/modules/command.pl @@ -1,6 +1,7 @@ package ASM::Commander; use warnings; use strict; +use IO::All; sub new { diff --git a/modules/event.pl b/modules/event.pl index ede0efd..971a542 100644 --- a/modules/event.pl +++ b/modules/event.pl @@ -4,6 +4,7 @@ use strict; use Data::Dumper; use Text::LevenshteinXS qw(distance); +use IO::All; #require 'modules/inspect.pl'; sub cs { @@ -77,6 +78,7 @@ sub on_join { my $chan = lc $event->{to}->[0]; if ( lc $conn->{_nick} eq lc $nick) { $::sc{$chan} = {}; + mkdir($::settings->{log}->{dir} . $chan); $conn->sl("who $chan"); $conn->privmsg('ChanServ', "op $chan" ) if (defined cs($chan)->{op}) && (cs($chan)->{op} eq 'yes'); } diff --git a/modules/inspect.pl b/modules/inspect.pl index a5fd732..bed8a46 100644 --- a/modules/inspect.pl +++ b/modules/inspect.pl @@ -3,6 +3,7 @@ use warnings; use strict; use Data::Dumper; +use List::Util qw(first); %::ignored = (); sub new @@ -23,7 +24,7 @@ sub inspect { my @override = []; our $unmode=''; my $nick = lc $event->{nick}; - return if (defined($::eline{$nick}) || defined($::eline{lc $event->{user}}) || defined(lc $event->{host})); + return if (defined($::eline{$nick}) || defined($::eline{lc $event->{user}}) || defined($::eline{lc $event->{host}})); $iaddr = gethostbyname($event->{host}); $rev = join('.', reverse(unpack('C4', $iaddr))).'.' if (defined $iaddr); %monx = defined($::channels->{channel}->{master}->{event}) ? %{$::channels->{channel}->{master}->{event}} : (); diff --git a/modules/log.pl b/modules/log.pl index 759a3ea..e8a178a 100644 --- a/modules/log.pl +++ b/modules/log.pl @@ -1,12 +1,10 @@ +package ASM::Log; + use warnings; use strict; -package ASM::Log; - -#use String::Interpolate qw(interpolate); -use IO::All; +#use IO::All; use POSIX qw(strftime); -use Data::Dumper; sub new { @@ -14,7 +12,6 @@ sub new my $config = shift; my $self = {}; $self->{CONFIG} = $config; - $self->{MD} = {}; bless($self); return $self; } @@ -30,11 +27,8 @@ sub logg foreach my $chan ( @chans ) { $chan = lc $chan; - unless (defined($self->{MD}->{$chan}) && ($self->{MD}->{$chan} == 1)) { - io($cfg->{dir} . $chan)->mkpath; - $self->{MD}->{$chan} = 1; - } - $_=''; + my $path = ">>$cfg->{dir}${chan}/${chan}" . strftime($cfg->{filefmt}, @time); + $_ = ''; $_ = "<$event->{nick}> $event->{args}->[0]" if $event->{type} eq 'public'; $_ = "*** $event->{nick} has joined $chan" if $event->{type} eq 'join'; $_ = "*** $event->{nick} has left $chan" if $event->{type} eq 'part'; @@ -45,10 +39,13 @@ sub logg $_ = "-$event->{nick}- $event->{args}->[0]" if $event->{type} eq 'notice'; $_ = "*** $event->{nick} sets mode: " . join(" ",@{$event->{args}}) if $event->{type} eq 'mode'; $_ = "*** $event->{nick} changes topic to \"$event->{args}->[0]\"" if $event->{type} eq 'topic'; - print Dumper($event) if ($_ eq ''); - $_ = strftime($cfg->{timefmt}, @time) . $_ . "\n" unless $_ eq ''; - $_ >> io($cfg->{dir} . $chan . '/' . $chan . strftime($cfg->{filefmt}, @time)) unless ($_ eq ''); + $_ = strftime($cfg->{timefmt}, @time) . $_ . "\n"; + my $line = $_; + open(FH, $path) or die "Can't open $path: $!"; + print FH $line; + close(FH); +# $_ >> io($path); } } -return 1; +1; -- cgit v1.2.3