Пример #1
0
 def process_args(self, **kwargs):
     args = defaultdict(str)
     for k, v in kwargs.items():
         if is_string(v):
             v = to_text(v)
         args[k] = v
     return args
Пример #2
0
class TextReply(WeChatReply):
    TEMPLATE = to_text(
        """
        <xml>
        <ToUserName><![CDATA[{target}]]></ToUserName>
        <FromUserName><![CDATA[{source}]]></FromUserName>
        <CreateTime>{time}</CreateTime>
        <MsgType><![CDATA[text]]></MsgType>
        <Content><![CDATA[{content}]]></Content>
        </xml>
        """
    )
Пример #3
0
    def __init__(self, message=None, **kwargs):
        print("replies.py __init__ target " + message.target)

        if message and "source" not in kwargs:
            kwargs["source"] = message.target

        if message and "target" not in kwargs:
            kwargs["target"] = message.source

        if 'time' not in kwargs:
            kwargs["time"] = int(time.time())

        # if 'content' not in kwargs:
        # kwargs["content"] = "Hello, stranger."

        args = defaultdict(str)
        for k, v in kwargs.items():
            if is_string(v):
                v = to_text(v)
            args[k] = v
        self.process_args(args)
        self._args = args
Пример #4
0
    def add_filter(self, func, rules):
        """
        为 BaseRobot 添加一个 filter handler
        :param func: 如果 rules 通过,则处理该消息的 handler
        :param rules: 一个 list, 包含要匹配的字符串或者正则表达式
        :return:
        """
        if not callable(func):
            raise ValueError("{} is not callable".format(func))
        if not isinstance(rules, list):
            raise ValueError("{} is not list".format(rules))

        if len(rules) > 1:
            for x in rules:
                self.add_filter(func, [x])
        else:
            target_content = rules[0]
            # 根据判断条件定义 _check_content()

            if isinstance(target_content, six.string_types):
                target_content = to_text(target_content)

                def _check_content(message):
                    return message.content == target_content
            elif is_regex(target_content):

                def _check_content(message):
                    return target_content.match(message.content)
            else:
                raise TypeError(
                    "{} is not a valid rule.".format(target_content))
            argc = len(signature(func).parameters.keys())

            @self.text
            def _f(message, session=None):
                if _check_content(message):  # 调用合适的 _check_content
                    return func(*[message, session][:argc])
Пример #5
0
 def __get__(self, instance, owner):
     v = get_value(instance, self.entry, self.default)
     if v is not None:
         return to_text(v)
     return v
Пример #6
0
 def render(self):
     return to_text(self.TEMPLATE.format(**self._args))
Пример #7
0
 def render(self):
     return to_text(self.__TEMPLATE__.format(**self.process_args(self.args)))