diff options
Diffstat (limited to 'ATRI/plugins/applet')
-rw-r--r-- | ATRI/plugins/applet/__init__.py | 21 | ||||
-rw-r--r-- | ATRI/plugins/applet/data_source.py | 88 |
2 files changed, 109 insertions, 0 deletions
diff --git a/ATRI/plugins/applet/__init__.py b/ATRI/plugins/applet/__init__.py new file mode 100644 index 0000000..d6e2ab6 --- /dev/null +++ b/ATRI/plugins/applet/__init__.py @@ -0,0 +1,21 @@ +from nonebot.adapters.onebot.v11 import MessageEvent +from nonebot.adapters.onebot.v11.helpers import Cooldown + +from ATRI.log import logger as log +from .data_source import Applet + + +bili_applet = Applet().on_message("小程序检测", "小程序爪巴", block=False) + + +@bili_applet.handle([Cooldown(3)]) +async def _fk_bili(event: MessageEvent): + msg = str(event.message) + try: + result, is_ok = await Applet().fk_bili(msg) + except Exception: + return + log.debug(result, is_ok) + if not is_ok: + return + await bili_applet.finish(result) diff --git a/ATRI/plugins/applet/data_source.py b/ATRI/plugins/applet/data_source.py new file mode 100644 index 0000000..fb7dc79 --- /dev/null +++ b/ATRI/plugins/applet/data_source.py @@ -0,0 +1,88 @@ +import re + +from ATRI.service import Service +from ATRI.utils import request +from ATRI.rule import is_in_service +from ATRI.exceptions import RequestError + + +URL = "https://api.kyomotoi.moe/api/bilibili/v3/video_info?aid=" + +table = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF" +tr = dict() +for i in range(58): + tr[table[i]] = i +s = [11, 10, 3, 8, 4, 6] +xor = 177451812 +add = 8728348608 + +__doc__ = """啥b腾讯小程序给👴爪巴 +目前只整了b站的 +""" + + +class Applet(Service): + def __init__(self): + Service.__init__(self, "小程序处理", __doc__, rule=is_in_service("小程序处理")) + + @staticmethod + def _bv_dec(x) -> str: + r = 0 + for i in range(6): + r += tr[x[s[i]]] * 58 ** i + result = "av" + str((r - add) ^ xor) + return result + + @staticmethod + def _bv_enc(x) -> str: + x = (x ^ xor) + add + r = list("BV1 4 1 7 ") + for i in range(6): + r[s[i]] = table[x // 58 ** i % 58] + return "".join(r) + + @classmethod + async def fk_bili(cls, text: str) -> tuple: + msg = text.replace("\\", "") + bv = False + if "https://b23" in msg: + pattern = r"https://b23\.tv/[a-zA-Z0-9]+" + burl = re.findall(pattern, msg) + u = burl[0] + + try: + res = await request.get(u) + except: + return "Request failed!", False + + bv_pattern = r"video/BV[a-zA-Z0-9]+" + try: + tu = str(res.url) + t_bv = re.findall(bv_pattern, tu) + bv = t_bv[0].replace("video/", "") + except: + return "Deal bv code failed!", False + av = cls._bv_dec(bv).replace("av", "") + + else: + pattern = r"[bB][vV][a-zA-Z0-9]+" + try: + bv = re.findall(pattern, msg)[0] + except: + return "Deal bv code failed!", False + av = cls._bv_dec(bv).replace("av", "") + + url = URL + av + try: + res = await request.get(url) + except RequestError: + return "Request failed!", False + res_data = res.json() + data = res_data["data"] + + result = ( + f"{data['bvid']} INFO:\n" + f"Title: {data['title']}\n" + f"Link: {data['short_link']}" + ) + return result, True |