mirror of
https://github.com/pragma-/pbot.git
synced 2025-01-23 02:24:25 +01:00
Interpreter: support array of positional arguments
This commit is contained in:
parent
99e0182e11
commit
6454ff82aa
@ -16,7 +16,7 @@ use base 'PBot::Registerable';
|
||||
|
||||
use Time::HiRes qw/gettimeofday/;
|
||||
use Time::Duration;
|
||||
use Text::Balanced qw/extract_bracketed/;
|
||||
use Text::Balanced qw/extract_bracketed extract_quotelike/;
|
||||
use Carp ();
|
||||
|
||||
use PBot::Utils::ValidateString;
|
||||
@ -106,32 +106,6 @@ sub process_line {
|
||||
my $cmd_text = $text;
|
||||
$cmd_text =~ s/^\/me\s+//;
|
||||
|
||||
=cut
|
||||
# check for code compiler invocation
|
||||
my $has_code;
|
||||
if ($cmd_text =~ m/^(?:$botnick.?)?\s*{\s*(.+)\s*}\s*$/) {
|
||||
$has_code = $1;
|
||||
$preserve_whitespace = 1;
|
||||
} elsif ($cmd_text =~ m/^\s*($nick_regex)[,:]*\s*{\s*(.+)\s*}\s*$/) {
|
||||
my $possible_nick_override = $1;
|
||||
$has_code = $2 if $possible_nick_override !~ /^(?:enum|struct|union)$/;
|
||||
$preserve_whitespace = 1;
|
||||
$nick_override = $self->{pbot}->{nicklist}->is_present($from, $possible_nick_override);
|
||||
}
|
||||
|
||||
if (defined $has_code) {
|
||||
$processed += 1000; # hint to other plugins that this message has been handled
|
||||
if($pbot->{registry}->get_value('general', 'compile_blocks') and not $pbot->{registry}->get_value($from, 'no_compile_blocks')
|
||||
and not grep { $from =~ /$_/i } $pbot->{registry}->get_value('general', 'compile_blocks_ignore_channels')
|
||||
and grep { $from =~ /$_/i } $pbot->{registry}->get_value('general', 'compile_blocks_channels')) {
|
||||
if (not defined $nick_override or (defined $nick_override and $nick_override != 0)) {
|
||||
return "Using {} to compile code is temporarily disabled. Use the `cc` command instead.";
|
||||
#return $pbot->{factoids}->{factoidmodulelauncher}->execute_module($from, undef, $nick, $user, $host, $text, "compiler_block", $from, '{', (defined $nick_override ? $nick_override : $nick) . " $from $has_code }", $preserve_whitespace);
|
||||
}
|
||||
}
|
||||
}
|
||||
=cut
|
||||
|
||||
# check for bot command invocation
|
||||
my @commands;
|
||||
my $command;
|
||||
@ -344,11 +318,61 @@ sub interpret {
|
||||
# unescape any escaped pipes
|
||||
$arguments =~ s/\\\|\s*\{/| {/g if defined $arguments;
|
||||
|
||||
# set arguments as a plain string
|
||||
$stuff->{arguments} = $arguments;
|
||||
|
||||
# set arguments as a positional array
|
||||
my @args = split / /, $arguments;
|
||||
my @pargs;
|
||||
|
||||
while (@args) {
|
||||
my $arg = shift @args;
|
||||
|
||||
if ($arg =~ /^["']/) {
|
||||
my $string = $arg;
|
||||
if (@args) {
|
||||
$string .= ' ';
|
||||
$string .= join(' ', @args);
|
||||
}
|
||||
my ($extracted, $rest) = extract_quotelike $string;
|
||||
if (defined $extracted) {
|
||||
# strip quote characters
|
||||
$extracted =~ s/^(.)//;
|
||||
$extracted =~ s/$1$//;
|
||||
push @pargs, $extracted;
|
||||
$rest =~ s/^ //;
|
||||
@args = split / /, $rest;
|
||||
} else {
|
||||
# mismatched quotes, shove the remainder as the last positional argument
|
||||
push @pargs, $rest;
|
||||
last;
|
||||
}
|
||||
} else {
|
||||
push @pargs, $arg;
|
||||
}
|
||||
}
|
||||
|
||||
$stuff->{argumentspos} = \@pargs;
|
||||
|
||||
return $self->SUPER::execute_all($stuff);
|
||||
}
|
||||
|
||||
# splits array of arguments into array with overflow arguments filling up last position
|
||||
# split_args(qw/dog cat bird hamster/, 3) => ("dog", "cat", "bird hamster")
|
||||
sub split_args {
|
||||
my ($self, $args, $count) = @_;
|
||||
my @result;
|
||||
|
||||
while (--$count) {
|
||||
my $arg = shift @$args;
|
||||
push @result, $arg;
|
||||
}
|
||||
|
||||
my $rest = join ' ', @$args;
|
||||
push @result, $rest;
|
||||
return @result;
|
||||
}
|
||||
|
||||
sub truncate_result {
|
||||
my ($self, $from, $nick, $text, $original_result, $result, $paste) = @_;
|
||||
my $max_msg_len = $self->{pbot}->{registry}->get_value('irc', 'max_msg_len');
|
||||
|
Loading…
Reference in New Issue
Block a user