use Irssi; use Email::Send; use strict; use vars qw($VERSION %IRSSI); $VERSION = "1"; %IRSSI = ( authors => 'Tom Wesley', contact => 'tom@tomaw.net', name => 'Sends an email to a given nick, requesting confirmation', license => 'as-is', changed => '20070728', ); my $requester = ""; my $active = 0; sub cmd_passreset { my ($data, $server, $witem) = @_; $requester = $data; $server->send_raw("NS INFO $data"); $active = 1; } sub event_notice { my ($server, $msg, $sender, $sender_host, $dest) = @_; return if $active ne 1; if ($sender eq "NickServ") { if ($msg =~ /Email Address: /) { $active = 0; my $add = substr($msg,21); my $mynick = $server->{nick}; my $key; my @chars = ('a'..'z','A'..'Z','0'..'9','_','@'); my $myadd = Irssi::settings_get_str('passreset_sender'); $myadd =~ s/@/\@/; foreach (1..10) { $key .= $chars[rand @chars]; } my $message = <<"__MESSAGE__"; To: $add Bcc: $myadd From: $myadd Subject: freenode nickserv password reset Hi, Someone just requested that I reset the password on your nick '$requester'. If this was you please /msg $mynick $key. If not, please disregard this email. Thanks -- $mynick __MESSAGE__ my $sender = Email::Send->new({mailer => 'SMTP'}); $sender->mailer_args([Host => Irssi::settings_get_str('passreset_smtp_host')]); $sender->send($message); Irssi::print("Email sent to $add for $requester. Code is '$key'."); } elsif ($msg =~ /Nickname Options: /) { $active = 0; } } } Irssi::command_bind('passreset', 'cmd_passreset'); Irssi::signal_add('message irc notice', 'event_notice'); Irssi::settings_add_str('passreset', 'passreset_sender', 'staff\@somewhere.com'); Irssi::settings_add_str('passreset', 'passreset_smtp_host', 'localhost');