aboutsummaryrefslogtreecommitdiff
path: root/Plugin/Correction.pm
diff options
context:
space:
mode:
authorDavid Phillips <david@yeah.nah.nz>2020-06-08 21:11:17 +1200
committerDavid Phillips <david@yeah.nah.nz>2020-06-08 21:16:50 +1200
commit4f1f44cc656df0601f8cb6c5d4770d3efb55c43e (patch)
treebd3957e563a557c43d5d6dc2d64d638d368de48f /Plugin/Correction.pm
parenteacc5eebb0b646bf6d9d306a778eccdadc0780b7 (diff)
downloadidalius-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.pm51
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;