diff --git a/PBot/BanTracker.pm b/PBot/BanTracker.pm index 75bcea51..1023addc 100644 --- a/PBot/BanTracker.pm +++ b/PBot/BanTracker.pm @@ -102,6 +102,8 @@ sub get_baninfo { $self->{pbot}->{logger}->log("[get-baninfo] Getting baninfo for $mask in $channel using account " . (defined $account ? $account : "[undefined]") . "\n"); } + my ($nick, $user, $host) = $mask =~ m/([^!]+)!([^@]+)@(.*)/; + foreach my $mode (keys %{ $self->{banlist}{$channel} }) { foreach my $banmask (keys %{ $self->{banlist}{$channel}{$mode} }) { if($banmask =~ m/^\$a:(.*)/) { @@ -115,7 +117,20 @@ sub get_baninfo { $banmask =~ s/\\\*/.*?/g; $banmask =~ s/\\\?/./g; - if((defined $account and $account eq $ban_account) or $mask =~ m/^$banmask$/i) { + my $banned; + + $banned = 1 if defined $account and $account eq $ban_account; + $banned = 1 if $mask =~ m/^$banmask$/i; + + if ($banmask_key =~ m{\@gateway/web/irccloud.com} and $host =~ m{^gateway/web/irccloud.com}) { + my ($bannick, $banuser, $banhost) = $banmask_key =~ m/([^!]+)!([^@]+)@(.*)/; + + if (lc $user eq lc $banuser) { + $banned = 1; + } + } + + if ($banned) { if(not defined $bans) { $bans = []; } diff --git a/PBot/MessageHistory_SQLite.pm b/PBot/MessageHistory_SQLite.pm index 344b9a5e..3fc2b81f 100644 --- a/PBot/MessageHistory_SQLite.pm +++ b/PBot/MessageHistory_SQLite.pm @@ -308,6 +308,16 @@ sub get_message_account { my $rows = eval { my $sth = $self->{dbh}->prepare('SELECT id, hostmask FROM Hostmasks WHERE hostmask LIKE ? ESCAPE "\" ORDER BY last_seen DESC'); + + if ($host =~ m{^gateway/web/irccloud.com}) { + $sth->bind_param(1, "%!$user\@gateway/web/irccloud.com/%"); + $sth->execute(); + my $rows = $sth->fetchall_arrayref({}); + if (defined $rows->[0]) { + return $rows; + } + } + my $qnick = quotemeta (defined $link_nick ? $link_nick : $nick); $qnick =~ s/_/\\_/g; $sth->bind_param(1, "$qnick!%");