"znc ignore" などでググれば cpp のモジュールはヒットするのだけど、自分のしたいことができないやつだったのと、 perl ならなんとかってことで書いた。
package IgnoreSpam;
use strict;
use warnings;
use base 'ZNC::Module';
sub description {
"ignore spam"
}
sub OnChanMsg {
my $self = shift;
my ($nick, $channel, $message) = @_;
if ($self->_is_spam($nick, $channel, $message)) {
return $ZNC::HALT;
}
return $ZNC::CONTINUE;
}
sub OnChanNotice {
my $self = shift;
my ($nick, $channel, $message) = @_;
if ($self->_is_spam($nick, $channel, $message)) {
return $ZNC::HALT;
}
return $ZNC::CONTINUE;
}
sub _is_spam {
my $self = shift;
my ($nick, $channel, $message) = @_;
if ($nick->GetNick =~ /^(?:spam_a|spam_b|spam_c)$/) {
return 1;
}
if ($message =~ /^(?:見たくもない単語|流れるだけでまずい単語)$/) {
return 1;
}
return;
}
1;
help も無ければ config 対応も無い。無視したいニックネームや単語が増えたら男らしくモジュール書き換えて loadmod 。どうせ大抵は pc 使ってんだろ。
ignore 機能を備えているクライアントもあるけど、ログに残す価値も無いものとか残したくもないときとかに。
そもそもそんなチャンネルは出るのが正しい。