mirror of
https://github.com/pragma-/pbot.git
synced 2024-11-23 12:29:27 +01:00
FactoidCommands: factadd now supports -f option to force overwriting existing factoid
This commit is contained in:
parent
4959ee8838
commit
8814fdfe9b
@ -925,23 +925,44 @@ sub add_regex {
|
|||||||
sub factadd {
|
sub factadd {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my ($from, $nick, $user, $host, $arguments, $stuff) = @_;
|
my ($from, $nick, $user, $host, $arguments, $stuff) = @_;
|
||||||
my ($from_chan, $keyword, $text);
|
my ($from_chan, $keyword, $text, $force);
|
||||||
|
|
||||||
my @arglist = @{$stuff->{arglist}};
|
my @arglist = @{$stuff->{arglist}};
|
||||||
|
|
||||||
if (@arglist) {
|
if (@arglist) {
|
||||||
|
# check for -f since we allow it to be before optional channel argument
|
||||||
|
if ($arglist[0] eq '-f') {
|
||||||
|
$force = 1;
|
||||||
|
$self->{pbot}->{interpreter}->shift_arg(\@arglist);
|
||||||
|
}
|
||||||
|
|
||||||
|
# check if this is an optional channel argument
|
||||||
if ($arglist[0] =~ m/(?:^#|^global$|^\.\*$)/i) {
|
if ($arglist[0] =~ m/(?:^#|^global$|^\.\*$)/i) {
|
||||||
splice @arglist, 2, 1 if lc $arglist[2] eq 'is';
|
$from_chan = $self->{pbot}->{interpreter}->shift_arg(\@arglist);
|
||||||
($from_chan, $keyword, $text) = $self->{pbot}->{interpreter}->split_args(\@arglist, 3);
|
|
||||||
} else {
|
} else {
|
||||||
$from_chan = $from;
|
$from_chan = $from;
|
||||||
splice @arglist, 1, 1 if lc $arglist[1] eq 'is';
|
|
||||||
($keyword, $text) = $self->{pbot}->{interpreter}->split_args(\@arglist, 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# check for -f again since we also allow it to appear after the channel argument
|
||||||
|
if ($arglist[0] eq '-f') {
|
||||||
|
$force = 1;
|
||||||
|
$self->{pbot}->{interpreter}->shift_arg(\@arglist);
|
||||||
|
}
|
||||||
|
|
||||||
|
# now this is the keyword
|
||||||
|
$keyword = $self->{pbot}->{interpreter}->shift_arg(\@arglist);
|
||||||
|
|
||||||
|
# check for optional "is" and discard
|
||||||
|
if (lc $arglist[0] eq 'is') {
|
||||||
|
$self->{pbot}->{interpreter}->shift_arg(\@arglist);
|
||||||
|
}
|
||||||
|
|
||||||
|
# and the text is the remaining arguments with quotes preserved
|
||||||
|
($text) = $self->{pbot}->{interpreter}->split_args(\@arglist, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (not defined $from_chan or not defined $text or not defined $keyword) {
|
if (not defined $from_chan or not defined $text or not defined $keyword) {
|
||||||
return "Usage: factadd [channel] <keyword> <factoid>";
|
return "Usage: factadd [-f] [channel] <keyword> <factoid>; -f to force overwrite";
|
||||||
}
|
}
|
||||||
|
|
||||||
$from_chan = '.*' if $from_chan !~ /^#/;
|
$from_chan = '.*' if $from_chan !~ /^#/;
|
||||||
@ -959,10 +980,26 @@ sub factadd {
|
|||||||
|
|
||||||
my $keyword_text = $keyword =~ / / ? "\"$keyword\"" : $keyword;
|
my $keyword_text = $keyword =~ / / ? "\"$keyword\"" : $keyword;
|
||||||
|
|
||||||
my ($channel, $trigger) = $self->{pbot}->{factoids}->find_factoid($from_chan, $keyword, undef, 1, 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");
|
if (not $force) {
|
||||||
return "/say $keyword_text already exists for " . ($from_chan eq '.*' ? 'the global channel' : $from_chan) . ".";
|
$self->{pbot}->{logger}->log("$nick!$user\@$host attempt to overwrite $keyword\n");
|
||||||
|
return "/say $keyword_text already exists for " . ($from_chan eq '.*' ? 'the global channel' : $from_chan) . ".";
|
||||||
|
} else {
|
||||||
|
my $factoids = $self->{pbot}->{factoids}->{factoids}->hash;
|
||||||
|
|
||||||
|
if ($factoids->{$channel}->{$trigger}->{'locked'}) {
|
||||||
|
return "/say $trigger is locked; unlock before overwriting.";
|
||||||
|
}
|
||||||
|
|
||||||
|
my ($owner) = $factoids->{$channel}->{$trigger}->{'owner'} =~ m/([^!]+)/;
|
||||||
|
|
||||||
|
if ((lc $nick ne lc $owner) and (not $self->{pbot}->{admins}->loggedin($channel, "$nick!$user\@$host"))) {
|
||||||
|
$self->{pbot}->{logger}->log("$nick!$user\@$host attempted to overwrite $trigger [not owner]\n");
|
||||||
|
my $chan = ($channel eq '.*' ? 'the global channel' : $channel);
|
||||||
|
return "You are not the owner of $trigger for $chan; cannot overwrite";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
($channel, $trigger) = $self->{pbot}->{factoids}->find_factoid('.*', $keyword, undef, 1, 1);
|
($channel, $trigger) = $self->{pbot}->{factoids}->find_factoid('.*', $keyword, undef, 1, 1);
|
||||||
|
@ -647,10 +647,10 @@ sub make_args {
|
|||||||
push @arglist_quotes, $arg;
|
push @arglist_quotes, $arg;
|
||||||
|
|
||||||
# strip quotes from argument
|
# strip quotes from argument
|
||||||
if ($arg =~ m/^'(.*)'$/) {
|
if ($arg =~ m/^'.*'$/) {
|
||||||
$arg =~ s/^'//;
|
$arg =~ s/^'//;
|
||||||
$arg =~ s/'$//;
|
$arg =~ s/'$//;
|
||||||
} elsif ($arg =~ m/^"(.*)"$/) {
|
} elsif ($arg =~ m/^".*"$/) {
|
||||||
$arg =~ s/^"//;
|
$arg =~ s/^"//;
|
||||||
$arg =~ s/"$//;
|
$arg =~ s/"$//;
|
||||||
}
|
}
|
||||||
@ -686,10 +686,12 @@ sub split_args {
|
|||||||
my $max = $self->arglist_size($args);
|
my $max = $self->arglist_size($args);
|
||||||
|
|
||||||
my $i = $offset // 0;
|
my $i = $offset // 0;
|
||||||
do {
|
unless ($count == 1) {
|
||||||
my $arg = $args->[$i++];
|
do {
|
||||||
push @result, $arg;
|
my $arg = $args->[$i++];
|
||||||
} while (--$count > 1 and $i < $max);
|
push @result, $arg;
|
||||||
|
} while (--$count > 1 and $i < $max);
|
||||||
|
}
|
||||||
|
|
||||||
# get rest from 2nd half of arglist, which contains original quotes
|
# get rest from 2nd half of arglist, which contains original quotes
|
||||||
my $rest = join ' ', @$args[@$args / 2 + $i .. @$args - 1];
|
my $rest = join ' ', @$args[@$args / 2 + $i .. @$args - 1];
|
||||||
|
Loading…
Reference in New Issue
Block a user