3
0
mirror of https://github.com/pragma-/pbot.git synced 2025-02-02 15:34:05 +01:00

find_factoid now takes exact_trigger parameter; this fixes confusion with regex factoids

This commit is contained in:
Pragmatic Software 2010-06-27 02:52:06 +00:00
parent 6824a61fd1
commit 6d3fc7f628
3 changed files with 24 additions and 22 deletions

View File

@ -49,16 +49,18 @@ sub initialize {
$pbot->commands->register(sub { return $self->factalias(@_) }, "factalias", 0); $pbot->commands->register(sub { return $self->factalias(@_) }, "factalias", 0);
$pbot->commands->register(sub { return $self->call_factoid(@_) }, "fact", 0); $pbot->commands->register(sub { return $self->call_factoid(@_) }, "fact", 0);
$pbot->commands->register(sub { return $self->list(@_) }, "list", 0); # the following commands have not yet been updated to use the new factoid structure
$pbot->commands->register(sub { return $self->add_regex(@_) }, "regex", 0); # DO NOT USE!! Factoid corruption may occur.
$pbot->commands->register(sub { return $self->histogram(@_) }, "histogram", 0); $pbot->commands->register(sub { return $self->list(@_) }, "list", 999);
$pbot->commands->register(sub { return $self->top20(@_) }, "top20", 0); $pbot->commands->register(sub { return $self->add_regex(@_) }, "regex", 999);
$pbot->commands->register(sub { return $self->count(@_) }, "count", 0); $pbot->commands->register(sub { return $self->histogram(@_) }, "histogram", 999);
$pbot->commands->register(sub { return $self->find(@_) }, "find", 0); $pbot->commands->register(sub { return $self->top20(@_) }, "top20", 999);
$pbot->commands->register(sub { return $self->load_module(@_) }, "load", 50); $pbot->commands->register(sub { return $self->count(@_) }, "count", 999);
$pbot->commands->register(sub { return $self->unload_module(@_) }, "unload", 50); $pbot->commands->register(sub { return $self->find(@_) }, "find", 999);
$pbot->commands->register(sub { return $self->enable_command(@_) }, "enable", 10); $pbot->commands->register(sub { return $self->load_module(@_) }, "load", 999);
$pbot->commands->register(sub { return $self->disable_command(@_) }, "disable", 10); $pbot->commands->register(sub { return $self->unload_module(@_) }, "unload", 999);
$pbot->commands->register(sub { return $self->enable_command(@_) }, "enable", 999);
$pbot->commands->register(sub { return $self->disable_command(@_) }, "disable", 999);
} }
sub call_factoid { sub call_factoid {
@ -267,7 +269,7 @@ sub factadd {
return "/msg $nick Usage: factadd <channel> <keyword> is <factoid>"; return "/msg $nick Usage: factadd <channel> <keyword> is <factoid>";
} }
my ($channel, $trigger) = $self->{pbot}->factoids->find_factoid($from_chan, $keyword, undef, 1); my ($channel, $trigger) = $self->{pbot}->factoids->find_factoid($from_chan, $keyword, undef, 1, 1);
if(defined $trigger) { if(defined $trigger) {
$self->{pbot}->logger->log("$nick!$user\@$host attempt to overwrite $keyword\n"); $self->{pbot}->logger->log("$nick!$user\@$host attempt to overwrite $keyword\n");
@ -292,7 +294,7 @@ sub factrem {
return "/msg $nick Usage: factrem <channel> <keyword>"; return "/msg $nick Usage: factrem <channel> <keyword>";
} }
my ($channel, $trigger) = $self->{pbot}->factoids->find_factoid($from_chan, $from_trigger, undef, 1); my ($channel, $trigger) = $self->{pbot}->factoids->find_factoid($from_chan, $from_trigger, undef, 1, 1);
if(not defined $trigger) { if(not defined $trigger) {
return "/msg $nick $from_trigger not found in channel $from_chan."; return "/msg $nick $from_trigger not found in channel $from_chan.";
@ -351,7 +353,7 @@ sub factshow {
return "Usage: factshow <channel> <trigger>"; return "Usage: factshow <channel> <trigger>";
} }
my ($channel, $trigger) = $self->{pbot}->factoids->find_factoid($chan, $trig); my ($channel, $trigger) = $self->{pbot}->factoids->find_factoid($chan, $trig, undef, 0, 1);
if(not defined $trigger) { if(not defined $trigger) {
return "/msg $nick '$trig' not found in channel '$chan'"; return "/msg $nick '$trig' not found in channel '$chan'";
@ -375,7 +377,7 @@ sub factinfo {
return "Usage: factinfo <channel> <trigger>"; return "Usage: factinfo <channel> <trigger>";
} }
my ($channel, $trigger) = $self->{pbot}->factoids->find_factoid($chan, $trig); my ($channel, $trigger) = $self->{pbot}->factoids->find_factoid($chan, $trig, undef, 0, 1);
if(not defined $trigger) { if(not defined $trigger) {
return "'$trig' not found in channel '$chan'"; return "'$trig' not found in channel '$chan'";
@ -592,7 +594,7 @@ sub factchange {
return "Usage: factchange <channel> <keyword> s/<pattern>/<replacement>/"; return "Usage: factchange <channel> <keyword> s/<pattern>/<replacement>/";
} }
($channel, $trigger) = $self->{pbot}->factoids->find_factoid($channel, $keyword); ($channel, $trigger) = $self->{pbot}->factoids->find_factoid($channel, $keyword, undef, 0, 1);
if(not defined $trigger) { if(not defined $trigger) {
return "/msg $nick $keyword not found in channel $from."; return "/msg $nick $keyword not found in channel $from.";

View File

@ -154,7 +154,7 @@ sub export_factoids {
} }
sub find_factoid { sub find_factoid {
my ($self, $from, $keyword, $arguments, $exact_channel) = @_; my ($self, $from, $keyword, $arguments, $exact_channel, $exact_trigger) = @_;
$from = '.*' if not defined $from; $from = '.*' if not defined $from;
@ -168,7 +168,7 @@ sub find_factoid {
next unless $from =~ m/$channel/i; next unless $from =~ m/$channel/i;
} }
foreach my $trigger (keys %{ $self->factoids->hash->{$channel} }) { foreach my $trigger (keys %{ $self->factoids->hash->{$channel} }) {
if($self->factoids->hash->{$channel}->{$trigger}->{type} eq 'regex') { if(not $exact_trigger and $self->factoids->hash->{$channel}->{$trigger}->{type} eq 'regex') {
if($string =~ m/$trigger/i) { if($string =~ m/$trigger/i) {
return ($channel, $trigger); return ($channel, $trigger);
} }
@ -229,7 +229,7 @@ sub interpreter {
} }
if(exists $self->factoids->hash->{$channel}->{$keyword}->{last_referenced_on}) { if(exists $self->factoids->hash->{$channel}->{$keyword}->{last_referenced_on}) {
if(gettimeofday - $self->factoids->hash->{$channel}->{$keyword}->{last_referenced_on} <= $self->factoids->hash->{$channel}->{$keyword}->{rate_limit}) { if(gettimeofday - $self->factoids->hash->{$channel}->{$keyword}->{last_referenced_on} < $self->factoids->hash->{$channel}->{$keyword}->{rate_limit}) {
return "/msg $nick '$keyword' is rate-limited; try again in " . ($self->factoids->hash->{$channel}->{$keyword}->{rate_limit} - int(gettimeofday - $self->factoids->hash->{$channel}->{$keyword}->{last_referenced_on})) . " seconds."; return "/msg $nick '$keyword' is rate-limited; try again in " . ($self->factoids->hash->{$channel}->{$keyword}->{rate_limit} - int(gettimeofday - $self->factoids->hash->{$channel}->{$keyword}->{last_referenced_on})) . " seconds.";
} }
} }
@ -306,7 +306,7 @@ sub interpreter {
$result =~ s/\$nick/$nick/g; $result =~ s/\$nick/$nick/g;
while ($result =~ /[^\\]\$([a-zA-Z0-9_\-\.]+)/g) { while ($result =~ /[^\\]\$([a-zA-Z0-9_\-\.]+)/g) {
my ($var_chan, $var) = $self->find_factoid($from, $1); my ($var_chan, $var) = $self->find_factoid($from, $1, undef, 0, 1);
if(defined $var && $self->factoids->hash->{$var_chan}->{$var}->{type} eq 'text') { if(defined $var && $self->factoids->hash->{$var_chan}->{$var}->{type} eq 'text') {
my $change = $self->factoids->hash->{$var_chan}->{$var}->{action}; my $change = $self->factoids->hash->{$var_chan}->{$var}->{action};
@ -340,7 +340,7 @@ sub interpreter {
my $string = "$keyword" . (defined $arguments ? " $arguments" : ""); my $string = "$keyword" . (defined $arguments ? " $arguments" : "");
if($string =~ m/$keyword/i) { if($string =~ m/$keyword/i) {
$self->{pbot}->logger->log("[$string] matches [$keyword] - calling [" . $self->factoids->hash->{$channel}->{$keyword}->{action} . "$']\n"); $self->{pbot}->logger->log("[$string] matches [$keyword] - calling [" . $self->factoids->hash->{$channel}->{$keyword}->{action} . "$']\n");
my $cmd = "${ $self->factoids }{$keyword}{regex}$'"; my $cmd = $self->factoids->hash->{$channel}->{$keyword}->{action} . $';
my ($a, $b, $c, $d, $e, $f, $g, $h, $i, $before, $after) = ($1, $2, $3, $4, $5, $6, $7, $8, $9, $`, $'); my ($a, $b, $c, $d, $e, $f, $g, $h, $i, $before, $after) = ($1, $2, $3, $4, $5, $6, $7, $8, $9, $`, $');
$cmd =~ s/\$1/$a/g; $cmd =~ s/\$1/$a/g;
$cmd =~ s/\$2/$b/g; $cmd =~ s/\$2/$b/g;

View File

@ -13,8 +13,8 @@ use warnings;
# These are set automatically by the build/commit script # These are set automatically by the build/commit script
use constant { use constant {
BUILD_NAME => "PBot", BUILD_NAME => "PBot",
BUILD_REVISION => 203, BUILD_REVISION => 204,
BUILD_DATE => "2010-06-22", BUILD_DATE => "2010-06-26",
}; };
1; 1;