mirror of
https://github.com/pragma-/pbot.git
synced 2024-11-20 02:49:49 +01:00
Add command queue for delayed command processing
This commit is contained in:
parent
4cb77ba143
commit
b215dfe9de
@ -40,9 +40,11 @@ sub initialize {
|
|||||||
$self->{pbot}->{registry}->add_default('text', 'interpreter', 'max_recursion', 10);
|
$self->{pbot}->{registry}->add_default('text', 'interpreter', 'max_recursion', 10);
|
||||||
|
|
||||||
$self->{output_queue} = {};
|
$self->{output_queue} = {};
|
||||||
|
$self->{command_queue} = {};
|
||||||
$self->{last_paste} = 0;
|
$self->{last_paste} = 0;
|
||||||
|
|
||||||
$self->{pbot}->{timer}->register(sub { $self->process_output_queue }, 1);
|
$self->{pbot}->{timer}->register(sub { $self->process_output_queue }, 1);
|
||||||
|
$self->{pbot}->{timer}->register(sub { $self->process_command_queue }, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub process_line {
|
sub process_line {
|
||||||
@ -201,6 +203,8 @@ sub interpret {
|
|||||||
message => "$nick: Why would I want to do that to myself?"
|
message => "$nick: Why would I want to do that to myself?"
|
||||||
};
|
};
|
||||||
$self->add_message_to_output_queue($from, $message, $delay);
|
$self->add_message_to_output_queue($from, $message, $delay);
|
||||||
|
$delay = duration($delay);
|
||||||
|
$self->{pbot}->{logger}->log("Final result ($delay delay) [$message->{message}]\n");
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -387,6 +391,50 @@ sub process_output_queue {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub add_to_command_queue {
|
||||||
|
my ($self, $channel, $command, $delay) = @_;
|
||||||
|
|
||||||
|
if (exists $self->{command_queue}->{$channel}) {
|
||||||
|
my $last_when = $self->{command_queue}->{$channel}->[-1]->{when};
|
||||||
|
$command->{when} = $last_when + $delay;
|
||||||
|
} else {
|
||||||
|
$command->{when} = gettimeofday + $delay;
|
||||||
|
}
|
||||||
|
|
||||||
|
push @{$self->{command_queue}->{$channel}}, $command;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub add_botcmd_to_command_queue {
|
||||||
|
my ($self, $channel, $command, $delay) = @_;
|
||||||
|
|
||||||
|
my $botcmd = {
|
||||||
|
nick => $self->{pbot}->{registry}->get_value('irc', 'botnick'),
|
||||||
|
user => 'stdin',
|
||||||
|
host => 'localhost',
|
||||||
|
command => $command
|
||||||
|
};
|
||||||
|
|
||||||
|
$self->add_to_command_queue($channel, $botcmd, $delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub process_command_queue {
|
||||||
|
my $self = shift;
|
||||||
|
|
||||||
|
foreach my $channel (keys %{$self->{command_queue}}) {
|
||||||
|
for (my $i = 0; $i < @{$self->{command_queue}->{$channel}}; $i++) {
|
||||||
|
my $command = $self->{command_queue}->{$channel}->[$i];
|
||||||
|
if (gettimeofday >= $command->{when}) {
|
||||||
|
$self->interpret($channel, $command->{nick}, $command->{user}, $command->{host}, 0, $command->{command});
|
||||||
|
splice @{$self->{command_queue}->{$channel}}, $i--, 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (not @{$self->{command_queue}->{$channel}}) {
|
||||||
|
delete $self->{command_queue}->{$channel};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub paste {
|
sub paste {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user