# Print the country name in /WHOIS replies # /GEOIP prints the country name for the host/ip # /SET geoip_dat /full/path/to/GeoIP.dat # # http://www.maxmind.com/download/geoip/database/GeoIP.dat.gz use strict; use Geo::IP; use Irssi; use Socket; use vars qw($VERSION %IRSSI); $VERSION = "0.0.3"; %IRSSI = ( authors => "Toni Viemerö", contact => "toni.viemero\@iki.fi", name => "geoip", description => "Print the users country name in /WHOIS replies", license => "Public Domain", changed => "Wed Nov 19 14:34:12 EET 2003" ); sub event_whois { my $country = ""; my $database = Irssi::settings_get_str("geoip_dat"); my ($server, $data, $nick, $host) = @_; my ($me, $nick, $user, $host) = split(" ", $data); my $gi = Geo::IP->open($database, GEOIP_STANDARD); if ($host =~ /^[0-9\.]*$/) { $country = $gi->country_name_by_addr($host); } else { $country = $gi->country_name_by_name($host); } $server->printformat($nick, MSGLEVEL_CRAP, 'whois_geoip', $host, $country); } sub cmd_geoip { my $country = ""; my $database = Irssi::settings_get_str("geoip_dat"); my $host = lc shift; if ($host eq "") { Irssi::print("USAGE: /GEOIP "); return; } my $gi = Geo::IP->open($database, GEOIP_STANDARD); if ($host =~ /^[0-9\.]*$/) { $country = $gi->country_name_by_addr($host); } else { $country = $gi->country_name_by_name($host); } Irssi::print("$host is in $country"); } Irssi::theme_register([ 'whois_geoip' => '{whois geoip %|$1}' ]); Irssi::command_bind('geoip', \&cmd_geoip); Irssi::signal_add_last('event 311', 'event_whois'); Irssi::settings_add_str("misc", "geoip_dat", Irssi::get_irssi_dir() . "/GeoIP.dat");