def reply(self, data, cb): info = data if not isinstance(data, Info): info = Info(data) if not self.config.get('keepBlank', False) and info.text: info.text = info.text.trim() rule_list = self.routes waiter = self.wait_rules.get(info.user, None) if waiter: rule_list = [].extend(waiter).extend(self.routes) self.last_wait_rules[info.user] = waiter self.wait_rules[info.user] = None for i in range(0, len(rule_list)): rule = rule_list[i] if Rule.is_match(info, rule): weixinlogger.info("match %s" % rule.name) conversationlogger.info("match %s" % rule.name) rule.count = i result = Rule.execute(info, rule, cb) if isinstance(result, (str, unicode)): result = BuildConfig(MessageBuilder.TYPE_RAW_TEXT, None, result) if result: if rule.replies: self.wait(info.user, Rule.convert(rule.replies, rule.name)) return cb(None, result) else: logger.debug("not match %s" % rule.name) return cb('404', BuildConfig(MessageBuilder.TYPE_RAW_TEXT, None, self.get_status('404') + info.text))
def set(self, pattern, handler=None, replies=None): if pattern and handler is None and replies is None: r = pattern else: r = { 'name' : pattern, 'pattern' : pattern, 'handler' : handler, 'replies' : replies } if r is not None: r = Rule.convert(r) self.routes.extend(r)
def wait(self, uid, rule): if rule is not None: rule = Rule.convert(rule) self.wait_rules[uid] = rule