summaryrefslogtreecommitdiff
path: root/ATRI/plugins/plugin_utils
diff options
context:
space:
mode:
Diffstat (limited to 'ATRI/plugins/plugin_utils')
5 files changed, 216 insertions, 244 deletions
diff --git a/ATRI/plugins/plugin_utils/__init__.py b/ATRI/plugins/plugin_utils/__init__.py
index 9d29a82..16a57d2 100644
--- a/ATRI/plugins/plugin_utils/__init__.py
+++ b/ATRI/plugins/plugin_utils/__init__.py
@@ -16,23 +16,22 @@ from time import strftime
from datetime import datetime, timedelta
from nonebot.plugin import on_command
-from nonebot.adapters.cqhttp import Bot, Event
+from nonebot.typing import Bot, Event
-from utils.utils_error import errorRepo
-from utils.utils_rule import check_banlist, check_switch
-
-from .roll import roll_dice
-from .generate import infoID, numberID
-from .genshin import GetInfo, JsonAnalysis
+from ATRI.utils.utils_error import errorRepo
+from ATRI.utils.utils_rule import check_banlist, check_switch
+from .data_source import Generate, Genshin, Roll
plugin_name_0 = "one-key-adult"
generateID = on_command("我要转大人,一天打25小时游戏",
- rule=check_banlist() & check_switch(plugin_name_0))
+ aliases={'虚拟身份', '一键成年'},
+ rule=check_banlist()
+ & check_switch(plugin_name_0, True))
-@generateID.handle() # type: ignore
+@generateID.handle()
async def _(bot: Bot, event: Event, state: dict) -> None:
- NAME, AREA = infoID()
+ NAME, AREA = Generate().infoID()
BIRTH_BEGIN = datetime(*[1980, 10, 10]) # type: ignore
BIRTH_END = datetime(*[2002, 10, 10]) # type: ignore
@@ -45,7 +44,8 @@ async def _(bot: Bot, event: Event, state: dict) -> None:
(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 = numberID(id_card_area, id_card_sex, id_card_birth_day) # type: ignore
+ id_card_id = Generate().numberID(id_card_area, id_card_sex,
+ id_card_birth_day) # type: ignore
msg0 = "恭喜,你已经成大人了!\n"
msg0 += "这是你一天25h游戏的通行证:\n"
@@ -61,7 +61,7 @@ async def _(bot: Bot, event: Event, state: dict) -> None:
rollD = on_command("roll", rule=check_banlist())
-@rollD.handle() # type: ignore
+@rollD.handle()
async def _(bot: Bot, event: Event, state: dict) -> None:
args = str(event.message).strip()
@@ -69,8 +69,7 @@ async def _(bot: Bot, event: Event, state: dict) -> None:
state['resu'] = args
-@rollD.got("resu",
- prompt="roll 参数不能为空~!\ndemo:1d10 或 2d10+2d10") # type: ignore
+@rollD.got("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)
@@ -78,15 +77,16 @@ async def _(bot: Bot, event: Event, state: dict) -> None:
if not match:
await rollD.finish("请输入正确的参数!!\ndemo:1d10 或 2d10+2d10")
- await rollD.finish(roll_dice(resu))
+ await rollD.finish(Roll().roll_dice(resu))
plugin_name_1 = 'genshin-search'
genshinInfo = on_command('genshin',
- rule=check_banlist() & check_switch(plugin_name_1))
+ rule=check_banlist()
+ & check_switch(plugin_name_1, True))
-@genshinInfo.handle() # type: ignore
+@genshinInfo.handle()
async def _(bot: Bot, event: Event, state: dict) -> None:
args = str(event.message).strip()
@@ -94,7 +94,7 @@ async def _(bot: Bot, event: Event, state: dict) -> None:
state['uid'] = args
-@genshinInfo.got('uid', prompt='请告诉咱需要查询的UID,暂时只支持国服嗷~(') # type: ignore
+@genshinInfo.got('uid', prompt='请告诉咱需要查询的UID,暂时只支持国服嗷~(')
async def _(bot: Bot, event: Event, state: dict) -> None:
uid = str(state['uid'])
@@ -103,12 +103,14 @@ async def _(bot: Bot, event: Event, state: dict) -> None:
uid_info = ''
try:
- uid_info = JsonAnalysis(GetInfo(uid))
+ uid_info = Genshin().JsonAnalysis(Genshin().GetInfo(uid))
except:
- await genshinInfo.finish(errorRepo("数据请求错误,原因可能为ID输入错误或不存在\n暂时只支持国服查询("))
+ await genshinInfo.finish(
+ errorRepo("数据请求错误,原因可能为ID输入错误或不存在\n暂时只支持国服查询("))
msg0 = f'{uid} Genshin Info:\n'
msg0 += uid_info
+ print(uid_info)
await genshinInfo.finish(msg0)
else:
diff --git a/ATRI/plugins/plugin_utils/data_source.py b/ATRI/plugins/plugin_utils/data_source.py
new file mode 100644
index 0000000..da6c52c
--- /dev/null
+++ b/ATRI/plugins/plugin_utils/data_source.py
@@ -0,0 +1,194 @@
+#!/usr/bin/env python3
+# -*- encoding: utf-8 -*-
+'''
+@File : data_source.py
+@Time : 2020/11/21 11:13:42
+@Author : Kyomotoi
+@Contact : kyomotoiowo@gmail.com
+@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 pathlib import Path
+from zipfile import PyZipFile
+from typing import Tuple, Dict, List
+
+
+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) \ No newline at end of file
diff --git a/ATRI/plugins/plugin_utils/generate.py b/ATRI/plugins/plugin_utils/generate.py
deleted file mode 100644
index 4749bab..0000000
--- a/ATRI/plugins/plugin_utils/generate.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env python3
-# -*- encoding: utf-8 -*-
-'''
-@File : generateID.py
-@Time : 2020/11/08 10:35:09
-@Author : Kyomotoi
-@Contact : kyomotoiowo@gmail.com
-@Github : https://github.com/Kyomotoi
-@License : Copyright © 2018-2020 Kyomotoi, All Rights Reserved.
-'''
-__author__ = 'kyomotoi'
-
-import os
-import json
-import random
-from pathlib import Path
-from zipfile import PyZipFile
-from typing import Tuple, Dict, List
-
-FILE = Path('.') / 'ATRI' / 'plguins' / 'plugin_utils' / 'main.bin'
-
-
-def infoID() -> Tuple[Dict[str, List[str]], Dict[str, str]]:
- with PyZipFile(os.path.abspath(FILE), "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(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
diff --git a/ATRI/plugins/plugin_utils/genshin.py b/ATRI/plugins/plugin_utils/genshin.py
deleted file mode 100644
index 642773d..0000000
--- a/ATRI/plugins/plugin_utils/genshin.py
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/usr/bin/env python3
-# -*- encoding: utf-8 -*-
-'''
-@File : genshin.py
-@Time : 2020/11/07 22:34:58
-@Author : Kyomotoi
-@Contact : kyomotoiowo@gmail.com
-@Github : https://github.com/Kyomotoi
-@License : Copyright © 2018-2020 Kyomotoi, All Rights Reserved.
-@Docs : Fork from https://github.com/Womsxd/YuanShen_User_Info
-'''
-__author__ = 'kyomotoi'
-
-import json
-import time
-import string
-import random
-import hashlib
-import requests
-
-
-def md5(text: str) -> str:
- """text 转 md5"""
- md5 = hashlib.md5()
- md5.update(text.encode())
- return md5.hexdigest()
-
-
-def DSGet() -> str:
- mhyVersion = "2.1.0"
- n = md5(mhyVersion)
- i = str(int(time.time()))
- r = ''.join(random.sample(string.ascii_lowercase + string.digits, 6))
- c = md5("salt=" + n + "&t=" + i + "&r=" + r)
- return i + "," + r + "," + c
-
-
-def GetInfo(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': 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(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 \ No newline at end of file
diff --git a/ATRI/plugins/plugin_utils/roll.py b/ATRI/plugins/plugin_utils/roll.py
deleted file mode 100644
index bf87aa3..0000000
--- a/ATRI/plugins/plugin_utils/roll.py
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env python3
-# -*- encoding: utf-8 -*-
-'''
-@File : roll.py
-@Time : 2020/11/07 15:56:02
-@Author : Kyomotoi
-@Contact : kyomotoiowo@gmail.com
-@Github : https://github.com/Kyomotoi
-@License : Copyright © 2018-2020 Kyomotoi, All Rights Reserved.
-'''
-__author__ = 'kyomotoi'
-
-import re
-from random import randint
-
-
-def roll_dice(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 = randint(1, int(args[2]))
- result = result + rd
-
- if len(proc_list) <= 10:
- proc_list.append(rd)
-
- if len(proc_list) == 10:
- temp_list = []
- for i in proc_list:
- if len(temp_list) == 9:
- proc += str(i)
- else:
- proc += str(i) + '+'
- temp_list.append(i)
-
- elif len(proc_list) >= 10:
- proc += '太长了不展示了'
-
- else:
- proc += str(result)
-
- result = f"{par}=({proc})={result}"
-
- return str(result)