[Home]IRPG/irssi

HomePage | IRPG | Admins | RecentChanges | [Login] Preferences

[Download]

# This does not handle target change too fast,
# but the 5 minute delay should be plenty if
# you successfully join the channel.

# /set irpg_username USERNAME
# /set irpg_password PASSWORD
# /set irpg_nickname YOUR_NICKNAME (optional)
# /set irpg_delay_cprivmsg MILLISECONDS (default 5000 - 5 seconds)
# /set irpg_delay_privmsg1 MILLISECONDS (default 60000 - 60 seconds)
# /set irpg_delay_privmsg2 MILLISECONDS (default 300000 - 5 minutes)

use Irssi;
use strict;
use vars qw($VERSION %IRSSI);

$VERSION = "3.50";
%IRSSI = (
	authors => 'Byte',
	name=> 'irpg',
	description => 'irpg login script',
	license => 'Public Domain',
);

my %timers = ();

sub cmd_irpg {
	my ($data, $server, $witem) = @_;

	irpg_login('reg');
}

sub irpg_login {
	my ($valid) = @_;
	my $server = Irssi::server_find_tag('GameSurge');

	if (length(Irssi::settings_get_str('irpg_username')) == 0) {
		Irssi::print('IRPG username not set');
		if (defined($timers{'IRPG1'})) { Irssi::timeout_remove($timers{'IRPG1'}); delete $timers{'IRPG1'}; }
		if (defined($timers{'IRPG2'})) { Irssi::timeout_remove($timers{'IRPG2'}); delete $timers{'IRPG2'}; }
		if (defined($timers{'IRPG3'})) { Irssi::timeout_remove($timers{'IRPG3'}); delete $timers{'IRPG3'}; }
		return;
	}
	if (length(Irssi::settings_get_str('irpg_password')) == 0) {
		Irssi::print('IRPG password not set');
		if (defined($timers{'IRPG1'})) { Irssi::timeout_remove($timers{'IRPG1'}); delete $timers{'IRPG1'}; }
		if (defined($timers{'IRPG2'})) { Irssi::timeout_remove($timers{'IRPG2'}); delete $timers{'IRPG2'}; }
		if (defined($timers{'IRPG3'})) { Irssi::timeout_remove($timers{'IRPG3'}); delete $timers{'IRPG3'}; }
		return;
	}

	if ($server) {
		my $channel = $server->channel_find("#irpg");
		my $me = $server->{nick};

		if ($channel) {
			my $user = $channel->nick_find($me);
			my $irpg = $channel->nick_find("IRPG");

			if ($user && $irpg) {
				my $type = 'PRIVMSG';

				# CPRIVMSG can be used if opped or voiced
				if ($user->{op} || $user->{voice}) {
					$type = 'CPRIVMSG';
				}

				# check if PRIVMSG is allowed or if this run is op/voice-only
				if ($valid eq 'reg' || $type eq 'CPRIVMSG') {
					if ($type eq 'CPRIVMSG') {
						Irssi::print("Logging into IRPG (cprivmsg)");
						$server->command("/^quote CPRIVMSG IRPG #irpg :login ".Irssi::settings_get_str('irpg_username')." ".Irssi::settings_get_str('irpg_password'));
					} else {
						Irssi::print("Logging into IRPG");
						$server->command("/^quote PRIVMSG IRPG :login ".Irssi::settings_get_str('irpg_username')." ".Irssi::settings_get_str('irpg_password'));
					}
				}
			}
		}
	}

	# don't want to try more than once on each timer
	if (defined($timers{'IRPG1'})) {
		Irssi::timeout_remove($timers{'IRPG1'}); delete $timers{'IRPG1'};
	} elsif (defined($timers{'IRPG2'})) {
		Irssi::timeout_remove($timers{'IRPG2'}); delete $timers{'IRPG2'};
	} elsif (defined($timers{'IRPG3'})) {
		Irssi::timeout_remove($timers{'IRPG3'}); delete $timers{'IRPG3'};
	}
}

sub event_join {
	my ($server, $channel, $nick, $address) = @_;
	my $me = $server->{nick};

	if (length(Irssi::settings_get_str('irpg_username')) == 0) {
		Irssi::print('IRPG username not set');
		return;
	}
	if (length(Irssi::settings_get_str('irpg_password')) == 0) {
		Irssi::print('IRPG password not set');
		return;
	}

	if (uc($server->{tag}) eq "GAMESURGE"
		&& uc($channel) eq "#IRPG"
		&& (length(Irssi::settings_get_str('irpg_nickname')) == 0
			|| $me eq Irssi::settings_get_str('irpg_nickname'))) {

		if ($nick eq $me) {
			# remove existing timers
			if (defined($timers{'IRPG1'})) { Irssi::timeout_remove($timers{'IRPG1'}); delete $timers{'IRPG1'}; }
			if (defined($timers{'IRPG2'})) { Irssi::timeout_remove($timers{'IRPG2'}); delete $timers{'IRPG2'}; }
			if (defined($timers{'IRPG3'})) { Irssi::timeout_remove($timers{'IRPG3'}); delete $timers{'IRPG3'}; }

			# set timers to login
			Irssi::print("Scheduling login to IRPG");
			$timers{'IRPG1'} = Irssi::timeout_add(Irssi::settings_get_int('irpg_delay_cprivmsg'),'irpg_login','op');
			$timers{'IRPG2'} = Irssi::timeout_add(Irssi::settings_get_int('irpg_delay_privmsg1'),'irpg_login','reg');
			$timers{'IRPG3'} = Irssi::timeout_add(Irssi::settings_get_int('irpg_delay_privmsg2'),'irpg_login','reg');
		} elsif (uc($nick) eq "IRPG") {
			irpg_login('reg');
		}
	}
}

