import re import os from pathlib import Path from random import choice, randint from nonebot.adapters.cqhttp.utils import unescape from ATRI.service import Service from ATRI.log import logger from ATRI.exceptions import RequestError from ATRI.utils import request from ATRI.utils import request, Translate from ATRI.rule import is_in_service FUNNY_DIR = Path(".") / "data" os.makedirs(FUNNY_DIR, exist_ok=True) __doc__ = """ 乐1乐,莫当真 """ class Funny(Service): def __init__(self): Service.__init__(self, "乐", __doc__, rule=is_in_service("乐")) @staticmethod async def idk_laugh(name: str) -> str: laugh_list = list() file_name = "laugh.txt" path = FUNNY_DIR / file_name if not path.is_file(): logger.warning("未发现笑话相关数据,正在下载并保存...") url = ( "https://cdn.jsdelivr.net/gh/Kyomotoi/CDN@master/project/ATRI/laugh.txt" ) res = await request.get(url) context = await res.text() # type: ignore with open(path, "w", encoding="utf-8") as w: w.write(context) logger.warning("完成") with open(path, "r", encoding="utf-8") as r: for line in r: laugh_list.append(line.strip("\n")) rd: str = choice(laugh_list) result = rd.replace("%name", name) return result @staticmethod def me_re_you(msg: str) -> tuple: if "我" in msg and "[CQ" not in msg: return msg.replace("我", "你"), True else: return msg, False @staticmethod def fake_msg(text: str) -> list: arg = text.split(" ") node = list() for i in arg: args = i.split("-") qq = args[0] name = unescape(args[1]) repo = unescape(args[2]) dic = {"type": "node", "data": {"name": name, "uin": qq, "content": repo}} node.append(dic) return node @staticmethod async def eat_what(name: str, msg: str) -> str: EAT_URL = "https://wtf.hiigara.net/api/run/" params = {"event": "ManualRun"} pattern_0 = r"大?[今明后]天(.*?)吃[什啥]么?" pattern_1 = r"(今|明|后|大后)天" arg = re.findall(pattern_0, msg)[0] day = re.match(pattern_1, msg).group(0) # type: ignore if arg == "中午": a = f"LdS4K6/{randint(0, 1145141919810)}" url = EAT_URL + a try: data = await request.post(url, params=params) data = await data.json() except RequestError: raise RequestError("Request failed!") text = Translate(data["text"]).to_simple().replace("今天", day) get_a = re.search(r"非常(.*?)的", text).group(0) # type: ignore result = text.replace(get_a, "") elif arg == "晚上": a = f"KaTMS/{randint(0, 1145141919810)}" url = EAT_URL + a try: data = await request.post(url, params=params) data = await data.json() except RequestError: raise RequestError("Request failed!") result = Translate(data["text"]).to_simple().replace("今天", day) else: rd = randint(1, 10) if rd == 5: result = ["吃我吧 ❤", "(脸红)请...请享用咱吧......", "都可以哦~不能挑食呢~"] return choice(result) else: a = f"JJr1hJ/{randint(0, 1145141919810)}" url = EAT_URL + a try: data = await request.post(url, params=params) data = await data.json() except RequestError: raise RequestError("Request failed!") text = Translate(data["text"]).to_simple().replace("今天", day) get_a = re.match(r"(.*?)的智商", text).group(0) # type: ignore result = text.replace(get_a, f"{name}的智商") return result