diff --git a/lib/PBot/Core/AntiFlood.pm b/lib/PBot/Core/AntiFlood.pm index 0e101108..ba53df1a 100644 --- a/lib/PBot/Core/AntiFlood.pm +++ b/lib/PBot/Core/AntiFlood.pm @@ -747,7 +747,7 @@ sub check_bans { { $banmask = "\$a:$current_nickserv_account"; } else { - if ($host =~ m{^gateway/web/irccloud.com/}) { $banmask = "*!$user\@gateway/web/irccloud.com/*"; } + if ($host =~ m{\.irccloud.com$}) { $banmask = "*!$user\@*.irccloud.com"; } elsif ($host =~ m{^nat/([^/]+)/}) { $banmask = "*!$user\@nat/$1/*"; } else { $banmask = "*!*\@$host"; diff --git a/lib/PBot/Core/BanList.pm b/lib/PBot/Core/BanList.pm index 20127935..06680ed6 100644 --- a/lib/PBot/Core/BanList.pm +++ b/lib/PBot/Core/BanList.pm @@ -281,6 +281,13 @@ sub get_baninfo { [ $self->{pbot}->{registry}->get_value('banlist', 'mute_mode_char'), $self->{quietlist} ], ); + my $is_irccloud = $host =~ m{\.irccloud.com$}; + my $irccloud_uid; + + if ($is_irccloud) { + ($irccloud_uid) = $user =~ /id(\d+)$/; + } + foreach my $entry (@lists) { my ($mode, $list) = @$entry; foreach my $banmask ($list->get_keys($channel)) { @@ -298,9 +305,12 @@ sub get_baninfo { $banned = 1 if defined $nickserv and $nickserv eq $ban_nickserv; $banned = 1 if $mask =~ m/^$banmask_regex$/i; - if ($banmask =~ m{\@gateway/web/irccloud.com} and $host =~ m{^gateway/web/irccloud.com}) { + # irccloud hosts are disambiguated by the user field which can be uid{N}+ or sid{N}+ + # where {N}+ are 1 or more integer digits + if ($is_irccloud && $banmask =~ m{\@.*\.irccloud.com$}) { my ($bannick, $banuser, $banhost) = $banmask =~ m/([^!]+)!([^@]+)@(.*)/; - $banned = $1 if lc $user eq lc $banuser; + my ($banuid) = $banuser =~ /id(\d+)$/; + $banned = $1 if $irccloud_uid == $banuid; } if ($banned) { diff --git a/lib/PBot/Core/MessageHistory/Storage/SQLite.pm b/lib/PBot/Core/MessageHistory/Storage/SQLite.pm index 293f3051..63f930ff 100644 --- a/lib/PBot/Core/MessageHistory/Storage/SQLite.pm +++ b/lib/PBot/Core/MessageHistory/Storage/SQLite.pm @@ -307,8 +307,9 @@ sub add_message_account { my $id; my ($nick, $user, $host) = $mask =~ m/^([^!]+)!([^@]+)@(.*)/; - if (defined $link_id and $link_type == $self->{alias_type}->{STRONG}) { $id = $link_id; } - else { + if (defined $link_id and $link_type == $self->{alias_type}->{STRONG}) { + $id = $link_id; + } else { $id = $self->get_new_account_id(); $self->{pbot}->{logger}->log("Got new account id $id\n"); } @@ -322,7 +323,6 @@ sub add_message_account { $sth = $self->{dbh}->prepare('INSERT INTO Accounts VALUES (?, ?, ?)'); $sth->execute($id, $mask, ""); $self->{new_entries}++; - $self->{pbot}->{logger}->log("Added new account $id for mask $mask\n"); } }; @@ -602,9 +602,10 @@ sub get_message_account { return ($rows, 0); } # end nick-change - if ($host =~ m{^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"); + if ($host =~ m{.*\.irccloud.com$}) { + my ($irccloud_uid) = $user =~ /id(\d+)$/; + $sth = $self->{dbh}->prepare('SELECT id, hostmask, last_seen FROM Hostmasks WHERE host LIKE ? ORDER BY last_seen DESC'); + $sth->execute("\%id-${irccloud_uid}\%irccloud.com"); my $rows = $sth->fetchall_arrayref({}); if (defined $rows->[0]) { $self->{pbot}->{logger}->log("5: irccloud match: $rows->[0]->{id}: $rows->[0]->{hostmask}\n"); diff --git a/lib/PBot/VERSION.pm b/lib/PBot/VERSION.pm index 68f43c0e..ffdb2938 100644 --- a/lib/PBot/VERSION.pm +++ b/lib/PBot/VERSION.pm @@ -25,7 +25,7 @@ use PBot::Imports; # These are set by the /misc/update_version script use constant { BUILD_NAME => "PBot", - BUILD_REVISION => 4600, + BUILD_REVISION => 4601, BUILD_DATE => "2023-01-21", };