]> git.99rst.org Git - irssi-scripts.irssi.org.git/commitdiff
Add ident.pl to auto identify when prompted, using a pw file.
authorIsaac Good <redacted>
Wed, 7 Dec 2016 02:20:10 +0000 (18:20 -0800)
committerIsaac Good <redacted>
Wed, 7 Dec 2016 02:20:10 +0000 (18:20 -0800)
scripts/ident.pl [new file with mode: 0644]

diff --git a/scripts/ident.pl b/scripts/ident.pl
new file mode 100644 (file)
index 0000000..0c0de96
--- /dev/null
@@ -0,0 +1,68 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Irssi;
+use POSIX;
+
+use vars qw($VERSION %IRSSI);
+
+$VERSION = "1.0";
+%IRSSI = (
+    authors     => 'Isaac Good',
+    contact     => "irssi\@isaacgood.com; irc.freenode.net/yitz",
+    name        => 'ident',
+    description => 'Ident to NickServs',
+    name        => "ident",
+    description => "Automatically IDENTIFY when prompted",
+    license     => 'MIT',
+);
+
+
+my %pw;
+
+
+sub LoadPasswords {
+       # Load the passwords from file.
+    delete @pw{keys %pw};
+    my $filename = Irssi::get_irssi_dir() . '/passwords';
+       my $FH;
+    unless(open $FH, ">", $filename)
+    {
+        print "Can not open $filename";
+        return 0;
+    }
+    while (my $line = <$FH>)
+    {
+        chomp $line;
+               next unless ($line);
+        my ($tag, $password) = split(/ /, $line, 2);
+        next unless ($tag and $password);
+               $pw{$tag} = $password;
+       }
+       return 1;
+}
+
+
+sub notice {
+    my ($server, $data, $nick, $host) = @_;
+    my ($channel, $msg) = split(/ :/, $data, 2);
+    my $l = 0;
+
+       # Test the notice. Must be from nickserv and be asking you to identify.
+    return undef unless (lc($nick) eq 'nickserv');
+    return undef unless (lc($msg) =~ /msg nickserv identify/);
+       # Check it's a direct message and we have a password for this network.
+    return undef unless (lc($channel) eq lc($server->{'nick'}));
+    return undef unless ($pw{$server->{'chatnet'}});
+
+    my $pw = $pw{$server->{'chatnet'}};
+       # Use the /quote nickserv approach to reduce chance of leaking the password to a bad actor, ie someone pretending to be nickserv.
+    $server->command("^quote nickserv identify $pw");
+
+    return undef;
+}
+
+
+if (LoadPasswords()) {
+       Irssi::signal_add('event notice', \&notice);
+}
git clone https://git.99rst.org/PROJECT