diff options
author | Kyomotoi <[email protected]> | 2021-07-08 22:09:00 +0800 |
---|---|---|
committer | Kyomotoi <[email protected]> | 2021-07-08 22:09:00 +0800 |
commit | be2747e4d4b820ca0f1f988d3b77a628da26fe7b (patch) | |
tree | e1a59dd79ecd973a7d704568dcdc018f1f1b651a /ATRI/plugins/utils | |
parent | a4e1b9d1581d756ef79ad063d1c0bd6b2fd13c1d (diff) | |
download | ATRI-be2747e4d4b820ca0f1f988d3b77a628da26fe7b.tar.gz ATRI-be2747e4d4b820ca0f1f988d3b77a628da26fe7b.tar.bz2 ATRI-be2747e4d4b820ca0f1f988d3b77a628da26fe7b.zip |
🔖♻️🐛🔧🔥📝 更新版本:YHN-001-A03
🔖 更新版本至:YHN-001-A03
✨ 新增插件:
- 涩图
- 闲聊(文爱
♻️ 重构:
- Service
- 所有插件
🐛 修复部分小bug
🔧 暂时移除部分设置
🔥 删除:
- 插件:nsfw、wife。日后加回
- 插件 essential 中部分内容
📝 更新README
Diffstat (limited to 'ATRI/plugins/utils')
-rw-r--r-- | ATRI/plugins/utils/__init__.py | 120 | ||||
-rw-r--r-- | ATRI/plugins/utils/data_source.py | 200 |
2 files changed, 0 insertions, 320 deletions
diff --git a/ATRI/plugins/utils/__init__.py b/ATRI/plugins/utils/__init__.py deleted file mode 100644 index 608f1f5..0000000 --- a/ATRI/plugins/utils/__init__.py +++ /dev/null @@ -1,120 +0,0 @@ -import re -from random import random - -from nonebot.typing import T_State -from nonebot.adapters.cqhttp import Bot, MessageEvent - -from ATRI.service import Service as sv -from ATRI.rule import is_in_service -from .data_source import roll_dice, Encrypt, Yinglish - - -__doc__ = """ -roll一下 -权限组:所有人 -用法: - /roll (int)d(int)+... -补充: - int: 阿拉伯数字 -示例: - /roll 1d10+10d9+4d5+2d3 -""" - -roll = sv.on_command(cmd="/roll", docs=__doc__, rule=is_in_service("roll")) - - [email protected]_parser # type: ignore -async def _load_roll(bot: Bot, event: MessageEvent, state: T_State) -> None: - msg = str(event.message).strip() - quit_list = ["算了", "罢了", "取消"] - if msg in quit_list: - await roll.finish("好吧...") - if not msg: - await roll.reject("点呢?(1d10+...)") - else: - state["resu"] = msg - - -async def _roll(bot: Bot, event: MessageEvent, state: T_State) -> None: - args = str(event.message).strip() - if args: - state["resu"] = args - - [email protected]("resu", prompt="roll 参数不能为空~!\ndemo:1d10 或 2d10+2d10") -async def _deal_roll(bot: Bot, event: MessageEvent, state: T_State) -> None: - resu = state["resu"] - match = re.match(r"^([\dd+\s]+?)$", resu) - - if not match: - await roll.finish("请输入正确的参数!!\ndemo:1d10 或 2d10+2d10") - - await roll.finish(roll_dice(resu)) - - -__doc__ = """ -加密传输(bushi -权限组:所有人 -用法: - /enc e,d msg -补充: - e,d:对应 编码/解码 - msg: 目标内容 -示例: - /enc e アトリは高性能ですから! -""" - -encrypt = sv.on_command(cmd="/enc", docs=__doc__, rule=is_in_service("enc")) - - -async def _encrypt(bot: Bot, event: MessageEvent) -> None: - msg = str(event.message).split(" ") - _type = msg[0] - s = msg[1] - e = Encrypt() - - if _type == "e": - await encrypt.finish(e.encode(s)) - elif _type == "d": - await encrypt.finish(e.decode(s)) - else: - await encrypt.finish("请检查输入~!") - - -__doc__ = """ -涩批一下! -权限组:所有人 -用法: - 涩批一下 (msg) -""" - -sepi = sv.on_command(cmd="涩批一下", docs=__doc__, rule=is_in_service("涩批一下")) - - -async def _load_sepi(bot: Bot, event: MessageEvent, state: T_State) -> None: - msg = str(event.message).strip() - quit_list = ["算了", "罢了", "取消"] - if msg in quit_list: - await sepi.finish("好吧...") - if not msg: - await sepi.reject("话呢?") - else: - state["sepi_msg"] = msg - - -async def _sepi(bot: Bot, event: MessageEvent, state: T_State) -> None: - msg = str(event.message).strip() - if msg: - state["sepi_msg"] = msg - - [email protected]("sepi_msg", prompt="话呢?") -async def _deal_sepi(bot: Bot, event: MessageEvent, state: T_State) -> None: - msg = state["sepi_msg"] - if len(msg) < 4: - await sepi.finish("这么短?涩不起来!") - await sepi.finish(Yinglish.deal(msg, random())) diff --git a/ATRI/plugins/utils/data_source.py b/ATRI/plugins/utils/data_source.py deleted file mode 100644 index 92ae930..0000000 --- a/ATRI/plugins/utils/data_source.py +++ /dev/null @@ -1,200 +0,0 @@ -import re -from math import floor -import jieba.posseg as pseg -from typing import Union, Optional -from random import random, choice, randint - - -def roll_dice(par: str) -> str: - result = 0 - proc = "" - proc_list = [] - p = par.split("+") - - for i in p: - args = re.findall(r"(\d{0,10})(?:(d)(\d{1,10}))", i) - args = list(args[0]) - - args[0] = args[0] or 1 - if int(args[0]) >= 5000 or int(args[2]) >= 5000: - return "阿...好大......" - - for a in range(1, int(args[0]) + 1): - rd = randint(1, int(args[2])) - result = result + rd - - if len(proc_list) <= 10: - proc_list.append(rd) - - if len(proc_list) <= 10: - proc += "+".join(map(str, proc_list)) - elif len(proc_list) > 10: - proc += "太长了不展示了就酱w" - else: - proc += str(result) - - result = f"{par}=({proc})={result}" - return result - - -class Encrypt: - cr = "ĀāĂ㥹ÀÁÂÃÄÅ" - cc = "ŢţŤťŦŧṪṫṬṭṮṯṰṱ" - cn = "ŔŕŘřṘṙŖŗȐȑȒȓṚṛṜṝṞṟɌɍⱤɽᵲᶉɼɾᵳʀRr" - cb = "ĨĩĪīĬĭĮįİı" - - sr = len(cr) - sc = len(cc) - sn = len(cn) - sb = len(cb) - src = sr * sc - snb = sn * sb - scnb = sc * snb - - def _div(self, a: int, b: int) -> int: - return floor(a / b) - - def _encodeByte(self, i) -> Union[str, None]: - if i > 0xFF: - raise ValueError("ERROR! at/ri overflow") - - if i > 0x7F: - i = i & 0x7F - return self.cn[self._div(i, self.sb) + int(self.cb[i % self.sb])] - - return self.cr[self._div(i, self.sc) + int(self.cc[i % self.sc])] - - def _encodeShort(self, i) -> str: - if i > 0xFFFF: - raise ValueError("ERROR! atri overflow") - - reverse = False - if i > 0x7FFF: - reverse = True - i = i & 0x7FFF - - char = [ - self._div(i, self.scnb), - self._div(i % self.scnb, self.snb), - self._div(i % self.snb, self.sb), - i % self.sb, - ] - char = [self.cr[char[0]], self.cc[char[1]], self.cn[char[2]], self.cb[char[3]]] - - if reverse: - return char[2] + char[3] + char[0] + char[1] - - return "".join(char) - - def _decodeByte(self, c) -> int: - nb = False - idx = [self.cr.index(c[0]), self.cc.index(c[1])] - if idx[0] < 0 or idx[1] < 0: - idx = [self.cn.index(c[0]), self.cb.index(c[1])] - nb = True - raise ValueError("ERROR! at/ri overflow") - - result = idx[0] * self.sb + idx[1] if nb else idx[0] * self.sc + idx[1] - if result > 0x7F: - raise ValueError("ERROR! at/ri overflow") - - return result | 0x80 if nb else 0 - - def _decodeShort(self, c) -> int: - reverse = c[0] not in self.cr - if not reverse: - idx = [ - self.cr.index(c[0]), - self.cc.index(c[1]), - self.cn.index(c[2]), - self.cb.index(c[3]), - ] - else: - idx = [ - self.cr.index(c[2]), - self.cc.index(c[3]), - self.cn.index(c[0]), - self.cb.index(c[1]), - ] - - if idx[0] < 0 or idx[1] < 0 or idx[2] < 0 or idx[3] < 0: - raise ValueError("ERROR! not atri") - - result = idx[0] * self.scnb + idx[1] * self.snb + idx[2] * self.sb + idx[3] - if result > 0x7FFF: - raise ValueError("ERROR! atri overflow") - - result |= 0x8000 if reverse else 0 - return result - - def _encodeBytes(self, b) -> str: - result = [] - for i in range(0, (len(b) >> 1)): - result.append(self._encodeShort((b[i * 2] << 8 | b[i * 2 + 1]))) - - if len(b) & 1 == 1: - result.append(self._encodeByte(b[-1])) - - return "".join(result) - - def encode(self, s: str, encoding: str = "utf-8"): - if not isinstance(s, str): - raise ValueError("Please enter str instead of other") - - return self._encodeBytes(s.encode(encoding)) - - def _decodeBytes(self, s: str): - if not isinstance(s, str): - raise ValueError("Please enter str instead of other") - - if len(s) & 1: - raise ValueError("ERROR length") - - result = [] - for i in range(0, (len(s) >> 2)): - result.append(bytes([self._decodeShort(s[i * 4 : i * 4 + 4]) >> 8])) - result.append(bytes([self._decodeShort(s[i * 4 : i * 4 + 4]) & 0xFF])) - - if (len(s) & 2) == 2: - result.append(bytes([self._decodeByte(s[-2:])])) - - return b"".join(result) - - def decode(self, s: str, encoding: str = "utf-8") -> str: - if not isinstance(s, str): - raise ValueError("Please enter str instead of other") - - try: - return self._decodeBytes(s).decode(encoding) - except UnicodeDecodeError: - raise ValueError("Decoding failed") - - -class Yinglish: - @staticmethod - def _to_ying(x, y, ying) -> str: - if random() > ying: - return x - if x in [",", "。"]: - return str(choice(["..", "...", "....", "......"])) - if x in ["!", "!"]: - return "❤" - if len(x) > 1 and random() < 0.5: - return str( - choice( - [ - f"{x[0]}..{x}", - f"{x[0]}...{x}", - f"{x[0]}....{x}", - f"{x[0]}......{x}", - ] - ) - ) - else: - if y == "n" and random() < 0.5: - x = "〇" * len(x) - return str(choice([f"...{x}", f"....{x}", f".....{x}", f"......{x}"])) - - @classmethod - def deal(cls, text, ying: Optional[float] = 0.5) -> str: - return "".join([cls._to_ying(x, y, ying) for x, y in pseg.cut(text)]) |