def fire_on(self, target_state, handler, event): print "Registering callback on: %s for (%s => %s: %s)" % (target_state, nm_to_n(event.source()), event.target(), event.arguments()) target, state = nm_to_n(target_state[0]), target_state[1] self.pending_events.append( ((target, state), (handler, event)) )
def on_privmsg(self, connection, e): self._pass_message(connection, e) response = self._route_message(connection, e, self.routes.private) if response and type(response) in (str, unicode): self.reply(nm_to_n(e.source()), response) if response and type(response) in (list, tuple): map(lambda line: self.reply(nm_to_n(e.source()), line), response)
def fire_on_transition(self, user, old, new): user = nm_to_n(user) print "Searching to fire on: (%s) %s => %s:" % (user, old, new) print "Queue:", self.transition_triggers for trigger in self.transition_triggers: t_user, t_old, t_new, t_action = trigger if ((t_user == None) or (t_user == user)) and (t_old == type(old) and t_new == type(new)): print "Should fire:", trigger t_action(user = user)
def log_message(meta, message): from wheelman.core.models import Log print "Logging: %s => %s: %s" % (meta.event.source(), meta.event.target(), message) session = Session() session.add(Log(type = meta.event.eventtype(), source = nm_to_n(meta.event.source()), target = meta.event.target(), text = message)) session.commit() session.close()
def dance(meta): return ("Just for you, %s" % nm_to_n(meta.event.source()), "(^'-')^", "(^'-')>", "(>'-')>", "<('-'^)", "^('-'^)", "(^'-')^", "(^'-')>", "(>'-')>", "<('-'^)", "^('-'^)")
def wrapped_func(meta, *args, **kwargs): print "wrapped in need_user_state(%s)" % state user_states = fsm.get_user_states(meta.event.source()) print "User states:", user_states, if state in [type(s) for s in user_states]: print "Passing" return func(meta, *args, **kwargs) else: print "Failing, and deferring" fsm.add_initial_user_state(meta.event.source(), state=Anonymous, data=meta.event) fsm.fire_on((meta.event.source(), state), meta.origin, meta.event) meta.connection.whois([nm_to_n(meta.event.source())]) return None
def add_initial_user_state(self, user, data = None, state=Anonymous): if not self.user_fsm.get(nm_to_n(user)): self.user_fsm[nm_to_n(user)] = [] self.user_fsm[nm_to_n(user)].append(state(data)) return self.get_user_states(user)
def update_user_state(self, user, old, new): self.user_fsm[nm_to_n(user)].remove(old) self.user_fsm[nm_to_n(user)].append(new)
def get_user_states(self, user): return self.user_fsm.get(nm_to_n(user), [])
def on_nick(self, connection, e): old, new = nm_to_n(e.source()), e.target() print "Updating FSM nick keys %s => %s" % (old, new) fsm.update_nick(old, new)
def die(meta, message): import sys message = message or "I've been asked to leave by %s" % nm_to_n(meta.event.source()) meta.connection.quit(message) sys.exit(0) #TODO: This should be an exception handled at the top