summaryrefslogtreecommitdiffstats
path: root/scripts/auto_whois.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/auto_whois.pl')
-rw-r--r--scripts/auto_whois.pl80
1 files changed, 80 insertions, 0 deletions
diff --git a/scripts/auto_whois.pl b/scripts/auto_whois.pl
new file mode 100644
index 0000000..59fc1ef
--- /dev/null
+++ b/scripts/auto_whois.pl
@@ -0,0 +1,80 @@
+# /WHOIS all the users who send you a private message.
+# v0.9 for irssi by Andreas 'ads' Scherbaum
+# idea and some code taken from autowhois.pl from Timo Sirainen
+use strict;
+use Irssi;
+use vars qw($VERSION %IRSSI);
+
+$VERSION = "0.9";
+%IRSSI = (
+ authors => "Andreas \'ads\' Scherbaum",
+ contact => "ads\@ufp.de",
+ name => "auto_whois",
+ description => "/WHOIS all the users who send you a private message.",
+ license => "GPL",
+ url => "http://irssi.org/",
+ changed => "2004-02-10",
+ changes => "v0.9: don't /WHOIS if query exists for the nick already"
+);
+
+# History:
+# v0.9: don't /WHOIS if query exists for the nick already
+# now we store all nicks we have seen in the last 10 minutes
+
+my @seen = ();
+
+sub msg_private_first {
+ my ($server, $msg, $nick, $address) = @_;
+
+ # go through every stored connection and remove, if timed out
+ my $time = time();
+ my ($connection);
+ my @new = ();
+ foreach $connection (@seen) {
+ if ($connection->{lasttime} >= $time - 600) {
+ # is ok, use it
+ push(@new, $connection);
+ # all timed out connections will be dropped
+ }
+ }
+ @seen = @new;
+}
+
+sub msg_private {
+ my ($server, $msg, $nick, $address) = @_;
+
+ # look, if we already know this connection
+ my ($connection, $a);
+ my $known_to_us = 0;
+ for ($a = 0; $a <= $#seen; $a++) {
+ $connection = $seen[$a];
+ # the lc() works not exact, because irc uses another charset
+ if ($connection->{server} eq $server->{address} and $connection->{port} eq $server->{port} and lc($connection->{nick}) eq lc($nick)) {
+ $known_to_us = 1;
+ # mark as refreshed
+ $seen[$a]->{lasttime} = time();
+ last;
+ }
+ }
+
+ if ($known_to_us == 1) {
+ # all ok, return
+ return;
+ }
+
+ # now store the new connection
+ $connection = {};
+ # store our own server data here
+ $connection->{server} = $server->{address};
+ $connection->{port} = $server->{port};
+ # and the nick who queried us
+ $connection->{nick} = $nick;
+ $connection->{lasttime} = time();
+ $connection->{starttime} = time();
+ push(@seen, $connection);
+
+ $server->command("whois $nick");
+}
+
+Irssi::signal_add_first('message private', 'msg_private_first');
+Irssi::signal_add('message private', 'msg_private');