znc で ignore する perl モジュール書いた

  • 投稿日:
  • by
  • カテゴリ:

"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 機能を備えているクライアントもあるけど、ログに残す価値も無いものとか残したくもないときとかに。
そもそもそんなチャンネルは出るのが正しい。