tokuhirom's Blog

ZNC で特定のキーワードを含む発言を <censored> にするハック

表題の通りです。znc の拡張をかくのは存外楽なのでオススメです。まあ tiarra とそんなに難易度かわらないけどね。

Perl なのに、$_[2] を直接かきかえたりしないといけないのがあまり直感的ではないですけどね。

package ZNCBlacklist;
use strict;
use warnings;
use utf8;
use 5.10.0;
use base 'ZNC::Module';

sub description {
    "black list"
}

sub OnLoad {
    my ($self, $arg) = @_;
    return 1;
}

for my $method (qw(OnUserMsg OnUserNotice)) {
    warn "setup $method";
    no strict 'refs'; ## no critic.
    *{__PACKAGE__ . '::' . $method} = sub {
        use strict;
        if ($_[2] =~ /モモいろクローバーZ/) {
              $_[0]->PutModule("Censored your message: $_[1] $_[2]");
              $_[2] = '<censored>';
        }
        return $ZNC::CONTINUE;
    };
}