summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorLibravatarWilliam Heimbigner <william.heimbigner@gmail.com>2007-06-28 23:48:48 +0000
committerLibravatarWilliam Heimbigner <william.heimbigner@gmail.com>2007-06-28 23:48:48 +0000
commit6907da0a5da3d45a91c3ac4893e5b890200b27eb (patch)
tree5a61df15a30b6d0aefa6c6e72e7eab2d8f03de1f /modules
parent638d9eae9e63755e26f9843985597e6f1c7c5f8e (diff)
modularized stuff, fixed alert logic, simplified stuff, updated TODO
Diffstat (limited to 'modules')
-rw-r--r--modules/classes.pl3
-rw-r--r--modules/command.pl10
-rw-r--r--modules/event.pl58
-rw-r--r--modules/inspect.pl19
-rw-r--r--modules/log.pl32
-rw-r--r--modules/mysql.pl49
-rw-r--r--modules/services.pl2
-rw-r--r--modules/xml.pl1
8 files changed, 81 insertions, 93 deletions
diff --git a/modules/classes.pl b/modules/classes.pl
index c2a414f..8323a06 100644
--- a/modules/classes.pl
+++ b/modules/classes.pl
@@ -1,10 +1,9 @@
use strict;
use warnings;
-use Data::Dumper;
-#package Classes;
sub Classes::dnsbl {
our (%aonx, $id, %dct, $event, $chan, $rev);
+ return unless index($event->{host}, '/') == -1;
if (defined $rev) {
my $iaddr = hostip( "$rev$aonx{$id}{content}" );
my @dnsbl = unpack( 'C4', $iaddr ) if defined $iaddr;
diff --git a/modules/command.pl b/modules/command.pl
index 41d65fb..fe299fd 100644
--- a/modules/command.pl
+++ b/modules/command.pl
@@ -12,11 +12,11 @@ sub do_command
foreach my $command ( @{$::commands->{command}} )
{
if (defined($command->{flag})) {
- next unless defined($::xusers->{$nick});
- next unless defined($::xusers->{$nick}->{flags});
- next unless (grep {$_ eq $command->{flag}} split('', $::xusers->{$nick}->{flags}));
- if ($::xusers->{$nick}->{host} ne 'IDENTIFY') {
- next unless leq($::xusers->{$nick}->{host}, $event->{host});
+ next unless defined($::users->{person}->{$nick});
+ next unless defined($::users->{person}->{$nick}->{flags});
+ next unless (grep {$_ eq $command->{flag}} split('', $::users->{person}->{$nick}->{flags}));
+ if ($::users->{person}->{$nick}->{host} ne 'IDENTIFY') {
+ next unless leq($::users->{person}->{$nick}->{host}, $event->{host});
}
else {
if ( $cmd =~ /$command->{cmd}/ ){
diff --git a/modules/event.pl b/modules/event.pl
index 3754190..42a0114 100644
--- a/modules/event.pl
+++ b/modules/event.pl
@@ -43,7 +43,7 @@ sub on_join {
$conn->sl("whois $nick");
}
}
- logg( $event );
+ $::log->logg( $event );
if ( $#leven ne -1 ) {
my $ld = ( ( maxlen($nick, $leven[0]) - distance($nick, $leven[0]) ) / maxlen($nick, $leven[0]) );
my $mx = $leven[0];
@@ -66,7 +66,7 @@ sub on_part
my ($conn, $event) = @_;
inspect( $conn, $event );
my $nick = lc $event->{nick};
- logg( $event );
+ $::log->logg( $event );
if (defined($::sn{$nick}) && defined($::sn{$nick}->{mship})) {
my @mship = @{$::sn{$nick}->{mship}};
@mship = grep { lc $_ ne lc $event->{to}->[0] } @mship;
@@ -96,7 +96,7 @@ sub on_public
{
my ($conn, $event) = @_;
inspect( $conn, $event );
- logg( $event );
+ $::log->logg( $event );
do_command( $conn, $event )
}
@@ -104,7 +104,7 @@ sub on_notice
{
my ($conn, $event) = @_;
inspect( $conn, $event );
- logg( $event );
+ $::log->logg( $event );
doServices($conn, $event);
}
@@ -126,7 +126,7 @@ sub on_quit
$event->{to} = \@channels;
delete($::sn{lc $event->{nick}});
inspect( $conn, $event );
- logg ( $event );
+ $::log->logg ( $event );
}
sub blah
@@ -176,7 +176,7 @@ sub irc_topic {
{
$::sc{lc $event->{to}->[0]}{topic}{text} = $event->{args}->[0];
}
- logg($event);
+ $::log->logg($event);
}
}
@@ -196,7 +196,7 @@ sub on_nick {
delete( $::sn{lc $event->{nick}});
$event->{to} = \@channels;
inspect($conn, $event);
- logg($event)
+ $::log->logg($event)
}
sub on_kick {
@@ -205,7 +205,7 @@ sub on_kick {
$conn->join($event->{args}->[0]);
}
my $nick = lc $event->{to}->[0];
- logg( $event );
+ $::log->logg( $event );
my @mship = @{$::sn{$nick}->{mship}};
@mship = grep { lc $_ ne lc $event->{args}->[0] } @mship;
if ( @mship ) {
@@ -250,7 +250,7 @@ sub on_mode
$::sc{$chan}{users}{lc $ex[1]}{voice}=0;
}
}
- logg($event);
+ $::log->logg($event);
}
}
@@ -330,49 +330,9 @@ sub on_whoreply
$::sc{lc $chan}{users}{lc $nick}{voice} = $voice;
}
-#<<< :kubrick.freenode.net 311 AntiSpamMeta AfterDeath i=icxcnika atheme/troll/about.linux.afterdeath * :[[User:WHeimbigner]]
-#Trying to handle event 'whoisuser'.
-#Handler for 'whoisuser' called.
-#<<< :kubrick.freenode.net 319 AntiSpamMeta AfterDeath :#nslu2-general @#bash @##asb-testing +#vandalism-en-wp +#thetestwiki #arbchat #wikipedia-social #wikipedia-en #wikimedia-stewards #wikimedia-irc @##krypt77 #wikipedia #freenode #hyperion ##linux #gentoo #debian ##windows #defocus #atheme.org #freenode-dev +##asb-nexus #houseofhack ##linux-ops @#baadf00d #wikimedia-ops #ubuntu ##socialites
-#Trying to handle event 'whoischannels'.
-#Handler for 'whoischannels' called.
-#<<< :kubrick.freenode.net 312 AntiSpamMeta AfterDeath irc.freenode.net :http://freenode.net/
-#Trying to handle event 'whoisserver'.
-#Handler for 'whoisserver' called.
-#<<< :kubrick.freenode.net 320 AntiSpamMeta AfterDeath :is identified to services
-#Trying to handle event 'whoisvworld'.
-#Handler for 'whoisvworld' called.
-#<<< :kubrick.freenode.net 318 AntiSpamMeta afterdeath :End of /WHOIS list.
-#Trying to handle event 'endofwhois'.
-#Handler for 'endofwhois' called.
-
-
-
sub on_bannedfromchan {
my ($conn, $event) = @_;
$conn->privmsg('ChanServ', "unban $event->{args}->[1]");
}
-sub Event::killsub {
- undef &on_connect;
- undef &on_join;
- undef &on_part;
- undef &on_msg;
- undef &on_notice;
- undef &on_errnickinuse;
- undef &on_quit;
- undef &on_names;
- undef &on_nick;
- undef &on_kick;
- undef &on_mode;
- undef &on_ctcp;
- undef &on_bannedfromchan;
- undef &blah;
- undef &irc_users;
- undef &irc_topic;
- undef &whois_identified;
- undef &whois_end;
- undef &on_public;
-}
-
return 1;
diff --git a/modules/inspect.pl b/modules/inspect.pl
index 666de29..fc66215 100644
--- a/modules/inspect.pl
+++ b/modules/inspect.pl
@@ -3,8 +3,7 @@ use strict;
use List::Util qw(first);
-#my @ignored = ();
-@::ignored = ();
+%::ignored = ();
sub inspect {
our ($conn, $event) = @_;
@@ -23,9 +22,9 @@ sub inspect {
$rev = join('.', reverse(unpack('C4', $iaddr))).'.' if (defined $iaddr);
%monx = defined($::channels->{channel}->{master}->{event}) ? %{$::channels->{channel}->{master}->{event}} : ();
## NB: isn't there a better way to do this with grep, somehow?
- foreach ( @::ignored ) {
- return if (lc $event->{nick} eq $_);
- }
+# foreach ( @::ignored ) {
+# return if (lc $event->{nick} eq $_);
+# }
foreach $chan ( @{$event->{to}} ) {
next unless $chan =~ /^#/;
%conx = defined($::channels->{channel}->{lc $chan}->{event}) ? %{$::channels->{channel}->{lc $chan}->{event}} : ();
@@ -44,7 +43,7 @@ sub inspect {
delete $dct{$_} foreach @override;
foreach $chan (@{$event->{to}}) {
foreach $id ( keys %dct ) {
- sql_record($chan, $event->{nick}, $event->{user}, $event->{host}, $::sn{lc $event->{nick}}->{gecos}, $dct{$id}{risk}, $id, $dct{$id}{reason});
+ $::db->record($chan, $event->{nick}, $event->{user}, $event->{host}, $::sn{lc $event->{nick}}->{gecos}, $dct{$id}{risk}, $id, $dct{$id}{reason});
$txtz = "$dct{$id}{risk} risk threat: ".
"Detected $event->{nick} $dct{$id}{reason} in $chan ";
$txtz = $txtz . commaAndify(getAlert(lc $chan, $dct{$id}{risk}, 'hilights')) if (getAlert(lc $chan, $dct{$id}{risk}, 'hilights'));
@@ -61,9 +60,11 @@ sub inspect {
$conn->schedule(int($dct{$id}{time}), sub { print "Timer called!\n"; o_send($lconn,$lunmode); });
}
}
- $conn->privmsg($_, $txtz) foreach getAlert($chan, $dct{$id}{risk}, 'msgs');
- push(@::ignored, lc $event->{nick});
- $conn->schedule(15, sub { @::ignored = grep { lc $_ ne lc $nick } @::ignored; });
+ unless (defined($::ignored{lc $event->{nick}}) && ($::ignored{lc $event->{nick}} >= $::RISKS{$dct{$id}{risk}})) {
+ $conn->privmsg($_, $txtz) foreach getAlert($chan, $dct{$id}{risk}, 'msgs');
+ $::ignored{lc $nick} = $::RISKS{$dct{$id}{risk}};
+ $conn->schedule(15, sub { delete($::ignored{lc $nick})});
+ }
}
}
}
diff --git a/modules/log.pl b/modules/log.pl
index 6381110..19b44b3 100644
--- a/modules/log.pl
+++ b/modules/log.pl
@@ -1,19 +1,35 @@
use warnings;
use strict;
+package ASM::Log;
+
use String::Interpolate qw(interpolate);
+use IO::All;
+use POSIX qw(strftime);
+use Data::Dumper;
+
+sub new
+{
+ my $module = shift;
+ my $config = shift;
+ my $self = {};
+ $self->{CONFIG} = $config;
+ bless($self);
+ return $self;
+}
sub logg
{
+ my $self = shift;
my ($event) = @_;
+ my $cfg = $self->{CONFIG};
my @chans = @{$event->{to}};
- my $fh;
@chans = ( $event->{args}->[0] ) if ($event->{type} eq 'kick');
- my @time = ($::settings->{log}->{zone} eq 'local') ? localtime : gmtime;
- foreach my $chan ( @chans)
+ my @time = ($cfg->{zone} eq 'local') ? localtime : gmtime;
+ foreach my $chan ( @chans )
{
$chan = lc $chan;
- io(interpolate($::settings->{log}->{dir}))->mkpath;
+ io(interpolate($cfg->{dir}))->mkpath;
$_='';
$_ = "<$event->{nick}> $event->{args}->[0]" if $event->{type} eq 'public';
$_ = "*** $event->{nick} has joined $chan" if $event->{type} eq 'join';
@@ -26,13 +42,9 @@ sub logg
$_ = "*** $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 '');
- $_ = interpolate(strftime($::settings->{log}->{timefmt}, @time)) . $_ . "\n" unless $_ eq '';
- $_ >> io(interpolate($::settings->{log}->{dir}).'/'.interpolate(strftime($::settings->{log}->{filefmt}, @time))) unless ($_ eq '');
+ $_ = interpolate(strftime($cfg->{timefmt}, @time)) . $_ . "\n" unless $_ eq '';
+ $_ >> io(interpolate($cfg->{dir}).'/'.interpolate(strftime($cfg->{filefmt}, @time))) unless ($_ eq '');
}
}
-sub Log::killsub {
- undef &logg;
-}
-
return 1;
diff --git a/modules/mysql.pl b/modules/mysql.pl
index 463dbaf..2f96410 100644
--- a/modules/mysql.pl
+++ b/modules/mysql.pl
@@ -1,30 +1,47 @@
+package ASM::DB;
+
use warnings;
use strict;
use DBI;
-sub sql_connect
-{
- $::dbh = DBI->connect("DBI:mysql:database=$::mysql->{db};host=$::mysql->{host};port=$::mysql->{port}",
- $::mysql->{user}, $::mysql->{pass});
- $::dbh->{mysql_auto_reconnect} = 1;
+sub new {
+ my $module = shift;
+ my ($db, $host, $port, $user, $pass, $table) = @_;
+ my $self = {};
+ $self->{DBH} = DBI->connect("DBI:mysql:database=$db;host=$host;port=$port", $user, $pass);
+ $self->{DBH}->{mysql_auto_reconnect} = 1;
+ $self->{TABLE} = $table;
+ bless($self);
+ return $self;
}
-sub sql_record
+#sub sql_connect
+#{
+# $::dbh = DBI->connect("DBI:mysql:database=$::mysql->{db};host=$::mysql->{host};port=$::mysql->{port}",
+# $::mysql->{user}, $::mysql->{pass});
+# $::dbh->{mysql_auto_reconnect} = 1;
+#}
+
+sub record
{
+ my $self = shift;
my ($channel, $nick, $user, $host, $gecos, $level, $id, $reason) = @_;
- $::dbh->do("INSERT INTO $::mysql->{table} (channel, nick, user, host, gecos, level, id, reason) VALUES (" .
- $::dbh->quote($channel) . ", " . $::dbh->quote($nick) . ", " . $::dbh->quote($user) .
- ", " . $::dbh->quote($host) . ", " . $::dbh->quote($gecos) . ", " . $::dbh->quote($level) . ", " .
- $::dbh->quote($id) . ", " . $::dbh->quote($reason) . ");");
+ my $dbh = $self->{DBH};
+ $dbh->do("INSERT INTO $self->{TABLE} (channel, nick, user, host, gecos, level, id, reason) VALUES (" .
+ $dbh->quote($channel) . ", " . $dbh->quote($nick) . ", " . $dbh->quote($user) .
+ ", " . $dbh->quote($host) . ", " . $dbh->quote($gecos) . ", " . $dbh->quote($level) . ", " .
+ $dbh->quote($id) . ", " . $dbh->quote($reason) . ");");
}
-sub sql_query
+sub query
{
+ my $self = shift;
my ($channel, $nick, $user, $host) = @_;
- $channel = $::dbh->quote($channel);
- $nick = $::dbh->quote($nick);
- $user = $::dbh->quote($user);
- $host = $::dbh->quote($host);
+ my $dbh = $self->{DBH};
+ $channel = $dbh->quote($channel);
+ $nick = $dbh->quote($nick);
+ $user = $dbh->quote($user);
+ $host = $dbh->quote($host);
$nick =~ s/\*/%/g;
$nick =~ s/_/\\_/g;
@@ -37,7 +54,7 @@ sub sql_query
$host =~ s/\*/%/g;
$host =~ s/_/\\_/g;
$host =~ s/\?/_/g;
- my $sth = $::dbh->prepare("SELECT * from $::mysql->{table} WHERE channel = $channel and nick like $nick and user like $user and host like $host;");
+ my $sth = $dbh->prepare("SELECT * from $self->{TABLE} WHERE channel = $channel and nick like $nick and user like $user and host like $host;");
$sth->execute;
my $i = 0;
while (my $ref = $sth->fetchrow_arrayref) {
diff --git a/modules/services.pl b/modules/services.pl
index d110b60..c70b9ca 100644
--- a/modules/services.pl
+++ b/modules/services.pl
@@ -8,7 +8,7 @@ sub doServices {
print "NickServ: $event->{args}->[0]\n";
if ( $event->{args}->[0] eq 'This nickname is owned by someone else' )
{
- $conn->privmsg( 'NickServ', "identify $::pass" );
+ $conn->privmsg( 'NickServ', "identify $::settings->{pass}" );
}
elsif ( $event->{args}->[0] eq 'Password accepted - you are now recognized' )
{
diff --git a/modules/xml.pl b/modules/xml.pl
index 10158d0..4a4d702 100644
--- a/modules/xml.pl
+++ b/modules/xml.pl
@@ -13,7 +13,6 @@ sub readXML {
GroupTags => { altnicks => 'altnick', server => 'host', autojoins=> 'autojoin' });
$::channels = $::xs1->XMLin( "$p/channels.xml", ForceArray => [qw/event debug info low medium high/] );
$::users = $::xs1->XMLin( "$p/users.xml", ForceArray => 'person' );
- $::xusers = $::users->{person};
$::commands = $::xs1->XMLin( "$p/commands.xml", ForceArray => [qw/command/]);
$::mysql = $::xs1->XMLin( "$p/mysql.xml", ForceArray => [] );
}