diff options
Diffstat (limited to 'ATRI/plugins/plugin_utils')
-rw-r--r-- | ATRI/plugins/plugin_utils/__init__.py | 156 | ||||
-rw-r--r-- | ATRI/plugins/plugin_utils/data_source.py | 333 | ||||
-rw-r--r-- | ATRI/plugins/plugin_utils/main.bin | bin | 3992353 -> 0 bytes |
3 files changed, 0 insertions, 489 deletions
diff --git a/ATRI/plugins/plugin_utils/__init__.py b/ATRI/plugins/plugin_utils/__init__.py deleted file mode 100644 index 4181e30..0000000 --- a/ATRI/plugins/plugin_utils/__init__.py +++ /dev/null @@ -1,156 +0,0 @@ -#!/usr/bin/env python3 -# -*- encoding: utf-8 -*- -''' -@File : __init__.py -@Time : 2020/11/07 14:20:08 -@Author : Kyomotoi -@Contact : [email protected] -@Github : https://github.com/Kyomotoi -@License : Copyright © 2018-2020 Kyomotoi, All Rights Reserved. -''' -__author__ = 'kyomotoi' - -import re -import random -from time import strftime -from datetime import datetime, timedelta - -from nonebot.plugin import on_command -from nonebot.typing import Bot, Event - -from ATRI.utils.utils_error import errorRepo -from ATRI.utils.utils_rule import check_banlist, check_switch -from .data_source import Generate, Genshin, Roll, RCNB - -plugin_name_0 = "one-key-adult" -generateID = on_command("我要转大人,一天打25小时游戏", - aliases={'虚拟身份', '一键成年', '登dua郎'}, - rule=check_banlist() - & check_switch(plugin_name_0, True)) - - -async def _(bot: Bot, event: Event, state: dict) -> None: - NAME, AREA = Generate().infoID() - - BIRTH_BEGIN = datetime(*[1980, 10, 10]) # type: ignore - BIRTH_END = datetime(*[2002, 10, 10]) # type: ignore - - id_card_area = int(random.choice(list(AREA.keys()))) - id_card_area_name = AREA[str(id_card_area)] - id_card_year_old = timedelta( - days=random.randint(0, (BIRTH_END - BIRTH_BEGIN).days) + 1) - id_card_birth_day = strftime("%Y%m%d", - (BIRTH_BEGIN + id_card_year_old).timetuple()) - id_card_sex = random.choice([0, 1]) - id_card_name = random.choice(NAME[{0: "female", 1: "male"}[id_card_sex]]) - id_card_id = Generate().numberID(id_card_area, id_card_sex, - id_card_birth_day) # type: ignore - - msg0 = "恭喜,你已经成大人了!\n" - msg0 += f"NumberID: {id_card_id}\n" - msg0 += f"Gender: {'男' if id_card_sex == 1 else '女'}\n" - msg0 += f"Name: {id_card_name} || Address: {id_card_area_name}\n" - msg0 += "注: 1、以上信息根据国家公开标准生成,非真实信息。\n" - msg0 += " 2、不适用于网易和腾讯。" - - await generateID.finish(msg0) - - -rollD = on_command("/roll", rule=check_banlist()) - - -async def _(bot: Bot, event: Event, state: dict) -> None: - args = str(event.message).strip() - - if args: - state['resu'] = args - - [email protected]("resu", prompt="roll 参数不能为空~!\ndemo:1d10 或 2d10+2d10") -async def _(bot: Bot, event: Event, state: dict) -> None: - resu = state['resu'] - match = re.match(r'^([\dd+\s]+?)$', resu) - - if not match: - await rollD.finish("请输入正确的参数!!\ndemo:1d10 或 2d10+2d10") - - await rollD.finish(Roll().roll_dice(resu)) - - -plugin_name_1 = 'genshin-search' -genshinInfo = on_command('/genshin', - rule=check_banlist() - & check_switch(plugin_name_1, True)) - - -async def _(bot: Bot, event: Event, state: dict) -> None: - args = str(event.message).strip() - - if args: - state['uid'] = args - - [email protected]('uid', prompt='请告诉咱需要查询的UID,暂时只支持国服嗷~(') -async def _(bot: Bot, event: Event, state: dict) -> None: - uid = str(state['uid']) - - if (len(uid) == 9): - await bot.send(event, '别急,在搜索了!') - uid_info = '' - - try: - uid_info = Genshin().JsonAnalysis(Genshin().GetInfo(uid)) - except: - await genshinInfo.finish( - errorRepo("数据请求错误,原因可能为ID输入错误或不存在\n暂时只支持国服查询(")) - - msg0 = f'{uid} Genshin Info:\n' - msg0 += uid_info - print(uid_info) - await genshinInfo.finish(msg0) - - else: - await genshinInfo.finish('UID检查未通过,请确保此ID为9位数或者是否为国服ID~!') - - -rcnb = RCNB() - -rcnbEncode = on_command('RC一下', - aliases={'rc一下', '啊西一下', '阿西一下'}, - rule=check_banlist()) - - -async def _(bot: Bot, event: Event, state: dict) -> None: - msg = str(event.message).strip() - - if msg: - state['msg'] = msg - - [email protected]('msg', prompt='请告诉咱需要RC一下的字符~!') -async def _(bot: Bot, event: Event, state: dict) -> None: - msg = state['msg'] - await rcnbEncode.finish(rcnb._encode(msg)) - - -rcnbDecode = on_command('一下RC', - aliases={'一下rc', '一下啊西', '一下阿西'}, - rule=check_banlist()) - - -async def _(bot: Bot, event: Event, state: dict) -> None: - msg = str(event.message).strip() - - if msg: - state['msg'] = msg - - [email protected]('msg', prompt='请告诉咱需要一下RC的字符~!') -async def _(bot: Bot, event: Event, state: dict) -> None: - msg = state['msg'] - await rcnbDecode.finish(rcnb._decode(msg)) diff --git a/ATRI/plugins/plugin_utils/data_source.py b/ATRI/plugins/plugin_utils/data_source.py deleted file mode 100644 index 116b977..0000000 --- a/ATRI/plugins/plugin_utils/data_source.py +++ /dev/null @@ -1,333 +0,0 @@ -#!/usr/bin/env python3 -# -*- encoding: utf-8 -*- -''' -@File : data_source.py -@Time : 2020/11/21 11:13:42 -@Author : Kyomotoi -@Contact : [email protected] -@Github : https://github.com/Kyomotoi -@License : Copyright © 2018-2020 Kyomotoi, All Rights Reserved. -''' -__author__ = 'kyomotoi' - -import re -import os -import time -import json -import string -import random -import hashlib -import requests -from math import floor -from pathlib import Path -from zipfile import PyZipFile -from typing import Tuple, Dict, List, Union - - -class Generate: - """虚拟身份证部分""" - GENERATE_DATA_PATH = Path( - '.') / 'ATRI' / 'plugins' / 'plugin_utils' / 'main.bin' - - def infoID(self) -> Tuple[Dict[str, List[str]], Dict[str, str]]: - with PyZipFile(os.path.abspath(self.GENERATE_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 - - def numberID(self, area: int, sex: int, birth: int) -> str: - def checkSum(fullCode: str) -> int or str: - assert len(fullCode) == 17 - checkSum = sum([((1 << (17 - i)) % 11) * int(fullCode[i]) - for i in range(0, 17)]) - checkDigit = (12 - (checkSum % 11)) % 11 - if checkDigit < 10: - return checkDigit - else: - return "X" # type: ignore - - orderCode = str(random.randint(10, 99)) - sexCode = str(random.randrange(sex, 10, step=2)) - fullCode = str(area) + str(birth) + str(orderCode) + str(sexCode) - fullCode += str(checkSum(fullCode)) - return fullCode - - -class Genshin: - """原神部分""" - def md5(self, text: str) -> str: - """text 转 md5""" - md5 = hashlib.md5() - md5.update(text.encode()) - return md5.hexdigest() - - def DSGet(self) -> str: - mhyVersion = "2.1.0" - n = self.md5(mhyVersion) - i = str(int(time.time())) - r = ''.join(random.sample(string.ascii_lowercase + string.digits, 6)) - c = self.md5("salt=" + n + "&t=" + i + "&r=" + r) - return i + "," + r + "," + c - - def GetInfo(self, uid: str) -> str: - """请求API""" - req = requests.get( - url= - f"https://api-takumi.mihoyo.com/game_record/genshin/api/index?server=cn_gf01&role_id={uid}", - headers={ - 'Accept': 'application/json, text/plain, */*', - 'DS': self.DSGet(), - 'Origin': 'https://webstatic.mihoyo.com', - 'x-rpc-app_version': '2.1.0', - 'User-Agent': - 'Mozilla/5.0 (Linux; Android 9; Unspecified Device) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36 miHoYoBBS/2.2.0', - 'x-rpc-client_type': '4', - 'Referer': - 'https://webstatic.mihoyo.com/app/community-game-records/index.html?v=6', - 'Accept-Encoding': 'gzip, deflate', - 'Accept-Language': 'zh-CN,en-US;q=0.8', - 'X-Requested-With': 'com.mihoyo.hyperion' - }) - return req.text - - def JsonAnalysis(self, JsonText) -> str: - """解析数据""" - data = json.loads(JsonText) - - Character_Info = "Roles:\n" - Character_List = [] - Character_List = data["data"]["avatars"] - for i in Character_List: - if (i["element"] == "None"): - Character_Type = "无属性" - elif (i["element"] == "Anemo"): - Character_Type = "风属性" - elif (i["element"] == "Pyro"): - Character_Type = "火属性" - elif (i["element"] == "Geo"): - Character_Type = "岩属性" - elif (i["element"] == "Electro"): - Character_Type = "雷属性" - elif (i["element"] == "Cryo"): - Character_Type = "冰属性" - elif (i["element"] == "Hydro"): - Character_Type = "水属性" - else: - Character_Type = "草属性" - - if (i["name"] == "旅行者"): - if (i["image"].find("UI_AvatarIcon_PlayerGirl") != -1): - TempText = f'* {i["name"]}:\n' - TempText += f' - [萤——妹妹] {i["level"]}级 {Character_Type}\n' - - elif (i["image"].find("UI_AvatarIcon_PlayerBoy") != -1): - TempText = f'* {i["name"]}:\n' - TempText += f' - [空——哥哥] {i["level"]}级 {Character_Type}\n' - - else: - TempText = f'* {i["name"]}:\n' - TempText += f' - [性别判断失败] {i["level"]}级 {Character_Type}\n' - else: - TempText = f'* {i["name"]} {i["rarity"]}★角色:\n' - TempText += f' - {i["level"]}级 好感度({i["fetter"]})级 {Character_Type}\n' - - Character_Info = Character_Info + TempText - - a1 = data["data"]["stats"]["spiral_abyss"] - - Account_Info = 'Account Info:\n' - Account_Info += f'- 活跃天数:{data["data"]["stats"]["active_day_number"]} 天\n' - Account_Info += f'- 达成成就:{data["data"]["stats"]["achievement_number"]} 个\n' - Account_Info += f'- 获得角色:{data["data"]["stats"]["avatar_number"]}个\n' - Account_Info += f'- 深渊螺旋:{"没打" if (data["data"]["stats"]["spiral_abyss"] == "-") else f"打到了{a1}"}\n' - Account_Info += f'* 收集:\n' - Account_Info += f' - 风神瞳{data["data"]["stats"]["anemoculus_number"]}个 岩神瞳{data["data"]["stats"]["geoculus_number"]}个\n' - Account_Info += f'* 解锁:\n' - Account_Info += f' - 传送点{data["data"]["stats"]["way_point_number"]}个 秘境{data["data"]["stats"]["domain_number"]}个\n' - Account_Info += f'* 共开启宝箱:\n' - Account_Info += f' - 普通:{data["data"]["stats"]["common_chest_number"]}个 精致:{data["data"]["stats"]["exquisite_chest_number"]}个\n' - Account_Info += f' - 珍贵:{data["data"]["stats"]["luxurious_chest_number"]}个 华丽:{data["data"]["stats"]["precious_chest_number"]}个' - - return Character_Info + "\r\n" + Account_Info - - -class Roll: - """骰娘部分""" - def roll_dice(self, par: str) -> str: - """掷骰子""" - result = 0 - proc = '' - proc_list = [] - p = par.split('+') - - # 计算每个单独的roll - 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 '阿..好大...' - - for a in range(1, int(args[0]) + 1): - rd = random.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 += '太长了不展示了就酱' - - else: - proc += str(result) - - result = f"{par}=({proc})={result}" - - return str(result) - - -class RCNB(): - """R C N B""" - cr = 'rRŔŕŖŗŘřƦȐȑȒȓɌɍ' - cc = 'cCĆćĈĉĊċČčƇƈÇȻȼ' - cn = 'nNŃńŅņŇňƝƞÑǸǹȠȵ' - cb = 'bBƀƁƃƄƅßÞþ' - - 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! rc/nb 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! rcnb 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! rc/nb overflow') - - result = idx[0] * self.sb + idx[1] if nb else idx[0] * self.sc + idx[1] - if result > 0x7F: - raise ValueError('ERROR! rc/nb 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 rcnb') - - result = idx[0] * self.scnb + idx[1] * self.snb + idx[ - 2] * self.sb + idx[3] - if result > 0x7FFF: - raise ValueError('ERROR! rcnb 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') diff --git a/ATRI/plugins/plugin_utils/main.bin b/ATRI/plugins/plugin_utils/main.bin Binary files differdeleted file mode 100644 index 6e74a60..0000000 --- a/ATRI/plugins/plugin_utils/main.bin +++ /dev/null |