sub event_nick {
	my ($server, $newnick, $oldnick, $address) = @_;

	if (length(Irssi::settings_get_str('irpg_nickname')) == 0) { return; }

	if (uc($server->{tag}) eq "GAMESURGE"
		&& $newnick eq Irssi::settings_get_str('irpg_nickname')) {

		# nickname is now correct, login
		irpg_login('reg');
	}
}

sub event_privmsg {
	my ($server, $msg, $nick, $address) = @_;

	if (uc($server->{tag}) eq "GAMESURGE" && uc($nick) eq "IRPG") {
		if ($msg =~ /^Successfully logged you in/) {
			if (defined($timers{'IRPG1'})) { Irssi::timeout_remove($timers{'IRPG1'}); delete $timers{'IRPG1'}; }
			if (defined($timers{'IRPG2'})) { Irssi::timeout_remove($timers{'IRPG2'}); delete $timers{'IRPG2'}; }
			if (defined($timers{'IRPG3'})) { Irssi::timeout_remove($timers{'IRPG3'}); delete $timers{'IRPG3'}; }

			Irssi::print("Logged into IRPG");
		} elsif ($msg =~ /^"([^ ]+)" is an invalid username/
			&& length(Irssi::settings_get_str('irpg_username')) > 0
			&& $1 eq Irssi::settings_get_str('irpg_username')) {

			if (defined($timers{'IRPG1'})) { Irssi::timeout_remove($timers{'IRPG1'}); delete $timers{'IRPG1'}; }
			if (defined($timers{'IRPG2'})) { Irssi::timeout_remove($timers{'IRPG2'}); delete $timers{'IRPG2'}; }
			if (defined($timers{'IRPG3'})) { Irssi::timeout_remove($timers{'IRPG3'}); delete $timers{'IRPG3'}; }

			Irssi::print("Failed to login to IRPG (invalid username)");
		} elsif ($msg =~ /^You have entered an invalid password/) {
			if (defined($timers{'IRPG1'})) { Irssi::timeout_remove($timers{'IRPG1'}); delete $timers{'IRPG1'}; }
			if (defined($timers{'IRPG2'})) { Irssi::timeout_remove($timers{'IRPG2'}); delete $timers{'IRPG2'}; }
			if (defined($timers{'IRPG3'})) { Irssi::timeout_remove($timers{'IRPG3'}); delete $timers{'IRPG3'}; }

			Irssi::print("Failed to login to IRPG (invalid password)");
		} elsif ($msg =~ /^You are already logged in/) {
			if (defined($timers{'IRPG1'})) { Irssi::timeout_remove($timers{'IRPG1'}); delete $timers{'IRPG1'}; }
			if (defined($timers{'IRPG2'})) { Irssi::timeout_remove($timers{'IRPG2'}); delete $timers{'IRPG2'}; }
			if (defined($timers{'IRPG3'})) { Irssi::timeout_remove($timers{'IRPG3'}); delete $timers{'IRPG3'}; }

			Irssi::print("Failed to login to IRPG (already logged in)");
		}
	}
}

sub event_notice {
	my ($server, $msg, $nick, $address, $target) = @_;
	my $me = $server->{nick};

	if ($target eq $me) { event_privmsg($server, $msg, $nick, $address); }
}

Irssi::signal_add_first('message join', 'event_join');
Irssi::signal_add_first('message own_nick', 'event_nick');
Irssi::signal_add_first('message private', 'event_privmsg');
Irssi::signal_add_first('message irc notice', 'event_notice');

Irssi::settings_add_str('misc', 'irpg_username', "");
Irssi::settings_add_str('misc', 'irpg_password', "");
Irssi::settings_add_str('misc', 'irpg_nickname', "");
Irssi::settings_add_int('misc', 'irpg_delay_cprivmsg', 5000);
Irssi::settings_add_int('misc', 'irpg_delay_privmsg1', 60000);
Irssi::settings_add_int('misc', 'irpg_delay_privmsg2', 300000);

Irssi::command_bind('irpg', 'cmd_irpg');

HomePage | IRPG | Admins | RecentChanges | [Login] Preferences
Read-only | View other revisions
Last edited March 29, 2006 17:32 by Byte (diff)
Search:
©2009 @#tehh4x, All Rights Reserved.
38.103.63.57 r teh h4x | Unencrypted (use https)
ebaum's world