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))