diff options
author | Kyomotoi <[email protected]> | 2021-02-06 00:32:26 +0800 |
---|---|---|
committer | Kyomotoi <[email protected]> | 2021-02-06 00:32:26 +0800 |
commit | f5ceb8927f2e7f2a9e29d62c8e4cef876f917249 (patch) | |
tree | 40b9dcd6b7d3db486054e3aa9b5a04d25fa2284e /ATRI/plugins/utils | |
parent | eb52fab79ada7efe6191e3a5f90179766feaded0 (diff) | |
download | ATRI-f5ceb8927f2e7f2a9e29d62c8e4cef876f917249.tar.gz ATRI-f5ceb8927f2e7f2a9e29d62c8e4cef876f917249.tar.bz2 ATRI-f5ceb8927f2e7f2a9e29d62c8e4cef876f917249.zip |
🏗 💩 更改项目结构,修复啥b BUG
Diffstat (limited to 'ATRI/plugins/utils')
-rw-r--r-- | ATRI/plugins/utils/__init__.py | 76 | ||||
-rw-r--r-- | ATRI/plugins/utils/data_source.py | 240 | ||||
-rw-r--r-- | ATRI/plugins/utils/main.bin | bin | 3992353 -> 0 bytes |
3 files changed, 2 insertions, 314 deletions
diff --git a/ATRI/plugins/utils/__init__.py b/ATRI/plugins/utils/__init__.py index 4204cfb..e69de29 100644 --- a/ATRI/plugins/utils/__init__.py +++ b/ATRI/plugins/utils/__init__.py @@ -1,76 +0,0 @@ -import re -from nonebot.matcher import Matcher -from nonebot.plugin import on_command -from nonebot.adapters.cqhttp import Bot, Event - -from ATRI.config import UTILS_CONFIG -from ATRI.rule import is_in_ban_list, is_in_dormant, is_in_service - -from .data_source import Function - -# ===========================[Begin Command Processing]=========================== - - -__plugin_name_0__ = 'roll' -roll = on_command(UTILS_CONFIG['utils']['roll']['command'][0], - aliases=set(UTILS_CONFIG['utils']['roll']['command']), - rule=is_in_ban_list() & is_in_dormant() - & is_in_service(__plugin_name_0__)) - -__plugin_name_1__ = 'rcnb' -rcnbEncode = on_command( - UTILS_CONFIG['utils']['rcnb']['encode']['command'][0], - aliases=set( - UTILS_CONFIG['utils']['rcnb']['encode']['command']), - rule=is_in_ban_list() & is_in_dormant() - & is_in_service(__plugin_name_1__)) - -rcnbDecode = on_command( - UTILS_CONFIG['utils']['rcnb']['decode']['command'][0], - aliases=set( - UTILS_CONFIG['utils']['rcnb']['decode']['command']), - rule=is_in_ban_list() & is_in_dormant() - & is_in_service(__plugin_name_1__)) - - -async def _(bot, event: Event, state: dict) -> None: - args = str(event.get_message()).strip() - print(args) - if args: - state['result'] = args - [email protected]('result', prompt='roll参数不能为空!..\ndemo: 1d10 或 2d10+3d10') -async def _(matcher: Matcher, bot: Bot, event: Event, state: dict) -> None: - resu = state['result'] - match = re.match(r'^([\dd+\s]+?)$', resu) - print(match) - if not match: - await matcher.reject('格式不-正-确!\ndemo: 1d10 或 2d10+3d10') - await bot.send(event, Function.roll_dice(par=resu)) - - -async def _(bot, event: Event, state: dict) -> None: - args = str(event.get_message()).strip() - if args: - state['result'] = args - [email protected]('result', prompt='请告诉咱需要加密的字符~!') -async def _(bot: Bot, event: Event, state: dict) -> None: - print(state['result']) - await bot.send(event, Function.RCNB.encode(state['result'])) - - -async def _(bot, event: Event, state: dict) -> None: - args = str(event.get_message()).strip() - if args: - state['result'] = args - [email protected]('result', prompt='请告诉咱需要解密的字符~!') -async def _(bot: Bot, event: Event, state: dict) -> None: - await bot.send(event, Function.RCNB.decode(state['result'])) - - -# ===========================[End Command Processing]============================= diff --git a/ATRI/plugins/utils/data_source.py b/ATRI/plugins/utils/data_source.py index 4d7ddb6..b83cd33 100644 --- a/ATRI/plugins/utils/data_source.py +++ b/ATRI/plugins/utils/data_source.py @@ -1,239 +1,3 @@ -import re -import os -import json -import random -from math import floor -from pathlib import Path -from zipfile import PyZipFile -from typing import Tuple, Union -from random import choice, randint -from typing import Dict, List +from nonebot.adapters.cqhttp.message import MessageSegment -from ATRI.config import UTILS_CONFIG - - -class Function: - @staticmethod - 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]) - if not args[0]: - args[0] = 1 - if int(args[0]) >= 5000 or int(args[2]) >= 5000: - return choice(UTILS_CONFIG['utils']['roll']['tooBig']['repo']) - 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 += choice(UTILS_CONFIG['utils']['roll']['tooLong']['repo']) - else: - proc += str(result) - - msg = f'{par}=({proc})={result}' - print(msg) - return msg - - class Generate: - ''' - (*彩蛋*) - 由于此功能触及法律故不用作上线功能,写于此地只为学习 - 请勿用作网上购物、交易和注册 - 随机身份证根据国家标准(GB11643-1999)生成 - 并不存在所谓: - - 生成在逃犯号码 - ''' - @classmethod - def __init__(cls) -> None: - cls.DATA_PATH = Path('.') / 'ATRI' / 'plugins' / 'utils' / 'main.bin' - - @classmethod - def info_id(cls) -> Tuple[Dict[str, List[str]], Dict[str, str]]: - with PyZipFile(os.path.abspath(cls.DATA_PATH), 'r') as zipFile: - with zipFile.open('name.json', 'r') as f: - name = json.loads(f.read().decode()) - with zipFile.open('area.json', 'r') as f: - area = json.loads(f.read().decode()) - return name, area - - @staticmethod - def number_id(area: int, gender: int, birth: int) -> str: - ''' - 校验码计算公式: (12-∑(Ai×Wi)(mod 11))mod 11 - 验证公式: 请查阅(ISO 7064:1983.MOD 11-2) - ''' - def check_sum(full_code: str): - assert len(full_code) == 17 - check_sum = sum([((1 << (17 - i)) % 11) * int(full_code[i]) - for i in range(0, 17)]) - check_digit = (12 - (check_sum % 11)) % 11 - if check_digit < 10: - return check_digit - else: - return 'X' - - order_code = str(random.randint(10, 99)) - gender_code = str(random.randrange(gender, 10, step=2)) - full_code = str(area) + str(birth) + str(order_code) + str(gender_code) - full_code += str(check_sum(full_code)) - return full_code - - class RCNB: - @classmethod - def __init__(cls) -> None: - cls.cr = 'rRŔŕŖŗŘřƦȐȑȒȓɌɍ' - cls.cc = 'cCĆćĈĉĊċČčƇƈÇȻȼ' - cls.cn = 'nNŃńŅņŇňƝƞÑǸǹȠȵ' - cls.cb = 'bBƀƁƃƄƅßÞþ' - - cls.sr = len(cls.cr) - cls.sc = len(cls.cc) - cls.sn = len(cls.cn) - cls.sb = len(cls.cb) - cls.src = cls.sr * cls.sc - cls.snb = cls.sn * cls.sb - cls.scnb = cls.sc * cls.snb - - @staticmethod - def _div(a: int, b: int) -> int: - return floor(a / b) - - @classmethod - def _encode_byte(cls, i) -> Union[str, None]: - if i > 0xFF: - raise ValueError('ERROR! rc/nb overflow') - - if i > 0x7F: - i = i & 0x7F - return cls.cn[i // cls.sb] + cls.cb[i % cls.sb] - # return f'{cls.cn[i // cls.sb]}{cls.cb[i % cls.sb]}' - # return cls.cn[cls._div(i, cls.sb) + int(cls.cb[i % cls.sb])] - - return cls.cr[i // cls.sc] + cls.cc[i % cls.sc] - # return cls.cr[cls._div(i, cls.sc) + int(cls.cc[i % cls.sc])] - - @classmethod - def _encode_short(cls, i) -> str: - if i > 0xFFFF: - raise ValueError('ERROR! rcnb overflow') - - reverse = False - if i > 0x7FFF: - reverse = True - i = i & 0x7FFF - - char = [ - cls._div(i, cls.scnb), - cls._div(i % cls.scnb, cls.snb), - cls._div(i % cls.snb, cls.sb), i % cls.sb - ] - char = [ - cls.cr[char[0]], cls.cc[char[1]], cls.cn[char[2]], - cls.cb[char[3]] - ] - - if reverse: - return char[2] + char[3] + char[0] + char[1] - - return ''.join(char) - - @classmethod - def _decodeByte(cls, c) -> int: - nb = False - idx = [cls.cr.index(c[0]), cls.cc.index(c[1])] - if idx[0] < 0 or idx[1] < 0: - idx = [cls.cn.index(c[0]), cls.cb.index(c[1])] - nb = True - raise ValueError('ERROR! rc/nb overflow') - - result = idx[0] * cls.sb + idx[1] if nb else idx[0] * cls.sc + idx[1] - if result > 0x7F: - raise ValueError('ERROR! rc/nb overflow') - - return result | 0x80 if nb else 0 - - @classmethod - def _decodeShort(cls, c) -> int: - reverse = c[0] not in cls.cr - if not reverse: - idx = [ - cls.cr.index(c[0]), - cls.cc.index(c[1]), - cls.cn.index(c[2]), - cls.cb.index(c[3]) - ] - else: - idx = [ - cls.cr.index(c[2]), - cls.cc.index(c[3]), - cls.cn.index(c[0]), - cls.cb.index(c[1]) - ] - - if idx[0] < 0 or idx[1] < 0 or idx[2] < 0 or idx[3] < 0: - raise ValueError('ERROR! not rcnb') - - result = (idx[0] * cls.scnb + - idx[1] * cls.snb + - idx[2] * cls.sb + idx[3]) - if result > 0x7FFF: - raise ValueError('ERROR! rcnb overflow') - - result |= 0x8000 if reverse else 0 - return result - - @classmethod - def _encodeBytes(cls, b) -> str: - result = [] - for i in range(0, (len(b) >> 1)): - result.append(cls._encode_short((b[i * 2] << 8 | b[i * 2 + 1]))) - - if len(b) & 1 == 1: - result.append(cls._encode_byte(b[-1])) - - return ''.join(result) - - @classmethod - def encode(cls, s: str, encoding: str = 'utf-8'): - if not isinstance(s, str): - raise ValueError('Please enter str instead of other') - - return cls._encodeBytes(s.encode(encoding)) - - @classmethod - def _decodeBytes(cls, 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([cls._decodeShort(s[i * 4:i * 4 + 4]) >> 8])) - result.append(bytes([cls._decodeShort(s[i * 4:i * 4 + 4]) & 0xFF])) - - if (len(s) & 2) == 2: - result.append(bytes([cls._decodeByte(s[-2:])])) - - return b''.join(result) - - @classmethod - def decode(cls, s: str, encoding: str = 'utf-8') -> str: - if not isinstance(s, str): - raise ValueError('Please enter str instead of other') - - try: - return cls._decodeBytes(s).decode(encoding) - except UnicodeDecodeError: - raise ValueError('Decoding failed') +MessageSegment.
\ No newline at end of file diff --git a/ATRI/plugins/utils/main.bin b/ATRI/plugins/utils/main.bin Binary files differdeleted file mode 100644 index 6e74a60..0000000 --- a/ATRI/plugins/utils/main.bin +++ /dev/null |