summaryrefslogtreecommitdiff
path: root/ATRI/plugins/plugin_utils
diff options
context:
space:
mode:
authorKyomotoi <[email protected]>2020-11-08 01:09:59 +0800
committerKyomotoi <[email protected]>2020-11-08 01:09:59 +0800
commit50e9fbd8b7ce4cb72ffaca44aff1789a318cd5db (patch)
tree99735b6d37f447d401dfdebd764034e970c9e82f /ATRI/plugins/plugin_utils
parent4ce5a0c4d00e1ba2568b97f0503ef12d7febb23d (diff)
downloadATRI-50e9fbd8b7ce4cb72ffaca44aff1789a318cd5db.tar.gz
ATRI-50e9fbd8b7ce4cb72ffaca44aff1789a318cd5db.tar.bz2
ATRI-50e9fbd8b7ce4cb72ffaca44aff1789a318cd5db.zip
[Update]
Diffstat (limited to 'ATRI/plugins/plugin_utils')
-rw-r--r--ATRI/plugins/plugin_utils/__init__.py67
-rw-r--r--ATRI/plugins/plugin_utils/genshin.py119
-rw-r--r--ATRI/plugins/plugin_utils/roll.py59
3 files changed, 242 insertions, 3 deletions
diff --git a/ATRI/plugins/plugin_utils/__init__.py b/ATRI/plugins/plugin_utils/__init__.py
index 3c813cb..4435b81 100644
--- a/ATRI/plugins/plugin_utils/__init__.py
+++ b/ATRI/plugins/plugin_utils/__init__.py
@@ -1,6 +1,5 @@
#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
-
'''
@File : __init__.py
@Time : 2020/11/07 14:20:08
@@ -12,6 +11,7 @@
__author__ = 'kyomotoi'
import os
+import re
import json
import random
from pathlib import Path
@@ -23,8 +23,12 @@ from datetime import datetime, timedelta
from nonebot.plugin import on_command
from nonebot.adapters.cqhttp import Bot, Event
+from utils.utils_error import errorRepo
from utils.utils_rule import check_banlist, check_switch
+from .roll import roll_dice
+from .genshin import GetInfo, JsonAnalysis
+
file = Path('.') / 'ATRI' / 'data' / 'data_IDcard' / 'main.bin'
@@ -61,9 +65,9 @@ def numberID(area: int, sex: int, birth: int) -> str:
return fullCode
-plugin_name = "one-key-adult"
+plugin_name_0 = "one-key-adult"
generateID = on_command("我要转大人,一天打25小时游戏",
- rule=check_banlist() & check_switch(plugin_name))
+ rule=check_banlist() & check_switch(plugin_name_0))
@generateID.handle() # type: ignore
@@ -87,3 +91,60 @@ async def _(bot: Bot, event: Event, state: dict) -> None:
msg0 += " 2、不适用于网易和腾讯。"
await generateID.finish(msg0)
+
+
+rollD = on_command("roll", rule=check_banlist())
+
+
[email protected]() # type: ignore
+async def _(bot: Bot, event: Event, state: dict) -> None:
+ args = str(event.message).strip()
+
+ if args:
+ state['resu'] = args
+
+
+ prompt="roll 参数不能为空~!\ndemo:1d10 或 2d10+2d10") # type: ignore
+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_dice(resu))
+
+
+plugin_name_1 = 'genshin-search'
+genshinInfo = on_command('genshin',
+ rule=check_banlist() & check_switch(plugin_name_1))
+
+
[email protected]() # type: ignore
+async def _(bot: Bot, event: Event, state: dict) -> None:
+ args = str(event.message).strip()
+
+ if args:
+ state['uid'] = args
+
+
[email protected]('uid', prompt='请告诉咱需要查询的UID,暂时只支持国服嗷~(') # type: ignore
+async def _(bot: Bot, event: Event, state: dict) -> None:
+ uid = str(state['uid'])
+
+ if (len(uid) == 9 and uid[0] == '1'):
+ await bot.send(event, '别急,在搜索了!')
+ uid_info = ''
+
+ try:
+ uid_info = JsonAnalysis(GetInfo(uid))
+ except:
+ await genshinInfo.finish(errorRepo("数据请求错误,原因可能为ID输入错误或不存在"))
+
+ msg0 = f'{uid} Genshin Info:\n'
+ msg0 += uid_info
+ await genshinInfo.finish(msg0)
+
+ else:
+ await genshinInfo.finish('UID检查未通过,请确保此ID为9位数或者是否为国服ID~!')
diff --git a/ATRI/plugins/plugin_utils/genshin.py b/ATRI/plugins/plugin_utils/genshin.py
new file mode 100644
index 0000000..d8bcf2f
--- /dev/null
+++ b/ATRI/plugins/plugin_utils/genshin.py
@@ -0,0 +1,119 @@
+#!/usr/bin/env python3
+# -*- encoding: utf-8 -*-
+'''
+@File : genshin.py
+@Time : 2020/11/07 22:34:58
+@Author : Kyomotoi
+@Contact : [email protected]
+@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"]}个'
+
+ print(Character_Info + "\r\n" + Account_Info)
+ 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
new file mode 100644
index 0000000..bf87aa3
--- /dev/null
+++ b/ATRI/plugins/plugin_utils/roll.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python3
+# -*- encoding: utf-8 -*-
+'''
+@File : roll.py
+@Time : 2020/11/07 15:56:02
+@Author : Kyomotoi
+@Contact : [email protected]
+@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)