All pastes #1551723 Raw Edit

Untitled

public python v1 · immutable
#1551723 ·published 2009-09-02 17:46 UTC
rendered paste body
#!/usr/bin/python pseudoserver.py# psm_ebattle.py# module for pypseudoserver# written by B (ben@rizon.net) and ZionI (jahprotector@gmail.com)# helpful erepublik bot!# Version 1.0 alphafrom psmodule import *import timeimport urllibfrom xml.dom import minidomimport os.pathfrom string import replacefrom twisted.internet import threadsimport socketclass PSModule_ebattle(PSModule):	VERSION = 1		def listspeak(self,target,list):		for line in list:			self.parent.privMsg(target, "got valid request from %s to add eBattle to %s" % (founder, chan), self.uid)			def startup(self):		if not PSModule.startup(self): return False		self.sublogstatus = True				try:			self.uid, user = self.parent.createFakeUser(				self.config.get('ebattle', 'nick'),				self.config.get('ebattle', 'user'),				self.config.get('ebattle', 'host'),				self.config.get('ebattle', 'gecos'),				self.config.get('ebattle', 'modes'),				self.config.get('ebattle', 'nspass'),				version="PyPsd ebattle v%d" % self.VERSION			)		except Exception, err:			self.logger.log("Error creating ebattle module user: %s" % err, L_ERROR)			raise Exception("Error, config invalid for ebattle module- no user defined", L_ERROR)			try:			self.dbp.execute("CREATE TABLE IF NOT EXISTS `ebattle` (`id` int(9) NOT NULL auto_increment, \				`chan` varchar(51) NOT NULL, PRIMARY KEY  (`id`), UNIQUE KEY `chan` (`chan`))")		except Exception, err:			self.logger.log("Error creating table for ebattle module (%s)" % err, L_ERROR)			raise Exception("Unable to create table for ebattle module")								try:				self.channels = []			self.dbp.execute("SELECT chan FROM ebattle")			tmpchans = self.dbp.fetchall ()			#self.channels = ["#Zion"]			for c in tmpchans:				self.channels.append(c[0].lower())						now = self.parent.mkts()			for chan in self.channels:				self.parent.privMsg(self.logchan, "Joined %s" % chan, self.uid)				self.parent.sendMessage("JOIN", "%d" % now, chan, "+", prefix=self.uid)				self.parent.join_channel(self.uid, chan)		except Exception, err:			self.logger.log("Error loading channel list for ebattle module (%s)" % err, L_ERROR)			raise Exception("Unable to load channel ist for ebattle module")		try:			self.sublog = "#e.out"			self.parent.privMsg(self.logchan, "Joined %s for sublogging" % self.sublog, self.uid)			self.parent.sendMessage("JOIN", "%d" % now, self.sublog, "+", prefix=self.uid)			self.parent.join_channel(self.uid, self.sublog)		except Exception, err:			self.logger.log("Error connecting to sublog channel (%s)" % err, L_ERROR)			raise Exception("Unable to connect to sublog channel")			return True			def shutdown(self):		PSModule.shutdown(self)		self.parent.quitFakeUser(self.uid)	def ebattle_NOTICE(self, prefix, params):		uid, user = self.parent.get_user(params[0])		poo, nick = self.parent.get_user(prefix)				if uid != self.uid: return #ignore stuff not for this module				if(nick['nick'] == 'ChanServ'):			self.parent.privMsg(self.logchan, "got from chanserv: %s" % (params[1]), self.uid)		else: return		text = params[1].split(" ")		status = text[2].strip("\002")		founder = text[0].strip("\002")		chan = text[5].strip(".")				if "Founder" != status: return		now = self.parent.mkts()		try:			if chan in self.channels:				self.parent.privMsg(self.logchan, "got valid request from %s to remove eBattle to %s" % (founder, chan), self.uid)				self.parent.privMsg(self.logchan, "Left %s" % chan, self.uid)				self.parent.sendMessage("PART", chan, prefix=self.uid)				self.parent.part_channel(self.uid, chan)				self.channels.remove(chan,)				self.dbp.execute("DELETE FROM ebattle WHERE chan=%s;", (chan,))							else:				self.parent.privMsg(self.logchan, "got valid request from %s to add eBattle to %s" % (founder, chan), self.uid)				self.channels.append(chan,)				self.parent.privMsg(self.logchan, "Joined %s" % chan, self.uid)				self.parent.sendMessage("JOIN", "%d %s %s" % (now, chan, "+"), prefix=self.uid)				self.parent.join_channel(self.uid, chan)				self.dbp.execute("INSERT INTO ebattle (id,chan) VALUES(NULL,%s);", (chan,))							except Exception, err:			self.logger.log("Error add/remove chan for ebattle module (%s)" % err, L_ERROR)			raise Exception("Error add/remove chan for ebattle module")			def ebattle_PRIVMSG(self, prefix, params):		uid, user = self.parent.get_user(params[0])		poo, nick = self.parent.get_user(prefix)				def battlemonitor():			self.parent.privMsg(self.sublog, "Scanner up and active...", self.uid)			lastevent = ""			event = ""			socket.setdefaulttimeout(5)			while 1:				try:					dom = minidom.parse(urllib.urlopen("http://www.erepublik.com/rss/allMilitaryEvents"))					event = dom.getElementsByTagName('title')[1].toxml().split(">")[1][:-7]					if lastevent == "":						self.parent.privMsg(self.sublog, "Initiate run, skipping check, scanner has been set to 60 seconds..." , self.uid)					elif lastevent == "error":						self.parent.privMsg(self.sublog, "Rerun after error, skipping check, scanner has been set to 60 seconds..." , self.uid)					else:						#self.parent.privMsg(self.sublog, "%s" % event , self.uid)						if event != lastevent:							self.parent.privMsg(self.sublog,"New event appeared, sending global... (%s)" % event, self.uid)							website = urllib.urlopen("http://www.erepublik.com/en/news/military/1/0").read().split("\n")							for web in website: 								if str(event) in str(web): 									link = web.split('"')[1]							for chan in self.channels:								self.parent.privMsg(chan,"** %s - http://www.erepublik.com%s **" % (event, link), self.uid)										except Exception, err:					self.parent.privMsg(self.sublog, "%s - Skipping..." % err, self.uid)					event = "error"				time.sleep(60)				lastevent = event		if params[0] in self.sublog:			if params[1].split()[0] == "--run":			threads.deferToThread(battlemonitor)		if uid != self.uid: return 		self.parent.privMsg(self.logchan, "got message to %s saying %s from %s" % (params[0], params[1], nick['nick']), self.uid)						if (params[1][0:9] == 'request #'):			self.parent.privMsg("ChanServ", "why %s %s" % (params[1][8:], nick['nick']), self.uid)		elif (params[1][0:8] == 'remove #'):			self.parent.privMsg("ChanServ", "why %s %s" % (params[1][7:], nick['nick']), self.uid)	## Begin event hooks			def getHooks(self):		return (('privmsg', self.ebattle_PRIVMSG),('notice', self.ebattle_NOTICE))