Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import irc
- import time
- #debugging
- import sys
- import traceback
- # using default IRC values because this is a pastebin, not my laptop
- # --- start time functions --- #
- def startTmr():
- return time.clock()
- def checkTmr(t):
- return time.clock()-t
- def checkTmr_df(t):
- """(fractional day)^-1"""
- return 86400/checkTmr(t)
- # --- end time functions --- #
- # --- start shitparse --- #
- def find_all(s, c):
- """string, cmp"""
- o = s.find(c, 0)
- i = []
- while o != -1:
- i.append(o)
- o = s.find(c, o+1)
- return i
- def clean_hostmask(s):
- if s[0] == ':': s = s[1:]
- if '!' not in s:
- return s
- #if s[0] != ':':
- return s[:s.find('!')]
- #return s[s.find(':'):s.find('!')]
- def shitparse(s):
- """IRC raw command, channel, source, text"""
- # chan, cmd, src, text
- try:
- parse = False
- p = map(lambda a:a+1, find_all(s, ' '))
- if s[0] != ':':
- # not a command starting the line
- parse = True
- cmd = s[:p[0]-1]
- if cmd == "PING":
- chan = "SERVER"
- src = "SERVER"
- text = s[p[0]+1:]
- else:
- chan = s[p[0]:p[1]-1]
- src = 'SERVER'
- text= s[s.find(':', p[1])+1:]
- else:
- cmd = s[p[0]:p[1]-1]
- if cmd in ["JOIN", "PART"]:
- chan = s[p[1]+1:]
- src = 'CLIENT'
- text = "Joined or parted %s" % chan
- elif cmd == "NICK":
- chan = clean_hostmask(s[:p[0]-1])
- src = "CLIENT"
- text = s[p[1]+1:]
- else:
- chan = s[p[1]:p[2]-1]
- src = clean_hostmask(s[:p[0]-1])
- text = s[p[2]:]
- if text[0] == ':': text = text[1:]
- parse = True
- if not parse:
- cmd, chan, src = ('',)*3
- text = s
- return [cmd, chan, src, text]
- except:
- e = sys.exc_info()
- print "ERROR IN SHITPARSE:"
- print "Line: $%s$" % s
- for x in e[:-1]: print " "+str(x)
- print "TRACEBACK:"
- traceback.print_tb(e[-1])
- return ['ERROR']+['']*3
- # --- end shitparse --- #
- def run():
- t = startTmr()
- irc.start_thread()
- l = ''
- znc_skip = False
- while True:
- l = irc.get_rline()
- time.sleep(0.001) # much calmer infinite loops
- if len(l) == 0: continue
- f = shitparse(l)
- # znc shut-up code
- ## if "buffextras" in f[2]: continue
- if f[2] == "***" and f[3] == "Buffer Playback...": znc_skip = True
- if f[2] == "***" and f[3] == "Playback Complete.": znc_skip = False
- if znc_skip: continue
- if f[0] in ["PRIVMSG", "MODE", "001", "376", "JOIN", "PART", "KICK", "NICK", "464"] and f[2] != "***":
- print "%s: [%s] <%s> %s" % (f[1], f[0], f[2], f[3])
- text = f[3]
- if f[0] == "464": irc.send_queue.put("PASS imnot:anidiot")
- if "say something" in text:
- irc.send_queue.put("PRIVMSG %s :Hi %s" % (f[1], f[2]))
- if "&killbot" == text:
- if f[1][0] != "#": f[1] = "private message"
- irc.send_queue.put("PRIVMSG %s :%s killed bot at %d from %s" % (irc.ch, f[2], int(time.time()), f[1]))
- break
- irc.kill_thread()
- run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement