[nexuiz-commits] r8526 - trunk/server/rcon2irc

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Jan 22 15:06:23 EST 2010


Author: div0
Date: 2010-01-22 15:06:20 -0500 (Fri, 22 Jan 2010)
New Revision: 8526

Modified:
   trunk/server/rcon2irc/rcon2irc-example.conf
   trunk/server/rcon2irc/rcon2irc.pl
Log:
merlijn's quakenet auth patch for rcon2irc

Modified: trunk/server/rcon2irc/rcon2irc-example.conf
===================================================================
--- trunk/server/rcon2irc/rcon2irc-example.conf	2010-01-22 20:05:53 UTC (rev 8525)
+++ trunk/server/rcon2irc/rcon2irc-example.conf	2010-01-22 20:06:20 UTC (rev 8526)
@@ -18,6 +18,8 @@
 # IRC Quakenet challenge/response authentication (optional)
 #irc_quakenet_authname = hack
 #irc_quakenet_password = me
+# Users with a Q account listed here can use admin commands on the bot
+#irc_quakenet_authusers = a b c
 
 # Extra plug-ins to load
 #plugins =

Modified: trunk/server/rcon2irc/rcon2irc.pl
===================================================================
--- trunk/server/rcon2irc/rcon2irc.pl	2010-01-22 20:05:53 UTC (rev 8525)
+++ trunk/server/rcon2irc/rcon2irc.pl	2010-01-22 20:06:20 UTC (rev 8526)
@@ -701,6 +701,7 @@
 
 	irc_quakenet_authname => "",
 	irc_quakenet_password => "",
+	irc_quakenet_authusers => "",
 	irc_quakenet_getchallenge => 'PRIVMSG Q at CServe.quakenet.org :CHALLENGE',
 	irc_quakenet_challengeauth => 'PRIVMSG Q at CServe.quakenet.org :CHALLENGEAUTH',
 	irc_quakenet_challengeprefix => ':Q!TheQBot at CServe.quakenet.org NOTICE [^:]+ :CHALLENGE',
@@ -1125,7 +1126,7 @@
 
 	# IRC admin commands
 	[ irc => q{:(([^! ]*)![^ ]*) (?i:PRIVMSG) [^&#%]\S* :(.*)} => sub {
-		return 0 unless $config{irc_admin_password} ne '';
+		return 0 unless ($config{irc_admin_password} ne '' || $config{irc_quakenet_authusers});
 
 		my ($hostmask, $nick, $command) = @_;
 		my $dpnick = color_dpfix $nick;
@@ -1307,6 +1308,44 @@
 		$store{irc_quakenet_challenge} = $1;
 		return irc_joinstage(0);
 	} ],
+	
+	# Catch joins of people in a channel the bot is in and catch our own joins of a channel
+	[ irc => q{:(([^! ]*)![^ ]*) JOIN (#.+)} => sub {
+		my ($hostmask, $nick, $chan) = @_;
+		return 0 unless ($config{irc_quakenet_authusers});
+		
+		if ($nick eq $config{irc_nick}) {
+			out irc => 0, "PRIVMSG Q :users $chan"; # get auths for all users
+		} else {
+			$store{quakenet_hosts}->{$nick} = $hostmask;
+			out irc => 0, "PRIVMSG Q :whois $nick"; # get auth for single user
+		}
+		
+		return 0;
+	} ],
+	
+	# Catch response of users request
+	[ irc => q{:Q!TheQBot at CServe.quakenet.org NOTICE [^:]+ :[@\+\s]?(\S+)\s+(\S+)\s*(\S*)\s*\((.*)\)} => sub {
+		my ($nick, $username, $flags, $host) = @_;
+		return 0 unless ($config{irc_quakenet_authusers});
+		
+		$store{logins}{"$nick!$host"} = time() + 600 if ($store{quakenet_users}->{$username});
+		
+		return 0;
+	} ],
+	
+	# Catch response of whois request
+	[ irc => q{:Q!TheQBot at CServe.quakenet.org NOTICE [^:]+ :-Information for user (.*) \(using account (.*)\):} => sub {
+		my ($nick, $username) = @_;
+		return 0 unless ($config{irc_quakenet_authusers});
+		
+		if ($store{quakenet_users}->{$username}) {
+			my $hostmask = $store{quakenet_hosts}->{$nick};
+			$store{logins}{$hostmask} = time() + 600;
+		}
+		
+		return 0;
+	} ],
 
 	# shut down everything on SIGINT
 	[ system => q{quit (.*)} => sub {
@@ -1649,7 +1688,18 @@
 }
 
 
+# If users for quakenet are listed, parse them into a hash and schedule a sub to query information
+if ($config{irc_quakenet_authusers} ne '') {
+	$store{quakenet_users} = { map { $_ => 1 } split ' ', $config{irc_quakenet_authusers} };
+	
+	schedule sub {
+		my ($timer) = @_;
+		out irc => 0, "PRIVMSG Q :users " . $config{irc_channel};
+		schedule $timer => 300;;
+	} => 1;
+}
 
+
 # verify that the server is up by letting it echo back a string that causes
 # re-initialization of the required aliases
 out dp => 0, 'echo "Unknown command \"rcon2irc_eval\""'; # assume the server has been restarted



More information about the nexuiz-commits mailing list