h/core/main.py

61 lines
1.8 KiB
Python

import thread
import traceback
class Input(object):
def __init__(self, conn, raw, prefix, command,
params, nick, user, host, paraml, msg):
self.conn = conn # irc object
self.server = conn.server # hostname of server
self.raw = raw # unprocessed line of text
self.prefix = prefix # usually hostmask
self.command = command # PRIVMSG, JOIN, etc.
self.params = params
self.nick = nick
self.user = user # user@host
self.host = host
self.paraml = paraml # params[-1] without the :
self.msg = msg
self.chan = paraml[0]
if self.chan == conn.nick: # is a PM
self.chan = nick
def say(self, msg):
self.conn.msg(self.chan, msg)
def reply(self, msg):
self.say(self.nick + ': ' + msg)
def pm(self, msg):
self.conn.msg(self.nick, msg)
def run(func, input):
ac = func.func_code.co_argcount
if ac == 2:
out = func(bot, input)
elif ac == 1:
out = func(input.inp)
if out is not None:
input.reply(unicode(out))
def main(conn, out):
for csig, func, args in bot.plugs['tee']:
input = Input(conn, *out)
func._iqueue.put((bot, input))
for csig, func, args in (bot.plugs['command'] + bot.plugs['event']):
input = Input(conn, *out)
for fsig, sieve in bot.plugs['sieve']:
try:
input = sieve(bot, input, func, args)
except Exception, e:
print 'sieve error',
traceback.print_exc(Exception)
input = None
if input == None:
break
if input == None:
continue
thread.start_new_thread(run, (func, input))