mirror of
https://github.com/pragma-/pbot.git
synced 2024-11-02 10:09:32 +01:00
Allow recursive expansion of adlib variables
Rename $count to $depth to reflect recursion
This commit is contained in:
parent
383c194966
commit
ae3791815b
@ -285,7 +285,7 @@ sub find_factoid {
|
|||||||
next unless $from eq lc $channel or $channel eq '.*';
|
next unless $from eq lc $channel or $channel eq '.*';
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach my $trigger (keys %{ $self->{factoids}->hash->{$channel} }) {
|
foreach my $trigger (sort keys %{ $self->{factoids}->hash->{$channel} }) {
|
||||||
if($self->{factoids}->hash->{$channel}->{$trigger}->{type} eq 'regex') {
|
if($self->{factoids}->hash->{$channel}->{$trigger}->{type} eq 'regex') {
|
||||||
$self->{pbot}->{logger}->log("checking regex $string =~ m/$trigger/i\n") if $debug;
|
$self->{pbot}->{logger}->log("checking regex $string =~ m/$trigger/i\n") if $debug;
|
||||||
if($string =~ m/$trigger/i) {
|
if($string =~ m/$trigger/i) {
|
||||||
@ -323,11 +323,12 @@ sub find_factoid {
|
|||||||
|
|
||||||
sub interpreter {
|
sub interpreter {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my ($from, $nick, $user, $host, $count, $keyword, $arguments, $tonick, $ref_from) = @_;
|
my ($from, $nick, $user, $host, $depth, $keyword, $arguments, $tonick, $ref_from) = @_;
|
||||||
my ($result, $channel);
|
my ($result, $channel);
|
||||||
my $pbot = $self->{pbot};
|
my $pbot = $self->{pbot};
|
||||||
|
|
||||||
return undef if not length $keyword or $count > $self->{pbot}->{registry}->get_value('interpreter', 'max_recursion');
|
$self->{pbot}->{logger}->log("enter factoid interpreter [$keyword][$arguments]\n");
|
||||||
|
return undef if not length $keyword or $depth > $self->{pbot}->{registry}->get_value('interpreter', 'max_recursion');
|
||||||
|
|
||||||
$from = lc $from;
|
$from = lc $from;
|
||||||
|
|
||||||
@ -381,12 +382,12 @@ sub interpreter {
|
|||||||
# if there's just one other channel that has this keyword, trigger that instance
|
# if there's just one other channel that has this keyword, trigger that instance
|
||||||
elsif($found == 1) {
|
elsif($found == 1) {
|
||||||
$pbot->{logger}->log("Found '$original_keyword' as '$fwd_trig' in [$fwd_chan]\n");
|
$pbot->{logger}->log("Found '$original_keyword' as '$fwd_trig' in [$fwd_chan]\n");
|
||||||
return $pbot->{factoids}->interpreter($from, $nick, $user, $host, ++$count, $fwd_trig, $arguments, $tonick, $fwd_chan);
|
return $pbot->{factoids}->interpreter($from, $nick, $user, $host, ++$depth, $fwd_trig, $arguments, $tonick, $fwd_chan);
|
||||||
}
|
}
|
||||||
# otherwise keyword hasn't been found, display similiar matches for all channels
|
# otherwise keyword hasn't been found, display similiar matches for all channels
|
||||||
else {
|
else {
|
||||||
# if a non-nick argument was supplied, e.g., a sentence using the bot's nick, don't say anything
|
# if a non-nick argument was supplied, e.g., a sentence using the bot's nick, don't say anything
|
||||||
return "" if length $arguments and $arguments !~ /^[^.+-, ]{1,20}$/;
|
return "" if length $arguments and not $self->{pbot}->{nicklist}->is_present($from, $arguments);
|
||||||
|
|
||||||
my $matches = $self->{commands}->factfind($from, $nick, $user, $host, quotemeta $original_keyword);
|
my $matches = $self->{commands}->factfind($from, $nick, $user, $host, quotemeta $original_keyword);
|
||||||
|
|
||||||
@ -424,6 +425,8 @@ sub interpreter {
|
|||||||
|
|
||||||
my $action = $self->{factoids}->hash->{$channel}->{$keyword}->{action};
|
my $action = $self->{factoids}->hash->{$channel}->{$keyword}->{action};
|
||||||
|
|
||||||
|
$self->{pbot}->{logger}->log("got action [$action]\n");
|
||||||
|
|
||||||
if(length $arguments) {
|
if(length $arguments) {
|
||||||
if(exists $self->{factoids}->hash->{$channel}->{$keyword}->{action_with_args}) {
|
if(exists $self->{factoids}->hash->{$channel}->{$keyword}->{action_with_args}) {
|
||||||
$action = $self->{factoids}->hash->{$channel}->{$keyword}->{action_with_args};
|
$action = $self->{factoids}->hash->{$channel}->{$keyword}->{action_with_args};
|
||||||
@ -478,6 +481,8 @@ sub interpreter {
|
|||||||
$action =~ s/\$nick/$nick/g;
|
$action =~ s/\$nick/$nick/g;
|
||||||
$action =~ s/\$channel/$from/g;
|
$action =~ s/\$channel/$from/g;
|
||||||
|
|
||||||
|
my $adlib_recursion = 0;
|
||||||
|
while ($action =~ /[^\\]\$([a-zA-Z0-9_\-]+)/ and ++$adlib_recursion < 5) {
|
||||||
while ($action =~ /[^\\]\$([a-zA-Z0-9_\-]+)/g) {
|
while ($action =~ /[^\\]\$([a-zA-Z0-9_\-]+)/g) {
|
||||||
my $v = $1;
|
my $v = $1;
|
||||||
next if $v =~ m/^[0-9]+$/;
|
next if $v =~ m/^[0-9]+$/;
|
||||||
@ -497,6 +502,7 @@ sub interpreter {
|
|||||||
$action =~ s/\$$var/$var/g;
|
$action =~ s/\$$var/$var/g;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$action =~ s/\\\$/\$/g;
|
$action =~ s/\\\$/\$/g;
|
||||||
|
|
||||||
@ -510,7 +516,7 @@ sub interpreter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$pbot->{logger}->log("[" . (defined $from ? $from : "stdin") . "] ($nick!$user\@$host) [$keyword] aliased to: [$command]\n");
|
$pbot->{logger}->log("[" . (defined $from ? $from : "stdin") . "] ($nick!$user\@$host) [$keyword] aliased to: [$command]\n");
|
||||||
return $pbot->{interpreter}->interpret($from, $nick, $user, $host, $count, $command, $tonick);
|
return $pbot->{interpreter}->interpret($from, $nick, $user, $host, $depth, $command, $tonick);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($self->{factoids}->hash->{$channel}->{$keyword}->{enabled} == 0) {
|
if($self->{factoids}->hash->{$channel}->{$keyword}->{enabled} == 0) {
|
||||||
@ -574,7 +580,7 @@ sub interpreter {
|
|||||||
$cmd = $action;
|
$cmd = $action;
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = $pbot->{interpreter}->interpret($from, $nick, $user, $host, $count, $cmd, $tonick);
|
$result = $pbot->{interpreter}->interpret($from, $nick, $user, $host, $depth, $cmd, $tonick);
|
||||||
return $result;
|
return $result;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user