3
0
mirror of https://github.com/pragma-/pbot.git synced 2025-05-30 11:27:32 +02:00

Improve handling of word-boundaries in searches

This commit is contained in:
Pragmatic Software 2015-08-16 05:20:57 -07:00
parent 593fe59263
commit 3fa12c208e
2 changed files with 15 additions and 5 deletions

@ -891,6 +891,10 @@ sub factfind {
$last_chan = ""; $last_chan = "";
$i = 0; $i = 0;
eval { eval {
my $regex = ($arguments =~ m/^\w/) ? '\b' : '\B';
$regex .= quotemeta $arguments;
$regex .= ($arguments =~ m/\w$/) ? '\b' : '\B';
foreach my $chan (sort keys %{ $factoids }) { foreach my $chan (sort keys %{ $factoids }) {
next if defined $channel and $chan !~ /$channel/i; next if defined $channel and $chan !~ /$channel/i;
foreach my $trigger (sort keys %{ $factoids->{$chan} }) { foreach my $trigger (sort keys %{ $factoids->{$chan} }) {
@ -898,7 +902,7 @@ sub factfind {
if($factoids->{$chan}->{$trigger}->{owner} =~ /$owner/i if($factoids->{$chan}->{$trigger}->{owner} =~ /$owner/i
&& $factoids->{$chan}->{$trigger}->{ref_user} =~ /$refby/i && $factoids->{$chan}->{$trigger}->{ref_user} =~ /$refby/i
&& (exists $factoids->{$chan}->{$trigger}->{edited_by} ? $factoids->{$chan}->{$trigger}->{edited_by} =~ /$editby/i : 1)) { && (exists $factoids->{$chan}->{$trigger}->{edited_by} ? $factoids->{$chan}->{$trigger}->{edited_by} =~ /$editby/i : 1)) {
next if($arguments ne "" && $factoids->{$chan}->{$trigger}->{action} !~ /\b$arguments\b/i && $trigger !~ /\b$arguments\b/i); next if($arguments ne "" && $factoids->{$chan}->{$trigger}->{action} !~ /$regex/i && $trigger !~ /$regex/i);
$i++; $i++;

@ -508,7 +508,10 @@ sub get_message_context {
my ($messages_before, $messages_after, $messages_count); my ($messages_before, $messages_after, $messages_count);
if (defined $count and $count > 1) { if (defined $count and $count > 1) {
my $regex = '\b' . quotemeta($text) . '\b'; my $regex = '(?i)';
$regex .= ($text =~ m/^\w/) ? '\b' : '\B';
$regex .= quotemeta $text;
$regex .= ($text =~ m/\w$/) ? '\b' : '\B';
$messages_count = eval { $messages_count = eval {
my $sth; my $sth;
@ -518,13 +521,13 @@ sub get_message_context {
$sth->bind_param(2, $message->{channel}); $sth->bind_param(2, $message->{channel});
$sth->bind_param(3, $regex); $sth->bind_param(3, $regex);
$sth->bind_param(4, $message->{timestamp}); $sth->bind_param(4, $message->{timestamp});
$sth->bind_param(5, $count); $sth->bind_param(5, $count - 1);
} else { } else {
$sth = $self->{dbh}->prepare('SELECT id, msg, mode, timestamp, channel FROM Messages WHERE channel = ? AND msg REGEXP ? AND timestamp < ? AND mode = 0 ORDER BY timestamp DESC LIMIT ?'); $sth = $self->{dbh}->prepare('SELECT id, msg, mode, timestamp, channel FROM Messages WHERE channel = ? AND msg REGEXP ? AND timestamp < ? AND mode = 0 ORDER BY timestamp DESC LIMIT ?');
$sth->bind_param(1, $message->{channel}); $sth->bind_param(1, $message->{channel});
$sth->bind_param(2, $regex); $sth->bind_param(2, $regex);
$sth->bind_param(3, $message->{timestamp}); $sth->bind_param(3, $message->{timestamp});
$sth->bind_param(4, $count); $sth->bind_param(4, $count - 1);
} }
$sth->execute(); $sth->execute();
return [reverse @{$sth->fetchall_arrayref({})}]; return [reverse @{$sth->fetchall_arrayref({})}];
@ -634,7 +637,10 @@ sub recall_message_by_count {
sub recall_message_by_text { sub recall_message_by_text {
my ($self, $id, $channel, $text, $ignore_command) = @_; my ($self, $id, $channel, $text, $ignore_command) = @_;
my $regex = '\b' . quotemeta($text) . '\b'; my $regex = '(?i)';
$regex .= ($text =~ m/^\w/) ? '\b' : '\B';
$regex .= quotemeta $text;
$regex .= ($text =~ m/\w$/) ? '\b' : '\B';
my $messages; my $messages;