import re, os, sys, random, ircAsync, copy import socket import asyncore, asynchat, urllib, time import cPickle as pickle from eep3 import api, query, ntuples import cwmclone, n3, n3s MyChannel = '#swhack' Port = 6667 SaveFile = 'chumpette.pkl' def dump(s): pickle.dump(s, open(SaveFile, 'w')) def load(): return pickle.load(open(SaveFile, 'r')) try: store = load() except: dump(api.Store()) def blog(x): rpl = '' s = open('blog.html', 'r').read() s = s.replace(rpl, '%s\n%s' % (x, rpl)) open('blog.html', 'w').write(s) SPC = "\x20" CR = "\x0d" LF = "\x0a" CRLF = CR+LF Port = 6667 # commands... PRIVMSG = ircAsync.PRIVMSG NOTICE = ircAsync.NOTICE PING = ircAsync.PING PONG = ircAsync.PONG USER = ircAsync.USER NICK = ircAsync.NICK JOIN = ircAsync.JOIN PART = ircAsync.PART INVITE = ircAsync.INVITE QUIT = ircAsync.QUIT # reply codes... RPL_WELCOME='001' class AppURLopener(urllib.FancyURLopener): def __init__(self, *args): self.version = "chumpette/1.0" apply(urllib.FancyURLopener.__init__, (self,) + args) urllib._urlopener = AppURLopener() def test(hostName, port, chan): c = ircAsync.T() c.startChannels([chan]) c.nick = 'chumpette' c.userid = 'chumpette' def process(m, origin, args, text, c=c): m = m.groups()[0].strip() if m[-1] == '?': # do a query m = n3s.process(m[:-1]) store = load() rstore = n3.parse(m, '') result = cwmclone.filter(store, rstore) for triple in result[None]: if (triple[1].value == 'http://www.w3.org/2000/10/swap/log#outputString'): blog(triple[2].value.replace('\\"', '"')) c.tell(args[1], 'blogged %s' % triple[0]) result[None] = result[None].remove(triple) rs = n3.serialize(result) for line in rs.split('\n'): c.tell(args[1], line); time.sleep(1) else: m = n3s.process(m) triples = n3.parse(m, '') store = load() for triple in triples[None]: store.append(triple, None) dump(store) c.tell(args[1], 'added '+`len(triples)`+' triples') c.bind(process, PRIVMSG, r'^chumpette, (.*)$') def slen(m, origin, args, text, c=c): c.tell(args[1], 'length of store: '+`len(load())`) c.bind(slen, PRIVMSG, r'^chumpette, store length\?$') def hi(m, origin, args, text, c=c): c.tell(args[1], 'hi, %s' % origin.split('!')[0]) c.bind(hi, PRIVMSG, r"(?i)^(?:Hi|Hey|Hola|welcome|bienvenue)(?:,)? chumpette(?:\!)?$") c.makeConn(hostName, port) asyncore.loop() if __name__=='__main__': if len(sys.argv) > 1: MyChannel = sys.argv[1] test('irc.openprojects.net', Port, MyChannel)