All pastes #392923 Raw Edit

Miscellany

public python v1 · immutable
·published 2007-03-13 05:13 UTC
rendered paste body
#!/usr/bin/env pythonfrom ircbot import SimpleIRCClientimport irclibimport osimport feedparserimport reimport urllibimport timeimport sysclass HorseNews(SimpleIRCClient):        server = 'trollforge.net'        basenick = 'HorseNews'        banner = '^C7,5/!!!\ ^_^BBREAKING Horse News^B^_ /!!!\^C'        trigger = '!horse'        username = "HorseNews"        channels = ["#chirp"]        feedurl = 'http://news.google.com/news?hl=en&ned=us&q=HORSE+-trojan&output=rss'        burst = 1        nick = basenick        d = ""        linkcache = []        lasthorse = {}        lasthorseupdate = time.time() + 999999        def __init__(self):                SimpleIRCClient.__init__(self)                self.connect()                while 1:                        if time.time() - self.lasthorseupdate >= 300:                                self.Horse()                                self.lasthorseupdate = time.time()                                if self.burst == 0:                                        self.burst = 1;                                        continue                                self.MsgHorseUpdates()                        self.ircobj.process_once(.2)        def Horse(self):                self.d = feedparser.parse(self.feedurl)        def cleanURL(self, dirtyURL):                clean = urllib.unquote(dirtyURL)                whinny = re.search("^http://news.+url=(http://.+)&cid=.+&ei=.+$", clean)                if(whinny):                        clean = whinny.group(1)                return clean        def cleanTitle(self, dirtyTitle):                clean = re.sub(" -[^-]+$", "", dirtyTitle)                clean = clean.replace(''', "'")                clean = clean.replace('"', '\"');                clean = clean.replace('&', '&');                return clean        def MsgHorseUpdates(self):                newupdates = []                self.d = feedparser.parse(self.feedurl)                for entry in self.d.entries:                        incache = 0                        for cacheentry in self.linkcache:                                if self.cleanURL(entry.link) == cacheentry:                                        incache = 1                                        break;                                else:                                        incache = 0                        if incache == 0:                                newupdates.append(self.cleanTitle(entry.title) + " -> " +\                                self.cleanURL(entry.link))                                self.linkcache.append(self.cleanURL(entry.link))                if len(newupdates) > 0:                        for channel in self.channels:                                self.connection.privmsg(channel, self.banner)                                for update in newupdates:                                        self.connection.privmsg(channel, update.encode("UTF-8"))        def connect(self):                SimpleIRCClient.connect(self, self.server, 6667, self.nick, "", self.username)        def on_disconnect(self, c, e):                print "Warning: Disconnected"                SimpleIRCClient.__init__(self)                self.connect()        def on_ctcp(self, c, e):                if e.arguments()[0] == "VERSION":                        c.ctcp_reply(irclib.nm_to_n(e.source()), "VERSION " + self.get_version())        def on_welcome(self, c, e):                for chan in self.channels:                        c.join(chan)                        self.lasthorse[chan] = time.time()-30        def on_pubmsg(self, c, e):                # if "!horse"                if e.arguments()[0].lower() == self.trigger.lower()\                and time.time() - self.lasthorse[e.target().lower()] >= 30:                        if time.time() - self.lasthorseupdate >= 300:                                self.Horse()                                self.lasthorseupdate = time.time()                        self.lasthorse[e.target().lower()] = time.time()                        self.MsgHorses(e.target(), -1)                        return                #if !horse [digits]                neigh = re.search('^'+self.trigger.lower()+' ([0-9]+)$',\                e.arguments()[0].lower())                if neigh:                        self.MsgHorses(e.target(), int(neigh.group(1)))        def MsgHorses(self, target, index):                if index == -1:                        i = 0                        for entry in self.d.entries:                                self.connection.privmsg(target, str(i) + ". " + \                                self.cleanTitle(entry.title).encode("UTF-8"))                                i = i + 1                else:                        try:                                self.connection.privmsg\                                (target, self.cleanURL(self.d.entries[index].link).encode("UTF-8"))                        except AttributeError:                                return                        except IndexError:                                return        def on_join(self, c, e):                for channel in self.channels:                        if e.target().lower() == channel.lower():                                self.lasthorse[e.target().lower()] = time.time()                                c.mode(e.target() + " +qo", c.get_nickname() + " " + c.get_nickname())                                if channel == self.channels[len(self.channels)-1]:                                        self.lasthorseupdate = time.time()-300                                return                c.part(e.target())        def get_version(self):                return sys.argv[0] + " v1.5 running on " + os.uname()[0] + " " +  os.uname()[1] \                + " " + os.uname()[2] + " " +  os.uname()[3] + " " +  os.uname()[4]while(1):        Horse = HorseNews()