mirror of
https://github.com/pragma-/pbot.git
synced 2024-11-26 13:59:47 +01:00
Improve message output queue
- Use distinct per-channel queues - Use timestamp of last message in queue to add delay - Increase typing speed from 4 characters per second to 7 cps
This commit is contained in:
parent
3f62bfbd94
commit
b36a4fb2c9
@ -40,7 +40,7 @@ sub initialize {
|
|||||||
$self->{pbot}->{registry}->add_default('array', 'general', 'compile_blocks_ignore_channels', $conf{compile_blocks_ignore_channels} // 'none');
|
$self->{pbot}->{registry}->add_default('array', 'general', 'compile_blocks_ignore_channels', $conf{compile_blocks_ignore_channels} // 'none');
|
||||||
$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->{pbot}->{timer}->register(sub { $self->process_output_queue }, 1);
|
$self->{pbot}->{timer}->register(sub { $self->process_output_queue }, 1);
|
||||||
}
|
}
|
||||||
@ -193,12 +193,11 @@ sub handle_result {
|
|||||||
my $link = paste_sprunge("[" . (defined $from ? $from : "stdin") . "] <$nick> $text\n\n$original_result");
|
my $link = paste_sprunge("[" . (defined $from ? $from : "stdin") . "] <$nick> $text\n\n$original_result");
|
||||||
if ($use_output_queue) {
|
if ($use_output_queue) {
|
||||||
my $message = {
|
my $message = {
|
||||||
from => $from, nick => $nick, user => $user, host => $host, command => $command,
|
nick => $nick, user => $user, host => $host, command => $command,
|
||||||
message => "And that's all I have to say about that. See $link for full text.",
|
message => "And that's all I have to say about that. See $link for full text.",
|
||||||
when => gettimeofday,
|
|
||||||
checkflood => $checkflood
|
checkflood => $checkflood
|
||||||
};
|
};
|
||||||
$self->add_message_to_output_queue($message);
|
$self->add_message_to_output_queue($from, $message, 0);
|
||||||
} else {
|
} else {
|
||||||
$self->{pbot}->{conn}->privmsg($from, "And that's all I have to say about that. See $link for full text.");
|
$self->{pbot}->{conn}->privmsg($from, "And that's all I have to say about that. See $link for full text.");
|
||||||
}
|
}
|
||||||
@ -215,12 +214,12 @@ sub handle_result {
|
|||||||
|
|
||||||
if ($use_output_queue) {
|
if ($use_output_queue) {
|
||||||
my $delay = (rand 10) + 5; # initial delay for reading/processing user's message
|
my $delay = (rand 10) + 5; # initial delay for reading/processing user's message
|
||||||
$delay += (length $line) / 4; # additional delay of 4 characters per second typing speed
|
$delay += (length $line) / 7; # additional delay of 7 characters per second typing speed
|
||||||
my $message = {
|
my $message = {
|
||||||
from => $from, nick => $nick, user => $user, host => $host, command => $command,
|
nick => $nick, user => $user, host => $host, command => $command,
|
||||||
when => gettimeofday + $delay, message => $line, checkflood => $checkflood
|
message => $line, checkflood => $checkflood
|
||||||
};
|
};
|
||||||
$self->add_message_to_output_queue($message);
|
$self->add_message_to_output_queue($from, $message, $delay);
|
||||||
} else {
|
} else {
|
||||||
$self->output_result($from, $nick, $user, $host, $command, $line, $checkflood);
|
$self->output_result($from, $nick, $user, $host, $command, $line, $checkflood);
|
||||||
}
|
}
|
||||||
@ -335,18 +334,32 @@ sub paste_codepad {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub add_message_to_output_queue {
|
sub add_message_to_output_queue {
|
||||||
my ($self, $message) = @_;
|
my ($self, $channel, $message, $delay) = @_;
|
||||||
push @{$self->{output_queue}}, $message;
|
|
||||||
|
if (exists $self->{output_queue}->{$channel}) {
|
||||||
|
my $last_when = $self->{output_queue}->{$channel}->[-1]->{when};
|
||||||
|
$message->{when} = $last_when + $delay;
|
||||||
|
} else {
|
||||||
|
$message->{when} = gettimeofday + $delay;
|
||||||
|
}
|
||||||
|
|
||||||
|
push @{$self->{output_queue}->{$channel}}, $message;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub process_output_queue {
|
sub process_output_queue {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
for (my $i = 0; $i < @{$self->{output_queue}}; $i++) {
|
foreach my $channel (keys %{$self->{output_queue}}) {
|
||||||
my $message = $self->{output_queue}->[$i];
|
for (my $i = 0; $i < @{$self->{output_queue}->{$channel}}; $i++) {
|
||||||
if (gettimeofday >= $message->{when}) {
|
my $message = $self->{output_queue}->{$channel}->[$i];
|
||||||
$self->output_result($message->{from}, $message->{nick}, $message->{user}, $message->{host}, $message->{command}, $message->{message}, $message->{checkflood});
|
if (gettimeofday >= $message->{when}) {
|
||||||
splice @{$self->{output_queue}}, $i--, 1;
|
$self->output_result($channel, $message->{nick}, $message->{user}, $message->{host}, $message->{command}, $message->{message}, $message->{checkflood});
|
||||||
|
splice @{$self->{output_queue}->{$channel}}, $i--, 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (not @{$self->{output_queue}->{$channel}}) {
|
||||||
|
delete $self->{output_queue}->{$channel};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user