Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
171 lines (134 sloc) 4.03 KB
use Irssi;
use strict;
use vars qw($VERSION %IRSSI);
use integer;
### REQUIREMENTS
#
# You need spamcalc from http://spamcalc.net/ installed on your system in
# the perl path or in ~/.irssi/scripts/spamcalc
#
# The data directory (below) should be set to the spamcalc dir
#
# It should work afterwards
#
require spamcalc::SpamCalc;
my $irssidir = Irssi::get_irssi_dir();
my $datafilesdir = $irssidir . "/scripts/spamcalc/data";
my($debug) = 0;
my $calc;
################################################################################
$VERSION = "1.0.0";
%IRSSI = (
authors => "Pieter-Bas IJdens",
contact => "irssi-scripts\@nospam.mi4.org.uk",
name => "dnsspam",
description => "Checks for DNS Spam on JOIN",
license => "GPLv2 or later",
url => "http://pieter-bas.ijdens.com/irssi/",
changed => "2005-03-10"
);
################################################################################
sub register_messages
{
Irssi::theme_register([
'sc_spam_certain',
'%RSPAMCALC:%n {channick_hilight $0} from {hilight $1}'.
' spam level: {hilight $2} on {channel $3}',
'sc_spam_probable',
'%YSPAMCALC:%n {channick_hilight $0} from {hilight $1}'.
' spam level: {hilight $2} on {channel $3}',
'sc_spam_clean',
'%GSPAMCALC:%n {channick_hilight $0} from {hilight $1}'.
' spam level: {hilight $2} on {channel $3}'
]);
}
################################################################################
sub run_spamcalc
{
my($host) = @_;
# Don't do anything for unresolved ipv6 ips
if ($host =~ /:/) {
return 0;
}
# Don't do anything for unresolved ipv4 ips
if ($host =~ /[0-9]$/) {
return 0;
}
my $score = $calc->get_host_score($host);
return $score;
}
################################################################################
sub event_join
{
my ($server, $channame, $nick, $host) = @_;
return if $server->{chat_type} ne "IRC";
my $chanrec = $server->channel_find($channame);
if ($chanrec)
{
my($username, $hostname) = split('@', $host);
my ($level) = run_spamcalc($hostname);
if ($level > 100)
{
$chanrec->printformat(
MSGLEVEL_JOINS,
'sc_spam_certain',
$nick,
"*!*@". $hostname,
$level,
$channame
);
}
elsif ($level > 50)
{
$chanrec->printformat(
MSGLEVEL_JOINS,
'sc_spam_probable',
$nick,
"*!*@". $hostname,
$level,
$channame
);
}
elsif ($debug > 0)
{
$chanrec->printformat(
MSGLEVEL_JOINS,
'sc_spam_clean',
$nick,
"*!*@". $hostname,
$level,
$channame
);
}
}
else
{
Irssi::print("%RDNSSPAM:%n Chanrec not found for $channame%N");
}
return;
}
################################################################################
sub event_load_settings
{
return;
}
################################################################################
sub cmd_spamcalc
{
my ($data, $server, $item) = @_;
my ($level);
$level = run_spamcalc($data);
Irssi::print("SPAMCALC: $level ($data)");
}
################################################################################
$calc = SpamCalc->new();
$calc->load_datafiles($datafilesdir);
################################################################################
register_messages();
################################################################################
Irssi::signal_add({
'message join' => \&event_join,
'setup changed' => \&event_load_settings
});
################################################################################
Irssi::command_bind("sc", \&cmd_spamcalc);