예제 #1
0
    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))
예제 #2
0
 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)
예제 #3
0
 def wait(self, uid, rule):
     if rule is not None:
         rule = Rule.convert(rule)
         self.wait_rules[uid] = rule