diff options
author | David Phillips <david@yeah.nah.nz> | 2020-06-08 21:11:17 +1200 |
---|---|---|
committer | David Phillips <david@yeah.nah.nz> | 2020-06-08 21:16:50 +1200 |
commit | 4f1f44cc656df0601f8cb6c5d4770d3efb55c43e (patch) | |
tree | bd3957e563a557c43d5d6dc2d64d638d368de48f /Plugin/Correction.pm | |
parent | eacc5eebb0b646bf6d9d306a778eccdadc0780b7 (diff) | |
download | idalius-4f1f44cc656df0601f8cb6c5d4770d3efb55c43e.tar.xz |
Add Correction module
This commit adds a plugin for replacing arbitrary regexes with corrections.
This is similar to the Titillate module, except that only the first match is
replaced, and the whole line with the correction made is returned. This can
be used for common spelling mistakes, or for memey replacements. Since it
is likely to get annoying, there is also a config option to reduce the bot
to only respond with some level of random chance.
Diffstat (limited to 'Plugin/Correction.pm')
-rw-r--r-- | Plugin/Correction.pm | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/Plugin/Correction.pm b/Plugin/Correction.pm new file mode 100644 index 0000000..bc5d1fc --- /dev/null +++ b/Plugin/Correction.pm @@ -0,0 +1,51 @@ +package Plugin::Correction; + +use strict; +use warnings; +use Encode qw/decode/; +use Data::Munge qw/replace/; + +use IdaliusConfig qw/assert_scalar/; + +my $config; +my $root_config; + +sub configure { + my $self = shift; + shift; # cmdref + shift; # run_command + $config = shift; + $root_config = shift; + + IdaliusConfig::assert_scalar($config, $self, "chance"); + die "chance must be from 0 to 100" + unless $config->{chance} >= 0 && $config->{chance} <= 100; + + IdaliusConfig::assert_dict($config, $self, "corrections"); + + return $self; +} + +sub on_message { + my ($self, $logger, $who, $where, $raw_what, $what, $irc) = @_; + + if (ref($where) eq "ARRAY") { + $where = $where->[0]; + } + + $what = Encode::decode('utf8', $what); + + foreach my $mistake (keys %{$config->{corrections}}) { + if ($what =~ /$mistake/i) { + my $response = replace($what, qr/$mistake/i, "\x02$config->{corrections}->{$mistake}\x02", "g"); + return unless rand(100) < $config->{chance}; + return $response; + } + } + return; +} + +sub on_action { + on_message(@_); +} +1; |