3
0
mirror of https://github.com/pragma-/pbot.git synced 2024-11-06 03:59:31 +01:00

Plugin/Wordle: removed unidecode normalization; added Finnish

This commit is contained in:
Pragmatic Software 2024-03-17 21:08:50 -07:00
parent 51fb92bc39
commit 5c185486e8
No known key found for this signature in database
GPG Key ID: CC916B6E3C84ECCE
3 changed files with 60333 additions and 11 deletions

60303
data/wordle/finnish Normal file

File diff suppressed because it is too large Load Diff

View File

@ -11,8 +11,6 @@ use parent 'PBot::Plugin::Base';
use PBot::Imports; use PBot::Imports;
use Text::Unidecode;
sub initialize($self, %conf) { sub initialize($self, %conf) {
$self->{pbot}->{commands}->add( $self->{pbot}->{commands}->add(
name => 'wordle', name => 'wordle',
@ -46,11 +44,21 @@ my %wordlists = (
insane => '/wordle/american-insane', insane => '/wordle/american-insane',
british => '/wordle/british', british => '/wordle/british',
canadian => '/wordle/canadian', canadian => '/wordle/canadian',
finnish => '/wordle/finnish',
french => '/wordle/french', french => '/wordle/french',
german => '/wordle/german', german => '/wordle/german',
italian => '/wordle/italian', italian => '/wordle/italian',
spanish => '/wordle/spanish',
polish => '/wordle/polish', polish => '/wordle/polish',
spanish => '/wordle/spanish',
);
my %accents = (
finnish => 'åäöšž',
french => 'éàèùçâêîôûëïü',
german => 'äöüß',
italian => 'èéìòù',
polish => 'ćńóśźżąęł',
spanish => 'áéíóúüñ',
); );
my %color = ( my %color = (
@ -129,7 +137,7 @@ sub wordle($self, $context) {
return "Usage: wordle custom <word> <channel> [wordlist]"; return "Usage: wordle custom <word> <channel> [wordlist]";
} }
my $custom_word = unidecode $args[0]; my $custom_word = $args[0];
my $custom_channel = $args[1]; my $custom_channel = $args[1];
my $custom_wordlist = $args[2]; my $custom_wordlist = $args[2];
my $length = length $custom_word; my $length = length $custom_word;
@ -152,6 +160,7 @@ sub wordle($self, $context) {
return 'Invalid wordlist; options are: ' . (join ', ', sort keys %wordlists); return 'Invalid wordlist; options are: ' . (join ', ', sort keys %wordlists);
} }
$custom_word =~ s/ß/ẞ/g; # avoid uppercasing to SS in German
my $result = $self->make_wordle($custom_channel, $length, uc $custom_word, $wordlist); my $result = $self->make_wordle($custom_channel, $length, uc $custom_word, $wordlist);
if ($result !~ /Guess/) { if ($result !~ /Guess/) {
@ -223,8 +232,8 @@ sub load_words($self, $length, $wordlist = 'default') {
while (my $line = <$fh>) { while (my $line = <$fh>) {
chomp $line; chomp $line;
$line = unidecode $line;
if (length $line == $length) { if (length $line == $length) {
$line =~ s/ß/ẞ/g; # avoid uppercasing to SS in German
$words{uc $line} = 1; $words{uc $line} = 1;
} }
} }
@ -264,6 +273,14 @@ sub make_wordle($self, $channel, $length, $word = undef, $wordlist = 'default')
$self->{$channel}->{letters}->{$letter} = 0; $self->{$channel}->{letters}->{$letter} = 0;
} }
if (exists $accents{$wordlist}) {
foreach my $letter (split //, $accents{$wordlist}) {
$letter =~ s/ß/ẞ/g; # avoid uppercasing to SS in German
$letter = uc $letter;
$self->{$channel}->{letters}->{$letter} = 0;
}
}
$self->{$channel}->{guess} = $color{invalid}; $self->{$channel}->{guess} = $color{invalid};
$self->{$channel}->{guess} .= ' ? ' x $self->{$channel}->{wordle}->@*; $self->{$channel}->{guess} .= ' ? ' x $self->{$channel}->{wordle}->@*;
$self->{$channel}->{guess} .= $color{reset}; $self->{$channel}->{guess} .= $color{reset};
@ -302,13 +319,15 @@ sub show_wordle($self, $channel, $with_letters = 0) {
} }
sub guess_wordle($self, $channel, $guess) { sub guess_wordle($self, $channel, $guess) {
if (length $guess != $self->{$channel}->{wordle}->@*) { $guess =~ s/ß/ẞ/g; # avoid uppercasing to SS in German
return "The length of your guess does not match length of current Wordle. Try again.";
}
$guess = unidecode $guess;
$guess = uc $guess; $guess = uc $guess;
if (length $guess != $self->{$channel}->{wordle}->@*) {
my $guess_length = length $guess;
my $wordle_length = $self->{$channel}->{wordle}->@*;
return "Guess length ($guess_length) unequal to Wordle length ($wordle_length). Try again.";
}
if (not exists $self->{$channel}->{words}->{$guess}) { if (not exists $self->{$channel}->{words}->{$guess}) {
return "I don't know that word. Try again." return "I don't know that word. Try again."
} }

View File

@ -25,7 +25,7 @@ use PBot::Imports;
# These are set by the /misc/update_version script # These are set by the /misc/update_version script
use constant { use constant {
BUILD_NAME => "PBot", BUILD_NAME => "PBot",
BUILD_REVISION => 4723, BUILD_REVISION => 4724,
BUILD_DATE => "2024-03-17", BUILD_DATE => "2024-03-17",
}; };