From 2f0feee0d3e654d58fa5b7de3d53930783581605 Mon Sep 17 00:00:00 2001 From: David Phillips Date: Sat, 26 Oct 2019 18:03:42 +1300 Subject: Markov: Retry limited times if message isn't long enough --- Plugin/Markov.pm | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/Plugin/Markov.pm b/Plugin/Markov.pm index 1733372..e29bb45 100644 --- a/Plugin/Markov.pm +++ b/Plugin/Markov.pm @@ -74,18 +74,24 @@ sub some sub do_markov { - my $word = $_[0]; - $word = some(keys %markov_data) unless $word; - my $message = ""; - my $i = 0; - do { - $i++; - $message .= "$word "; - $word = some(@{$markov_data{$word}}); - } until(not $word or $word eq "" or $i == 1000); - - return if scalar(split / /, $message) <= 2; - return $message; + my $tries = 0; + + while ($tries++ < 10) { + my $word = $_[0]; + $word = some(keys %markov_data) unless $word; + my $message = ""; + my $i = 0; + do { + $i++; + $message .= "$word "; + $word = some(@{$markov_data{$word}}); + } until(not $word or $word eq "" or $i == 1000); + + return $message if scalar(split / /, $message) > 2; + } + + # fallthrough: didn't form a long enough message in enough tries + return; } sub markov_cmd -- cgit v1.1