From 700b84d32707481c8590dcb23bafbb0b102a30f2 Mon Sep 17 00:00:00 2001 From: Daniel Brahneborg Date: Mon, 24 Mar 2025 11:09:41 +0100 Subject: [PATCH] plugin 'wordfilter' --- plugins/README.md | 4 +++ plugins/wordfilter/wordfilter.pl | 60 ++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 plugins/README.md create mode 100644 plugins/wordfilter/wordfilter.pl diff --git a/plugins/README.md b/plugins/README.md new file mode 100644 index 0000000..2776e5a --- /dev/null +++ b/plugins/README.md @@ -0,0 +1,4 @@ +# EMG Plugins + +This directory contains various plugins for EMG. + diff --git a/plugins/wordfilter/wordfilter.pl b/plugins/wordfilter/wordfilter.pl new file mode 100644 index 0000000..dfcade2 --- /dev/null +++ b/plugins/wordfilter/wordfilter.pl @@ -0,0 +1,60 @@ + +use POSIX qw(strftime); + +my $filename; +my @words; +my $read_date = 0; + +my $debug = 1; +my $logfile = "/tmp/wordfilter.log"; + +sub dolog { + my ($str) = @_; + return unless $debug; + my $ts = strftime("%Y-%m-%d %H:%M:%S", localtime); + open(OUT, ">>$logfile"); + print OUT "$ts $str"; + close(OUT); +} + +sub refresh_words { + ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); + my $dayno = 0 + ($year + 1900) * 10000 + $mon * 100 + $mday; + return unless ($dayno > $read_date); + @words = (); + if (open(my $fh, '<', $filename)) { + while (my $row = <$fh>) { + chomp($row); + next if length($row) < 1; + push @words, lc($row); + } + dolog("load from " . $filename . ", found " . @words . " words\n"); + close($fh); + } + $read_date = $dayno; +} + +sub create_config { + my ($name, $configdata) = @_; + $filename = $configdata; +} + +sub check { + my ($msg) = @_; + + refresh_words; + foreach my $word (@words) { + next unless ($msg =~ /\b${word}\b/); + dolog("reject message " . $q->{'ID'} . " containing `" . $word . "' in message: `" . $msg . "'\n"); + return 8; + } + return 0; +} + +sub before_receive { + my ($request, $response) = @_; + my $q = ${$request}{'qe'}; + my $msg = lc($q->{'MESSAGE'}); + return check($msg); +} +