mirror of
https://github.com/pragma-/pbot.git
synced 2024-10-09 04:48:43 +02:00
Normalize x-random hostmasks with user field to not pollute message database
Significant optimizations to message database structure and queries
This commit is contained in:
parent
cc3154a2c6
commit
fa854c087f
@ -111,6 +111,8 @@ sub on_public {
|
|||||||
my $host = $event->{event}->host;
|
my $host = $event->{event}->host;
|
||||||
my $text = $event->{event}->{args}[0];
|
my $text = $event->{event}->{args}[0];
|
||||||
|
|
||||||
|
($nick, $user, $host) = $self->normalize_hostmask($nick, $user, $host);
|
||||||
|
|
||||||
$event->{interpreted} = $self->{pbot}->{interpreter}->process_line($from, $nick, $user, $host, $text);
|
$event->{interpreted} = $self->{pbot}->{interpreter}->process_line($from, $nick, $user, $host, $text);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -173,6 +175,8 @@ sub on_mode {
|
|||||||
my $channel = $event->{event}->{to}[0];
|
my $channel = $event->{event}->{to}[0];
|
||||||
$channel = lc $channel;
|
$channel = lc $channel;
|
||||||
|
|
||||||
|
($nick, $user, $host) = $self->normalize_hostmask($nick, $user, $host);
|
||||||
|
|
||||||
my ($mode, $modifier);
|
my ($mode, $modifier);
|
||||||
my $i = 0;
|
my $i = 0;
|
||||||
my $target;
|
my $target;
|
||||||
@ -250,6 +254,8 @@ sub on_join {
|
|||||||
my ($self, $event_type, $event) = @_;
|
my ($self, $event_type, $event) = @_;
|
||||||
my ($nick, $user, $host, $channel) = ($event->{event}->nick, $event->{event}->user, $event->{event}->host, $event->{event}->to);
|
my ($nick, $user, $host, $channel) = ($event->{event}->nick, $event->{event}->user, $event->{event}->host, $event->{event}->to);
|
||||||
|
|
||||||
|
($nick, $user, $host) = $self->normalize_hostmask($nick, $user, $host);
|
||||||
|
|
||||||
$channel = lc $channel;
|
$channel = lc $channel;
|
||||||
|
|
||||||
my $message_account = $self->{pbot}->{messagehistory}->get_message_account($nick, $user, $host);
|
my $message_account = $self->{pbot}->{messagehistory}->get_message_account($nick, $user, $host);
|
||||||
@ -285,6 +291,8 @@ sub on_invite {
|
|||||||
my ($self, $event_type, $event) = @_;
|
my ($self, $event_type, $event) = @_;
|
||||||
my ($nick, $user, $host, $target, $channel) = ($event->{event}->nick, $event->{event}->user, $event->{event}->host, $event->{event}->to, $event->{event}->{args}[0]);
|
my ($nick, $user, $host, $target, $channel) = ($event->{event}->nick, $event->{event}->user, $event->{event}->host, $event->{event}->to, $event->{event}->{args}[0]);
|
||||||
|
|
||||||
|
($nick, $user, $host) = $self->normalize_hostmask($nick, $user, $host);
|
||||||
|
|
||||||
$channel = lc $channel;
|
$channel = lc $channel;
|
||||||
|
|
||||||
$self->{pbot}->{logger}->log("$nick!$user\@$host invited $target to $channel!\n");
|
$self->{pbot}->{logger}->log("$nick!$user\@$host invited $target to $channel!\n");
|
||||||
@ -303,6 +311,8 @@ sub on_kick {
|
|||||||
my ($nick, $user, $host, $target, $channel, $reason) = ($event->{event}->nick, $event->{event}->user, $event->{event}->host, $event->{event}->to, $event->{event}->{args}[0], $event->{event}->{args}[1]);
|
my ($nick, $user, $host, $target, $channel, $reason) = ($event->{event}->nick, $event->{event}->user, $event->{event}->host, $event->{event}->to, $event->{event}->{args}[0], $event->{event}->{args}[1]);
|
||||||
$channel = lc $channel;
|
$channel = lc $channel;
|
||||||
|
|
||||||
|
($nick, $user, $host) = $self->normalize_hostmask($nick, $user, $host);
|
||||||
|
|
||||||
$self->{pbot}->{logger}->log("$nick!$user\@$host kicked $target from $channel ($reason)\n");
|
$self->{pbot}->{logger}->log("$nick!$user\@$host kicked $target from $channel ($reason)\n");
|
||||||
|
|
||||||
my ($message_account) = $self->{pbot}->{messagehistory}->{database}->find_message_account_by_nick($target);
|
my ($message_account) = $self->{pbot}->{messagehistory}->{database}->find_message_account_by_nick($target);
|
||||||
@ -335,6 +345,8 @@ sub on_departure {
|
|||||||
my ($nick, $user, $host, $channel, $args) = ($event->{event}->nick, $event->{event}->user, $event->{event}->host, $event->{event}->to, $event->{event}->args);
|
my ($nick, $user, $host, $channel, $args) = ($event->{event}->nick, $event->{event}->user, $event->{event}->host, $event->{event}->to, $event->{event}->args);
|
||||||
$channel = lc $channel;
|
$channel = lc $channel;
|
||||||
|
|
||||||
|
($nick, $user, $host) = $self->normalize_hostmask($nick, $user, $host);
|
||||||
|
|
||||||
my $text = uc $event->{event}->type;
|
my $text = uc $event->{event}->type;
|
||||||
$text .= " $args";
|
$text .= " $args";
|
||||||
|
|
||||||
@ -400,6 +412,8 @@ sub on_nickchange {
|
|||||||
my ($self, $event_type, $event) = @_;
|
my ($self, $event_type, $event) = @_;
|
||||||
my ($nick, $user, $host, $newnick) = ($event->{event}->nick, $event->{event}->user, $event->{event}->host, $event->{event}->args);
|
my ($nick, $user, $host, $newnick) = ($event->{event}->nick, $event->{event}->user, $event->{event}->host, $event->{event}->args);
|
||||||
|
|
||||||
|
($nick, $user, $host) = $self->normalize_hostmask($nick, $user, $host);
|
||||||
|
|
||||||
$self->{pbot}->{logger}->log("[NICKCHANGE] $nick!$user\@$host changed nick to $newnick\n");
|
$self->{pbot}->{logger}->log("[NICKCHANGE] $nick!$user\@$host changed nick to $newnick\n");
|
||||||
|
|
||||||
if ($newnick eq $self->{pbot}->{registry}->get_value('irc', 'botnick') and not $self->{pbot}->{joined_channels}) {
|
if ($newnick eq $self->{pbot}->{registry}->get_value('irc', 'botnick') and not $self->{pbot}->{joined_channels}) {
|
||||||
@ -446,4 +460,14 @@ sub on_nicknameinuse {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub normalize_hostmask {
|
||||||
|
my ($self, $nick, $user, $host) = @_;
|
||||||
|
|
||||||
|
if ($host =~ m{^(gateway|nat)/(.*)/x-[^/]+$}) {
|
||||||
|
$host = "$1/$2/x-$user";
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($nick, $user, $host);
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -85,25 +85,28 @@ sub begin {
|
|||||||
|
|
||||||
$self->{dbh}->do(<<SQL);
|
$self->{dbh}->do(<<SQL);
|
||||||
CREATE TABLE IF NOT EXISTS Hostmasks (
|
CREATE TABLE IF NOT EXISTS Hostmasks (
|
||||||
hostmask TEXT PRIMARY KEY UNIQUE,
|
hostmask TEXT PRIMARY KEY UNIQUE COLLATE NOCASE,
|
||||||
id INTEGER,
|
id INTEGER,
|
||||||
last_seen NUMERIC,
|
last_seen NUMERIC,
|
||||||
nickchange INTEGER
|
nickchange INTEGER,
|
||||||
|
nick TEXT COLLATE NOCASE,
|
||||||
|
user TEXT COLLATE NOCASE,
|
||||||
|
host TEXT COLLATE NOCASE
|
||||||
)
|
)
|
||||||
SQL
|
SQL
|
||||||
|
|
||||||
$self->{dbh}->do(<<SQL);
|
$self->{dbh}->do(<<SQL);
|
||||||
CREATE TABLE IF NOT EXISTS Accounts (
|
CREATE TABLE IF NOT EXISTS Accounts (
|
||||||
id INTEGER PRIMARY KEY,
|
id INTEGER PRIMARY KEY,
|
||||||
hostmask TEXT UNIQUE,
|
hostmask TEXT UNIQUE COLLATE NOCASE,
|
||||||
nickserv TEXT
|
nickserv TEXT COLLATE NOCASE
|
||||||
)
|
)
|
||||||
SQL
|
SQL
|
||||||
|
|
||||||
$self->{dbh}->do(<<SQL);
|
$self->{dbh}->do(<<SQL);
|
||||||
CREATE TABLE IF NOT EXISTS Nickserv (
|
CREATE TABLE IF NOT EXISTS Nickserv (
|
||||||
id INTEGER,
|
id INTEGER,
|
||||||
nickserv TEXT,
|
nickserv TEXT COLLATE NOCASE,
|
||||||
timestamp NUMERIC,
|
timestamp NUMERIC,
|
||||||
UNIQUE (id, nickserv)
|
UNIQUE (id, nickserv)
|
||||||
)
|
)
|
||||||
@ -112,7 +115,7 @@ SQL
|
|||||||
$self->{dbh}->do(<<SQL);
|
$self->{dbh}->do(<<SQL);
|
||||||
CREATE TABLE IF NOT EXISTS Gecos (
|
CREATE TABLE IF NOT EXISTS Gecos (
|
||||||
id INTEGER,
|
id INTEGER,
|
||||||
gecos TEXT,
|
gecos TEXT COLLATE NOCASE,
|
||||||
timestamp NUMERIC,
|
timestamp NUMERIC,
|
||||||
UNIQUE (id, gecos)
|
UNIQUE (id, gecos)
|
||||||
)
|
)
|
||||||
@ -121,7 +124,7 @@ SQL
|
|||||||
$self->{dbh}->do(<<SQL);
|
$self->{dbh}->do(<<SQL);
|
||||||
CREATE TABLE IF NOT EXISTS Channels (
|
CREATE TABLE IF NOT EXISTS Channels (
|
||||||
id INTEGER,
|
id INTEGER,
|
||||||
channel TEXT,
|
channel TEXT COLLATE NOCASE,
|
||||||
enter_abuse INTEGER,
|
enter_abuse INTEGER,
|
||||||
enter_abuses INTEGER,
|
enter_abuses INTEGER,
|
||||||
offenses INTEGER,
|
offenses INTEGER,
|
||||||
@ -137,7 +140,7 @@ SQL
|
|||||||
$self->{dbh}->do(<<SQL);
|
$self->{dbh}->do(<<SQL);
|
||||||
CREATE TABLE IF NOT EXISTS Messages (
|
CREATE TABLE IF NOT EXISTS Messages (
|
||||||
id INTEGER,
|
id INTEGER,
|
||||||
channel TEXT,
|
channel TEXT COLLATE NOCASE,
|
||||||
msg TEXT,
|
msg TEXT,
|
||||||
timestamp NUMERIC,
|
timestamp NUMERIC,
|
||||||
mode INTEGER
|
mode INTEGER
|
||||||
@ -156,6 +159,12 @@ SQL
|
|||||||
$self->{dbh}->do('CREATE INDEX IF NOT EXISTS AliasIdx1 ON Aliases(id, alias, type)');
|
$self->{dbh}->do('CREATE INDEX IF NOT EXISTS AliasIdx1 ON Aliases(id, alias, type)');
|
||||||
$self->{dbh}->do('CREATE INDEX IF NOT EXISTS AliasIdx2 ON Aliases(alias, id, type)');
|
$self->{dbh}->do('CREATE INDEX IF NOT EXISTS AliasIdx2 ON Aliases(alias, id, type)');
|
||||||
|
|
||||||
|
$self->{dbh}->do('CREATE INDEX hostmask_nick_idx on Hostmasks (nick)');
|
||||||
|
$self->{dbh}->do('CREATE INDEX hostmask_host_idx on Hostmasks (host)');
|
||||||
|
$self->{dbh}->do('CREATE INDEX hostmasks_id_idx on Hostmasks (id)');
|
||||||
|
$self->{dbh}->do('CREATE INDEX gecos_id_idx on Gecos (id)');
|
||||||
|
$self->{dbh}->do('CREATE INDEX nickserv_id_idx on Nickserv (id)');
|
||||||
|
|
||||||
$self->{dbh}->begin_work();
|
$self->{dbh}->begin_work();
|
||||||
};
|
};
|
||||||
$self->{pbot}->{logger}->log($@) if $@;
|
$self->{pbot}->{logger}->log($@) if $@;
|
||||||
@ -278,6 +287,7 @@ sub update_gecos {
|
|||||||
sub add_message_account {
|
sub add_message_account {
|
||||||
my ($self, $mask, $link_id, $link_type) = @_;
|
my ($self, $mask, $link_id, $link_type) = @_;
|
||||||
my $id;
|
my $id;
|
||||||
|
my ($nick, $user, $host) = $mask =~ m/^([^!]+)!([^@]+)@(.*)/;
|
||||||
|
|
||||||
if(defined $link_id and $link_type == $self->{alias_type}->{STRONG}) {
|
if(defined $link_id and $link_type == $self->{alias_type}->{STRONG}) {
|
||||||
$id = $link_id;
|
$id = $link_id;
|
||||||
@ -287,8 +297,8 @@ sub add_message_account {
|
|||||||
}
|
}
|
||||||
|
|
||||||
eval {
|
eval {
|
||||||
my $sth = $self->{dbh}->prepare('INSERT INTO Hostmasks VALUES (?, ?, ?, 0)');
|
my $sth = $self->{dbh}->prepare('INSERT INTO Hostmasks VALUES (?, ?, ?, 0, ?, ?, ?)');
|
||||||
$sth->execute($mask, $id, scalar gettimeofday);
|
$sth->execute($mask, $id, scalar gettimeofday, $nick, $user, $host);
|
||||||
$self->{new_entries}++;
|
$self->{new_entries}++;
|
||||||
|
|
||||||
if((not defined $link_id) || ((defined $link_id) && ($link_type == $self->{alias_type}->{WEAK}))) {
|
if((not defined $link_id) || ((defined $link_id) && ($link_type == $self->{alias_type}->{WEAK}))) {
|
||||||
@ -314,10 +324,8 @@ sub find_message_account_by_nick {
|
|||||||
my ($self, $nick) = @_;
|
my ($self, $nick) = @_;
|
||||||
|
|
||||||
my ($id, $hostmask) = eval {
|
my ($id, $hostmask) = eval {
|
||||||
my $sth = $self->{dbh}->prepare('SELECT id, hostmask FROM Hostmasks WHERE hostmask LIKE ? ESCAPE "\" ORDER BY last_seen DESC LIMIT 1');
|
my $sth = $self->{dbh}->prepare('SELECT id, hostmask FROM Hostmasks WHERE nick = ? ORDER BY last_seen DESC LIMIT 1');
|
||||||
my $qnick = quotemeta $nick;
|
$sth->execute($nick);
|
||||||
$qnick =~ s/_/\\_/g;
|
|
||||||
$sth->execute("$qnick!%");
|
|
||||||
my $row = $sth->fetchrow_hashref();
|
my $row = $sth->fetchrow_hashref();
|
||||||
return ($row->{id}, $row->{hostmask});
|
return ($row->{id}, $row->{hostmask});
|
||||||
};
|
};
|
||||||
@ -373,10 +381,9 @@ sub get_message_account {
|
|||||||
$self->{pbot}->{logger}->log("It's a nick-change!\n") if defined $orig_nick;
|
$self->{pbot}->{logger}->log("It's a nick-change!\n") if defined $orig_nick;
|
||||||
|
|
||||||
my $do_nothing = 0;
|
my $do_nothing = 0;
|
||||||
|
my $sth;
|
||||||
|
|
||||||
my ($rows, $link_type) = eval {
|
my ($rows, $link_type) = eval {
|
||||||
my $sth = $self->{dbh}->prepare('SELECT id, hostmask, last_seen FROM Hostmasks WHERE hostmask LIKE ? ESCAPE "\" ORDER BY last_seen DESC');
|
|
||||||
|
|
||||||
my ($account1) = $host =~ m{/([^/]+)$};
|
my ($account1) = $host =~ m{/([^/]+)$};
|
||||||
$account1 = '' if not defined $account1;
|
$account1 = '' if not defined $account1;
|
||||||
|
|
||||||
@ -390,9 +397,8 @@ sub get_message_account {
|
|||||||
my $orig_id = $self->get_message_account_id("$orig_nick!$user\@$host");
|
my $orig_id = $self->get_message_account_id("$orig_nick!$user\@$host");
|
||||||
my @orig_nickserv_accounts = $self->get_nickserv_accounts($orig_id);
|
my @orig_nickserv_accounts = $self->get_nickserv_accounts($orig_id);
|
||||||
|
|
||||||
my $qnick = quotemeta $nick;
|
$sth = $self->{dbh}->prepare('SELECT id, hostmask, last_seen FROM Hostmasks WHERE nick = ? ORDER BY last_seen DESC');
|
||||||
$qnick =~ s/_/\\_/g;
|
$sth->execute($nick);
|
||||||
$sth->execute("$qnick!%");
|
|
||||||
my $rows = $sth->fetchall_arrayref({});
|
my $rows = $sth->fetchall_arrayref({});
|
||||||
|
|
||||||
if (not defined $rows->[0]) {
|
if (not defined $rows->[0]) {
|
||||||
@ -421,6 +427,7 @@ sub get_message_account {
|
|||||||
my $match = 0;
|
my $match = 0;
|
||||||
|
|
||||||
if ($akas{$aka}->{id} == $orig_id || $aka =~ m/^.*!\Q$user\E\@\Q$host\E$/i) {
|
if ($akas{$aka}->{id} == $orig_id || $aka =~ m/^.*!\Q$user\E\@\Q$host\E$/i) {
|
||||||
|
$self->{pbot}->{logger}->log("1: match: $akas{$aka}->{id} vs $orig_id // $aka vs *!$user\@$host\n");
|
||||||
$match = 1;
|
$match = 1;
|
||||||
goto MATCH;
|
goto MATCH;
|
||||||
}
|
}
|
||||||
@ -440,7 +447,7 @@ sub get_message_account {
|
|||||||
|
|
||||||
my ($thost) = $aka =~ m/@(.*)$/;
|
my ($thost) = $aka =~ m/@(.*)$/;
|
||||||
|
|
||||||
if ($thost =~ m{(^unaffiliated|/staff/|/member/)}) {
|
if ($thost =~ m{/}) {
|
||||||
my ($account2) = $thost =~ m{/([^/]+)$};
|
my ($account2) = $thost =~ m{/([^/]+)$};
|
||||||
|
|
||||||
if ($account1 ne $account2) {
|
if ($account1 ne $account2) {
|
||||||
@ -459,20 +466,21 @@ sub get_message_account {
|
|||||||
#$self->{pbot}->{logger}->log("distance: " . ($distance / $length) . " -- $host vs $thost\n") if $length != 0;
|
#$self->{pbot}->{logger}->log("distance: " . ($distance / $length) . " -- $host vs $thost\n") if $length != 0;
|
||||||
|
|
||||||
if ($length != 0 && $distance / $length < 0.50) {
|
if ($length != 0 && $distance / $length < 0.50) {
|
||||||
|
$self->{pbot}->{logger}->log("2: distance match: $host vs $thost == " . ($distance / $length) . "\n");
|
||||||
$match = 1;
|
$match = 1;
|
||||||
} else {
|
} else {
|
||||||
# handle cases like 99.57.140.149 vs 99-57-140-149.lightspeed.sntcca.sbcglobal.net
|
# handle cases like 99.57.140.149 vs 99-57-140-149.lightspeed.sntcca.sbcglobal.net
|
||||||
if (defined $hostip) {
|
if (defined $hostip) {
|
||||||
if ($hostip eq $thost) {
|
if ($hostip eq $thost) {
|
||||||
$match = 1;
|
$match = 1;
|
||||||
$self->{pbot}->{logger}->log("IP vs hostname match: $host vs $thost\n");
|
$self->{pbot}->{logger}->log("3: IP vs hostname match: $host vs $thost\n");
|
||||||
}
|
}
|
||||||
} elsif ($thost =~ m/(\d+[[:punct:]]\d+[[:punct:]]\d+[[:punct:]]\d+)\D/) {
|
} elsif ($thost =~ m/(\d+[[:punct:]]\d+[[:punct:]]\d+[[:punct:]]\d+)\D/) {
|
||||||
my $thostip = $1;
|
my $thostip = $1;
|
||||||
$thostip =~ s/[[:punct:]]/./g;
|
$thostip =~ s/[[:punct:]]/./g;
|
||||||
if ($thostip eq $host) {
|
if ($thostip eq $host) {
|
||||||
$match = 1;
|
$match = 1;
|
||||||
$self->{pbot}->{logger}->log("IP vs hostname match: $host vs $thost\n");
|
$self->{pbot}->{logger}->log("4: IP vs hostname match: $host vs $thostip\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -498,35 +506,42 @@ sub get_message_account {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($host =~ m{^gateway/web/irccloud.com}) {
|
if ($host =~ m{^gateway/web/irccloud.com}) {
|
||||||
$sth->execute("%!$user\@gateway/web/irccloud.com/%");
|
$sth = $self->{dbh}->prepare('SELECT id, hostmask, last_seen FROM Hostmasks WHERE host = ? ORDER BY last_seen DESC');
|
||||||
|
$sth->execute("gateway/web/irccloud.com/x-$user");
|
||||||
my $rows = $sth->fetchall_arrayref({});
|
my $rows = $sth->fetchall_arrayref({});
|
||||||
if (defined $rows->[0]) {
|
if (defined $rows->[0]) {
|
||||||
|
$self->{pbot}->{logger}->log("5: irccloud match: $rows->[0]->{id}: $rows->[0]->{hostmask}\n");
|
||||||
return ($rows, $self->{alias_type}->{STRONG});
|
return ($rows, $self->{alias_type}->{STRONG});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($host =~ m{^nat/([^/]+)/}) {
|
if ($host =~ m{^nat/([^/]+)/}) {
|
||||||
$sth->execute("$nick!$user\@nat/$1/%");
|
my $nat = $1;
|
||||||
|
$sth = $self->{dbh}->prepare('SELECT id, hostmask, last_seen FROM Hostmasks WHERE nick = ? AND host = ? ORDER BY last_seen DESC');
|
||||||
|
$sth->execute($nick, "nat/$nat/x-$user");
|
||||||
my $rows = $sth->fetchall_arrayref({});
|
my $rows = $sth->fetchall_arrayref({});
|
||||||
if (defined $rows->[0]) {
|
if (defined $rows->[0]) {
|
||||||
|
$self->{pbot}->{logger}->log("6: nat match: $rows->[0]->{id}: $rows->[0]->{hostmask}\n");
|
||||||
return ($rows, $self->{alias_type}->{STRONG});
|
return ($rows, $self->{alias_type}->{STRONG});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($host =~ m{^unaffiliated/}) {
|
# cloaked hostmask
|
||||||
$sth->execute("%\@$host");
|
if ($host =~ m{/}) {
|
||||||
|
$sth = $self->{dbh}->prepare('SELECT id, hostmask, last_seen FROM Hostmasks WHERE host = ? ORDER BY last_seen DESC');
|
||||||
|
$sth->execute($host);
|
||||||
my $rows = $sth->fetchall_arrayref({});
|
my $rows = $sth->fetchall_arrayref({});
|
||||||
if (defined $rows->[0]) {
|
if (defined $rows->[0]) {
|
||||||
|
$self->{pbot}->{logger}->log("6: cloak match: $rows->[0]->{id}: $rows->[0]->{hostmask}\n");
|
||||||
return ($rows, $self->{alias_type}->{STRONG});
|
return ($rows, $self->{alias_type}->{STRONG});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
my $link_type = $self->{alias_type}->{WEAK};
|
$sth = $self->{dbh}->prepare('SELECT id, hostmask, last_seen FROM Hostmasks WHERE nick = ? ORDER BY last_seen DESC');
|
||||||
my $qnick = quotemeta $nick;
|
$sth->execute($nick);
|
||||||
$qnick =~ s/_/\\_/g;
|
|
||||||
$sth->execute("$qnick!%");
|
|
||||||
my $rows = $sth->fetchall_arrayref({});
|
my $rows = $sth->fetchall_arrayref({});
|
||||||
|
|
||||||
|
my $link_type = $self->{alias_type}->{WEAK};
|
||||||
my %processed_nicks;
|
my %processed_nicks;
|
||||||
my %processed_akas;
|
my %processed_akas;
|
||||||
|
|
||||||
@ -549,7 +564,7 @@ sub get_message_account {
|
|||||||
|
|
||||||
my ($thost) = $aka =~ m/@(.*)$/;
|
my ($thost) = $aka =~ m/@(.*)$/;
|
||||||
|
|
||||||
if ($thost =~ m{(^unaffiliated|/staff/|/member/)}) {
|
if ($thost =~ m{/}) {
|
||||||
my ($account2) = $thost =~ m{/([^/]+)$};
|
my ($account2) = $thost =~ m{/([^/]+)$};
|
||||||
|
|
||||||
if ($account1 ne $account2) {
|
if ($account1 ne $account2) {
|
||||||
@ -570,20 +585,21 @@ sub get_message_account {
|
|||||||
my $match = 0;
|
my $match = 0;
|
||||||
|
|
||||||
if ($length != 0 && $distance / $length < 0.50) {
|
if ($length != 0 && $distance / $length < 0.50) {
|
||||||
|
$self->{pbot}->{logger}->log("7: distance match: $host vs $thost == " . ($distance / $length) . "\n");
|
||||||
$match = 1;
|
$match = 1;
|
||||||
} else {
|
} else {
|
||||||
# handle cases like 99.57.140.149 vs 99-57-140-149.lightspeed.sntcca.sbcglobal.net
|
# handle cases like 99.57.140.149 vs 99-57-140-149.lightspeed.sntcca.sbcglobal.net
|
||||||
if (defined $hostip) {
|
if (defined $hostip) {
|
||||||
if ($hostip eq $thost) {
|
if ($hostip eq $thost) {
|
||||||
$match = 1;
|
$match = 1;
|
||||||
$self->{pbot}->{logger}->log("IP vs hostname match: $host vs $thost\n");
|
$self->{pbot}->{logger}->log("8: IP vs hostname match: $host vs $thost\n");
|
||||||
}
|
}
|
||||||
} elsif ($thost =~ m/(\d+[[:punct:]]\d+[[:punct:]]\d+[[:punct:]]\d+)\D/) {
|
} elsif ($thost =~ m/(\d+[[:punct:]]\d+[[:punct:]]\d+[[:punct:]]\d+)\D/) {
|
||||||
my $thostip = $1;
|
my $thostip = $1;
|
||||||
$thostip =~ s/[[:punct:]]/./g;
|
$thostip =~ s/[[:punct:]]/./g;
|
||||||
if ($thostip eq $host) {
|
if ($thostip eq $host) {
|
||||||
$match = 1;
|
$match = 1;
|
||||||
$self->{pbot}->{logger}->log("IP vs hostname match: $host vs $thost\n");
|
$self->{pbot}->{logger}->log("9: IP vs hostname match: $host vs $thostip\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -597,7 +613,9 @@ sub get_message_account {
|
|||||||
|
|
||||||
if (not defined $rows->[0]) {
|
if (not defined $rows->[0]) {
|
||||||
$link_type = $self->{alias_type}->{STRONG};
|
$link_type = $self->{alias_type}->{STRONG};
|
||||||
$sth->execute("%!$user\@$host");
|
|
||||||
|
$sth = $self->{dbh}->prepare('SELECT id, hostmask, last_seen FROM Hostmasks WHERE user = ? AND host = ? ORDER BY last_seen DESC');
|
||||||
|
$sth->execute($user, $host);
|
||||||
$rows = $sth->fetchall_arrayref({});
|
$rows = $sth->fetchall_arrayref({});
|
||||||
|
|
||||||
if (defined $rows->[0] and gettimeofday - $rows->[0]->{last_seen} > 60 * 60 * 48) {
|
if (defined $rows->[0] and gettimeofday - $rows->[0]->{last_seen} > 60 * 60 * 48) {
|
||||||
@ -611,6 +629,10 @@ sub get_message_account {
|
|||||||
}
|
}
|
||||||
=cut
|
=cut
|
||||||
}
|
}
|
||||||
|
if (defined $rows->[0]) {
|
||||||
|
$self->{pbot}->{logger}->log("10: matching *!user\@host: $rows->[0]->{id}: $rows->[0]->{hostmask}\n");
|
||||||
|
}
|
||||||
|
|
||||||
return ($rows, $link_type);
|
return ($rows, $link_type);
|
||||||
};
|
};
|
||||||
$self->{pbot}->{logger}->log($@) if $@;
|
$self->{pbot}->{logger}->log($@) if $@;
|
||||||
@ -618,6 +640,21 @@ sub get_message_account {
|
|||||||
return $rows->[0]->{id} if $do_nothing;
|
return $rows->[0]->{id} if $do_nothing;
|
||||||
|
|
||||||
if (defined $rows->[0]) {
|
if (defined $rows->[0]) {
|
||||||
|
if ($link_type == $self->{alias_type}->{STRONG}) {
|
||||||
|
my $host1 = lc "$nick!$user\@$host";
|
||||||
|
my $host2 = lc $rows->[0]->{hostmask};
|
||||||
|
my ($nick1) = $host1 =~ m/^([^!]+)!/;
|
||||||
|
my ($nick2) = $host2 =~ m/^([^!]+)!/;
|
||||||
|
my $distance = fastdistance($nick1, $nick2);
|
||||||
|
my $length = (length $nick1 > length $nick2) ? length $nick1 : length $nick2;
|
||||||
|
if ($distance > 1 && ($nick1 !~ /^guest/ && $nick2 !~ /^guest/) && ($host1 !~ /unaffiliated/ || $host2 !~ /unaffiliated/)) {
|
||||||
|
my $id = $rows->[0]->{id};
|
||||||
|
$self->{pbot}->{logger}->log("[$nick1][$nick2] $distance / $length\n");
|
||||||
|
$self->{pbot}->{conn}->privmsg("pragma-", "Possible bogus account: ($id) $host1 vs ($id) $host2");
|
||||||
|
$self->{pbot}->{logger}->log("Possible bogus account: ($id) $host1 vs ($id) $host2\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$self->{pbot}->{logger}->log("message-history: [get-account] $nick!$user\@$host " . ($link_type == $self->{alias_type}->{WEAK} ? "weakly linked to" : "added to account") . " $rows->[0]->{hostmask} with id $rows->[0]->{id}\n");
|
$self->{pbot}->{logger}->log("message-history: [get-account] $nick!$user\@$host " . ($link_type == $self->{alias_type}->{WEAK} ? "weakly linked to" : "added to account") . " $rows->[0]->{hostmask} with id $rows->[0]->{id}\n");
|
||||||
$self->add_message_account("$nick!$user\@$host", $rows->[0]->{id}, $link_type);
|
$self->add_message_account("$nick!$user\@$host", $rows->[0]->{id}, $link_type);
|
||||||
$self->devalidate_all_channels($rows->[0]->{id});
|
$self->devalidate_all_channels($rows->[0]->{id});
|
||||||
@ -1207,35 +1244,33 @@ sub link_aliases {
|
|||||||
|
|
||||||
my $debug_link = $self->{pbot}->{registry}->get_value('messagehistory', 'debug_link');
|
my $debug_link = $self->{pbot}->{registry}->get_value('messagehistory', 'debug_link');
|
||||||
|
|
||||||
$self->{pbot}->{logger}->log("Linking [$account][" . ($hostmask?$hostmask:'undef') . "][" . ($nickserv?$nickserv:'undef') . "]\n") if $debug_link >= 2;
|
$self->{pbot}->{logger}->log("Linking [$account][" . ($hostmask?$hostmask:'undef') . "][" . ($nickserv?$nickserv:'undef') . "]\n") if $debug_link >= 3;
|
||||||
|
|
||||||
eval {
|
eval {
|
||||||
my %ids;
|
my %ids;
|
||||||
|
|
||||||
if ($hostmask) {
|
if ($hostmask) {
|
||||||
my ($nick, $host) = $hostmask =~ /^([^!]+)![^@]+@(.*)$/;
|
my ($nick, $host) = $hostmask =~ /^([^!]+)![^@]+@(.*)$/;
|
||||||
my $sth = $self->{dbh}->prepare('SELECT id, last_seen FROM Hostmasks WHERE hostmask LIKE ?');
|
my $sth = $self->{dbh}->prepare('SELECT id, last_seen FROM Hostmasks WHERE host = ?');
|
||||||
$sth->execute("\%\@$host");
|
$sth->execute($host);
|
||||||
my $rows = $sth->fetchall_arrayref({});
|
my $rows = $sth->fetchall_arrayref({});
|
||||||
|
|
||||||
my $now = gettimeofday;
|
my $now = gettimeofday;
|
||||||
|
|
||||||
foreach my $row (@$rows) {
|
foreach my $row (@$rows) {
|
||||||
|
my $idhost = $self->find_most_recent_hostmask($row->{id}) if $debug_link >= 2 && $row->{id} != $account;
|
||||||
if ($now - $row->{last_seen} <= 60 * 60 * 48) {
|
if ($now - $row->{last_seen} <= 60 * 60 * 48) {
|
||||||
$ids{$row->{id}} = { id => $row->{id}, type => $self->{alias_type}->{STRONG}, force => 1 };
|
$ids{$row->{id}} = { id => $row->{id}, type => $self->{alias_type}->{STRONG}, force => 1 };
|
||||||
$self->{pbot}->{logger}->log("found STRONG matching id $row->{id} for host [$host]\n") if $debug_link >= 2 && $row->{id} != $account;
|
$self->{pbot}->{logger}->log("found STRONG matching id $row->{id} ($idhost) for host [$host]\n") if $debug_link >= 2 && $row->{id} != $account;
|
||||||
} else {
|
} else {
|
||||||
$ids{$row->{id}} = { id => $row->{id}, type => $self->{alias_type}->{WEAK} };
|
$ids{$row->{id}} = { id => $row->{id}, type => $self->{alias_type}->{WEAK} };
|
||||||
$self->{pbot}->{logger}->log("found WEAK matching id $row->{id} for host [$host]\n") if $debug_link >= 2 && $row->{id} != $account;
|
$self->{pbot}->{logger}->log("found WEAK matching id $row->{id} ($idhost) for host [$host]\n") if $debug_link >= 2 && $row->{id} != $account;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unless ($nick =~ m/^Guest\d+$/) {
|
unless ($nick =~ m/^Guest\d+$/) {
|
||||||
my $qnick = quotemeta $nick;
|
my $sth = $self->{dbh}->prepare('SELECT id, hostmask FROM Hostmasks WHERE nick = ?');
|
||||||
$qnick =~ s/_/\\_/g;
|
$sth->execute($nick);
|
||||||
|
|
||||||
my $sth = $self->{dbh}->prepare('SELECT id, hostmask FROM Hostmasks WHERE hostmask LIKE ? ESCAPE "\"');
|
|
||||||
$sth->execute("$qnick!%");
|
|
||||||
my $rows = $sth->fetchall_arrayref({});
|
my $rows = $sth->fetchall_arrayref({});
|
||||||
|
|
||||||
my ($account1) = $host =~ m{/([^/]+)$};
|
my ($account1) = $host =~ m{/([^/]+)$};
|
||||||
@ -1249,9 +1284,10 @@ sub link_aliases {
|
|||||||
|
|
||||||
foreach my $row (@$rows) {
|
foreach my $row (@$rows) {
|
||||||
next if $row->{id} == $account;
|
next if $row->{id} == $account;
|
||||||
|
$self->{pbot}->{logger}->log("Processing row $row->{hostmask}\n");
|
||||||
my ($thost) = $row->{hostmask} =~ m/@(.*)$/;
|
my ($thost) = $row->{hostmask} =~ m/@(.*)$/;
|
||||||
|
|
||||||
if ($thost =~ m{(^unaffiliated|/staff/|/member/)}) {
|
if ($thost =~ m{/}) {
|
||||||
my ($account2) = $thost =~ m{/([^/]+)$};
|
my ($account2) = $thost =~ m{/([^/]+)$};
|
||||||
|
|
||||||
if ($account1 ne $account2) {
|
if ($account1 ne $account2) {
|
||||||
@ -1269,8 +1305,9 @@ sub link_aliases {
|
|||||||
#$self->{pbot}->{logger}->log("distance: " . ($distance / $length) . " -- $host vs $thost\n") if $length != 0;
|
#$self->{pbot}->{logger}->log("distance: " . ($distance / $length) . " -- $host vs $thost\n") if $length != 0;
|
||||||
|
|
||||||
if ($length != 0 && $distance / $length < 0.50) {
|
if ($length != 0 && $distance / $length < 0.50) {
|
||||||
|
$self->{pbot}->{logger}->log("11: distance match: $host vs $thost == " . ($distance / $length) . "\n");
|
||||||
$ids{$row->{id}} = { id => $row->{id}, type => $self->{alias_type}->{STRONG} }; # don't force linking
|
$ids{$row->{id}} = { id => $row->{id}, type => $self->{alias_type}->{STRONG} }; # don't force linking
|
||||||
$self->{pbot}->{logger}->log("found STRONG matching id $row->{id} for nick [$qnick]\n") if $debug_link >= 2;
|
$self->{pbot}->{logger}->log("found STRONG matching id $row->{id} ($row->{hostmask}) for nick [$nick]\n") if $debug_link >= 2;
|
||||||
} else {
|
} else {
|
||||||
# handle cases like 99.57.140.149 vs 99-57-140-149.lightspeed.sntcca.sbcglobal.net
|
# handle cases like 99.57.140.149 vs 99-57-140-149.lightspeed.sntcca.sbcglobal.net
|
||||||
if (defined $hostip) {
|
if (defined $hostip) {
|
||||||
@ -1297,8 +1334,9 @@ sub link_aliases {
|
|||||||
my $rows = $sth->fetchall_arrayref({});
|
my $rows = $sth->fetchall_arrayref({});
|
||||||
|
|
||||||
foreach my $row (@$rows) {
|
foreach my $row (@$rows) {
|
||||||
|
my $idhost = $self->find_most_recent_hostmask($row->{id}) if $debug_link >= 2 && $row->{id} != $account;
|
||||||
$ids{$row->{id}} = { id => $row->{id}, type => $self->{alias_type}->{STRONG}, force => 1 };
|
$ids{$row->{id}} = { id => $row->{id}, type => $self->{alias_type}->{STRONG}, force => 1 };
|
||||||
$self->{pbot}->{logger}->log("found STRONG matching id $row->{id} for nickserv [$nickserv]\n") if $debug_link >= 2 && $row->{id} != $account;
|
$self->{pbot}->{logger}->log("12: found STRONG matching id $row->{id} ($idhost) for nickserv [$nickserv]\n") if $debug_link >= 2 && $row->{id} != $account;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1315,7 +1353,7 @@ sub link_alias {
|
|||||||
|
|
||||||
my $debug_link = $self->{pbot}->{registry}->get_value('messagehistory', 'debug_link');
|
my $debug_link = $self->{pbot}->{registry}->get_value('messagehistory', 'debug_link');
|
||||||
|
|
||||||
$self->{pbot}->{logger}->log("Attempting to " . ($force ? "forcefully " : "") . ($type == $self->{alias_type}->{STRONG} ? "strongly" : "weakly") . " link $id to $alias\n") if $debug_link >= 2;
|
$self->{pbot}->{logger}->log("Attempting to " . ($force ? "forcefully " : "") . ($type == $self->{alias_type}->{STRONG} ? "strongly" : "weakly") . " link $id to $alias\n") if $debug_link >= 3;
|
||||||
|
|
||||||
my $ret = eval {
|
my $ret = eval {
|
||||||
my $sth = $self->{dbh}->prepare('SELECT type FROM Aliases WHERE id = ? AND alias = ? LIMIT 1');
|
my $sth = $self->{dbh}->prepare('SELECT type FROM Aliases WHERE id = ? AND alias = ? LIMIT 1');
|
||||||
@ -1326,18 +1364,18 @@ sub link_alias {
|
|||||||
if (defined $row) {
|
if (defined $row) {
|
||||||
if ($force) {
|
if ($force) {
|
||||||
if ($row->{'type'} != $type) {
|
if ($row->{'type'} != $type) {
|
||||||
$self->{pbot}->{logger}->log("$id already " . ($row->{'type'} == $self->{alias_type}->{STRONG} ? "strongly" : "weakly") . " linked to $alias, forcing override\n") if $debug_link >= 2;
|
$self->{pbot}->{logger}->log("$id already " . ($row->{'type'} == $self->{alias_type}->{STRONG} ? "strongly" : "weakly") . " linked to $alias, forcing override\n") if $debug_link >= 1;
|
||||||
|
|
||||||
$sth = $self->{dbh}->prepare('UPDATE Aliases SET type = ? WHERE alias = ? AND id = ?');
|
$sth = $self->{dbh}->prepare('UPDATE Aliases SET type = ? WHERE alias = ? AND id = ?');
|
||||||
$sth->execute($type, $id, $alias);
|
$sth->execute($type, $id, $alias);
|
||||||
$sth->execute($type, $alias, $id);
|
$sth->execute($type, $alias, $id);
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
$self->{pbot}->{logger}->log("$id already " . ($row->{'type'} == $self->{alias_type}->{STRONG} ? "strongly" : "weakly") . " linked to $alias, ignoring\n") if $debug_link >= 2;
|
$self->{pbot}->{logger}->log("$id already " . ($row->{'type'} == $self->{alias_type}->{STRONG} ? "strongly" : "weakly") . " linked to $alias, ignoring\n") if $debug_link >= 4;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$self->{pbot}->{logger}->log("$id already " . ($row->{'type'} == $self->{alias_type}->{STRONG} ? "strongly" : "weakly") . " linked to $alias, ignoring\n") if $debug_link >= 2;
|
$self->{pbot}->{logger}->log("$id already " . ($row->{'type'} == $self->{alias_type}->{STRONG} ? "strongly" : "weakly") . " linked to $alias, ignoring\n") if $debug_link >= 4;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1348,7 +1386,26 @@ sub link_alias {
|
|||||||
return 1;
|
return 1;
|
||||||
};
|
};
|
||||||
$self->{pbot}->{logger}->log($@) if $@;
|
$self->{pbot}->{logger}->log($@) if $@;
|
||||||
$self->{pbot}->{logger}->log(($type == $self->{alias_type}->{STRONG} ? "Strongly" : "Weakly") . " linked $id to $alias.\n") if $ret and $debug_link;
|
|
||||||
|
my $host1 = $self->find_most_recent_hostmask($id);
|
||||||
|
my $host2 = $self->find_most_recent_hostmask($alias);
|
||||||
|
|
||||||
|
$self->{pbot}->{logger}->log(($type == $self->{alias_type}->{STRONG} ? "Strongly" : "Weakly") . " linked $id ($host1) to $alias ($host2).\n") if $ret and $debug_link;
|
||||||
|
|
||||||
|
if ($ret) {
|
||||||
|
$host1 = lc $host1;
|
||||||
|
$host2 = lc $host2;
|
||||||
|
my ($nick1) = $host1 =~ m/^([^!]+)!/;
|
||||||
|
my ($nick2) = $host2 =~ m/^([^!]+)!/;
|
||||||
|
my $distance = fastdistance($nick1, $nick2);
|
||||||
|
my $length = (length $nick1 > length $nick2) ? length $nick1 : length $nick2;
|
||||||
|
if ($distance > 1 && ($nick1 !~ /^guest/ && $nick2 !~ /^guest/) && ($host1 !~ /unaffiliated/ || $host2 !~ /unaffiliated/)) {
|
||||||
|
$self->{pbot}->{logger}->log("[$nick1][$nick2] $distance / $length\n");
|
||||||
|
$self->{pbot}->{conn}->privmsg("pragma-", "Possible bogus link: ($id) $host1 vs ($alias) $host2");
|
||||||
|
$self->{pbot}->{logger}->log("Possible bogus link: ($id) $host1 vs ($alias) $host2\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1530,10 +1587,8 @@ sub get_also_known_as {
|
|||||||
return %akas;
|
return %akas;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $sth = $self->{dbh}->prepare('SELECT id, hostmask FROM Hostmasks WHERE hostmask LIKE ? ESCAPE "\" ORDER BY last_seen DESC');
|
my $sth = $self->{dbh}->prepare('SELECT id, hostmask FROM Hostmasks WHERE nick = ? ORDER BY last_seen DESC');
|
||||||
my $qnick = quotemeta $nick;
|
$sth->execute($nick);
|
||||||
$qnick =~ s/_/\\_/g;
|
|
||||||
$sth->execute("$qnick!%");
|
|
||||||
my $rows = $sth->fetchall_arrayref({});
|
my $rows = $sth->fetchall_arrayref({});
|
||||||
|
|
||||||
foreach my $row (@$rows) {
|
foreach my $row (@$rows) {
|
||||||
@ -1545,8 +1600,8 @@ sub get_also_known_as {
|
|||||||
|
|
||||||
foreach my $hostmask (keys %hostmasks) {
|
foreach my $hostmask (keys %hostmasks) {
|
||||||
my ($host) = $hostmask =~ /(\@.*)$/;
|
my ($host) = $hostmask =~ /(\@.*)$/;
|
||||||
$sth = $self->{dbh}->prepare('SELECT id FROM Hostmasks WHERE hostmask LIKE ?');
|
$sth = $self->{dbh}->prepare('SELECT id FROM Hostmasks WHERE host = ?');
|
||||||
$sth->execute("\%$host");
|
$sth->execute($host);
|
||||||
$rows = $sth->fetchall_arrayref({});
|
$rows = $sth->fetchall_arrayref({});
|
||||||
|
|
||||||
foreach my $row (@$rows) {
|
foreach my $row (@$rows) {
|
||||||
|
@ -246,7 +246,7 @@ sub on_nickchange {
|
|||||||
sub on_join_channel {
|
sub on_join_channel {
|
||||||
my ($self, $event_type, $event) = @_;
|
my ($self, $event_type, $event) = @_;
|
||||||
$self->remove_channel($event->{channel}); # clear nicklist to remove any stale nicks before repopulating with namreplies
|
$self->remove_channel($event->{channel}); # clear nicklist to remove any stale nicks before repopulating with namreplies
|
||||||
#$self->send_who($event->{channel});
|
$self->send_who($event->{channel});
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,6 +265,7 @@ sub on_whospcrpl {
|
|||||||
my ($self, $event_type, $event) = @_;
|
my ($self, $event_type, $event) = @_;
|
||||||
|
|
||||||
my ($ignored, $id, $user, $host, $nick, $nickserv, $gecos) = @{$event->{event}->{args}};
|
my ($ignored, $id, $user, $host, $nick, $nickserv, $gecos) = @{$event->{event}->{args}};
|
||||||
|
($nick, $user, $host) = $self->{pbot}->{irchandlers}->normalize_hostmask($nick, $user, $host);
|
||||||
$last_who_id = $id;
|
$last_who_id = $id;
|
||||||
my $hostmask = "$nick!$user\@$host";
|
my $hostmask = "$nick!$user\@$host";
|
||||||
my $channel = $who_cache{$id};
|
my $channel = $who_cache{$id};
|
||||||
|
@ -56,6 +56,8 @@ sub on_public {
|
|||||||
my ($nick, $user, $host, $msg) = ($event->{event}->nick, $event->{event}->user, $event->{event}->host, $event->{event}->args);
|
my ($nick, $user, $host, $msg) = ($event->{event}->nick, $event->{event}->user, $event->{event}->host, $event->{event}->args);
|
||||||
my $channel = $event->{event}->{to}[0];
|
my $channel = $event->{event}->{to}[0];
|
||||||
|
|
||||||
|
($nick, $user, $host) = $self->{pbot}->{irchandlers}->normalize_hostmask($nick, $user, $host);
|
||||||
|
|
||||||
return 0 if not $self->{pbot}->{registry}->get_value('antiflood', 'antirepeat');
|
return 0 if not $self->{pbot}->{registry}->get_value('antiflood', 'antirepeat');
|
||||||
|
|
||||||
my $antirepeat = $self->{pbot}->{registry}->get_value($channel, 'antirepeat');
|
my $antirepeat = $self->{pbot}->{registry}->get_value($channel, 'antirepeat');
|
||||||
|
Loading…
Reference in New Issue
Block a user