跳转至

工具

timeout

超时返回 success

Attributes:

Name Type Description
secconds float

超时时间

Source code in zgrobot/utils.py
class timeout:
    """超时返回 success

    Attributes:
        secconds (float): 超时时间
    """
    __executor = futures.ThreadPoolExecutor(1)

    def __init__(self, seconds: float):
        self.seconds = seconds

    def __call__(self, func):

        @functools.wraps(func)
        def wrapper(*args, **kw):
            future = timeout.__executor.submit(func, *args, **kw)
            try:
                result = future.result(timeout=self.seconds)
                print(f"成功输出!{self.seconds}")
            except Exception as e:
                print(e, "======")
                result = "success"
            return result

        return wrapper

byte2int(s, index=0)

Get the ASCII int value of a character in a string.

:param s: a string :param index: the position of desired character

:return: ASCII int value

Source code in zgrobot/utils.py
def byte2int(s, index=0):
    """Get the ASCII int value of a character in a string.

    :param s: a string
    :param index: the position of desired character

    :return: ASCII int value
    """
    return s[index]

is_string(value)

Check if value's type is str or bytes

Source code in zgrobot/utils.py
def is_string(value) -> bool:
    """Check if value's type is `str` or `bytes`
    """
    return isinstance(value, string_types)

pay_sign_dict(appid, pay_sign_key, add_noncestr=True, add_timestamp=True, add_appid=True, **kwargs)

支付参数签名

Source code in zgrobot/utils.py
def pay_sign_dict(
    appid,
    pay_sign_key,
    add_noncestr=True,
    add_timestamp=True,
    add_appid=True,
    **kwargs
):
    """
    支付参数签名
    """
    assert pay_sign_key, "PAY SIGN KEY IS EMPTY"

    if add_appid:
        kwargs.update({'appid': appid})

    if add_noncestr:
        kwargs.update({'noncestr': generate_token()})

    if add_timestamp:
        kwargs.update({'timestamp': int(time.time())})

    params = kwargs.items()

    _params = [
        (k.lower(), v) for k, v in kwargs.items() if k.lower() != "appid"
    ]
    _params += [('appid', appid), ('appkey', pay_sign_key)]
    _params.sort()

    sign = '&'.join(["%s=%s" % (str(p[0]), str(p[1]))
                     for p in _params]).encode("utf-8")
    sign = sha1(sign).hexdigest()
    sign_type = 'SHA1'

    return dict(params), sign, sign_type

str2button(button_txt, reply_txt)

将普通文本包装为智能按钮

Parameters:

Name Type Description Default
button_txt str

想要转换为智能按钮的文本

required
reply_txt str

按下智能按钮后回复的文本

required

Returns:

Name Type Description
str str

智能按钮的字符串

Source code in zgrobot/utils.py
def str2button(button_txt: str, reply_txt: str) -> str:
    """
    将普通文本包装为智能按钮

    Args:
        button_txt (str): 想要转换为智能按钮的文本
        reply_txt (str): 按下智能按钮后回复的文本

    Returns:
        str: 智能按钮的字符串
    """
    return f"<a href='weixin://bizmsgmenu?msgmenuid=1&msgmenucontent={button_txt}'>{reply_txt}</a>"