mirror of
https://github.com/pragma-/pbot.git
synced 2024-12-24 11:42:35 +01:00
Add -x/-context <nick> flag to limit recall -before/-after context to that nick
This commit is contained in:
parent
90597350c5
commit
5ab76e6e6c
@ -123,7 +123,7 @@ sub recall_message {
|
||||
return "";
|
||||
}
|
||||
|
||||
my $usage = 'Usage: recall [nick [history [channel]]] [-c,channel <channel>] [-t,text,h,history <history>] [-b,before <context before>] [-a,after <context after>] [+ ...]';
|
||||
my $usage = 'Usage: recall [nick [history [channel]]] [-c,channel <channel>] [-t,text,h,history <history>] [-b,before <context before>] [-a,after <context after>] [-x,context <nick>] [+ ...]';
|
||||
|
||||
if(not defined $arguments or not length $arguments) {
|
||||
return $usage;
|
||||
@ -142,13 +142,14 @@ sub recall_message {
|
||||
my $recall_text;
|
||||
|
||||
foreach my $recall (@recalls) {
|
||||
my ($recall_nick, $recall_history, $recall_channel, $recall_before, $recall_after);
|
||||
my ($recall_nick, $recall_history, $recall_channel, $recall_before, $recall_after, $recall_context);
|
||||
|
||||
my ($ret, $args) = GetOptionsFromString($recall,
|
||||
'channel|c=s' => \$recall_channel,
|
||||
'text|t|history|h=s' => \$recall_history,
|
||||
'before|b=s' => \$recall_before,
|
||||
'after|a=s' => \$recall_after);
|
||||
'after|a=s' => \$recall_after,
|
||||
'context|x=s' => \$recall_context);
|
||||
|
||||
return "$getopt_error -- $usage" if defined $getopt_error;
|
||||
|
||||
@ -184,6 +185,10 @@ sub recall_message {
|
||||
# set channel to current channel if not specified
|
||||
$recall_channel = $from if not defined $recall_channel;
|
||||
|
||||
if (not defined $recall_nick and defined $recall_context) {
|
||||
$recall_nick = $recall_context;
|
||||
}
|
||||
|
||||
my ($account, $found_nick);
|
||||
|
||||
if(defined $recall_nick) {
|
||||
@ -228,7 +233,17 @@ sub recall_message {
|
||||
return "You may only select 200 lines of surrounding context.";
|
||||
}
|
||||
|
||||
my $messages = $self->{database}->get_message_context($message, $recall_before, $recall_after);
|
||||
my $context_account;
|
||||
|
||||
if (defined $recall_context) {
|
||||
($context_account) = $self->{database}->find_message_account_by_nick($recall_context);
|
||||
|
||||
if(not defined $context_account) {
|
||||
return "I don't know anybody named $recall_context.";
|
||||
}
|
||||
}
|
||||
|
||||
my $messages = $self->{database}->get_message_context($message, $recall_before, $recall_after, $context_account);
|
||||
|
||||
foreach my $msg (@$messages) {
|
||||
$self->{pbot}->{logger}->log("$nick ($from) recalled <$msg->{nick}/$msg->{channel}> $msg->{msg}\n");
|
||||
|
@ -442,16 +442,25 @@ SQL
|
||||
}
|
||||
|
||||
sub get_message_context {
|
||||
my ($self, $message, $before, $after) = @_;
|
||||
my ($self, $message, $before, $after, $context_id) = @_;
|
||||
|
||||
my ($messages_before, $messages_after);
|
||||
|
||||
if (defined $before and $before > 0) {
|
||||
$messages_before = eval {
|
||||
my $sth = $self->{dbh}->prepare('SELECT id, msg, mode, timestamp, channel FROM Messages WHERE channel = ? AND timestamp < ? AND mode != 1 ORDER BY timestamp DESC LIMIT ?');
|
||||
my $sth;
|
||||
if (defined $context_id) {
|
||||
$sth = $self->{dbh}->prepare('SELECT id, msg, mode, timestamp, channel FROM Messages WHERE id = ? AND channel = ? AND timestamp < ? AND mode != 1 ORDER BY timestamp DESC LIMIT ?');
|
||||
$sth->bind_param(1, $context_id);
|
||||
$sth->bind_param(2, $message->{channel});
|
||||
$sth->bind_param(3, $message->{timestamp});
|
||||
$sth->bind_param(4, $before);
|
||||
} else {
|
||||
$sth = $self->{dbh}->prepare('SELECT id, msg, mode, timestamp, channel FROM Messages WHERE channel = ? AND timestamp < ? AND mode != 1 ORDER BY timestamp DESC LIMIT ?');
|
||||
$sth->bind_param(1, $message->{channel});
|
||||
$sth->bind_param(2, $message->{timestamp});
|
||||
$sth->bind_param(3, $before);
|
||||
}
|
||||
$sth->execute();
|
||||
return [reverse @{$sth->fetchall_arrayref({})}];
|
||||
};
|
||||
@ -460,10 +469,19 @@ sub get_message_context {
|
||||
|
||||
if (defined $after and $after > 0) {
|
||||
$messages_after = eval {
|
||||
my $sth = $self->{dbh}->prepare('SELECT id, msg, mode, timestamp, channel FROM Messages WHERE channel = ? AND timestamp > ? AND mode != 1 LIMIT ?');
|
||||
my $sth;
|
||||
if (defined $context_id) {
|
||||
$sth = $self->{dbh}->prepare('SELECT id, msg, mode, timestamp, channel FROM Messages WHERE id = ? AND channel = ? AND timestamp > ? AND mode != 1 LIMIT ?');
|
||||
$sth->bind_param(1, $context_id);
|
||||
$sth->bind_param(2, $message->{channel});
|
||||
$sth->bind_param(3, $message->{timestamp});
|
||||
$sth->bind_param(4, $after);
|
||||
} else {
|
||||
$sth = $self->{dbh}->prepare('SELECT id, msg, mode, timestamp, channel FROM Messages WHERE channel = ? AND timestamp > ? AND mode != 1 LIMIT ?');
|
||||
$sth->bind_param(1, $message->{channel});
|
||||
$sth->bind_param(2, $message->{timestamp});
|
||||
$sth->bind_param(3, $after);
|
||||
}
|
||||
$sth->execute();
|
||||
return $sth->fetchall_arrayref({});
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user