mirror of
https://github.com/KimigaiiWuyi/GenshinUID.git
synced 2025-05-31 04:30:29 +08:00
新增:命座查询的模糊匹配;优化:代码结构
This commit is contained in:
parent
a95b27c181
commit
089e69799f
203
__init__.py
203
__init__.py
@ -2,7 +2,7 @@ from .getImg import draw_pic,draw_abyss_pic,draw_abyss0_pic,draw_wordcloud,draw_
|
||||
from .getDB import (CheckDB, GetAward, GetCharInfo, GetDaily, GetMysInfo,
|
||||
GetSignInfo, GetSignList, GetWeaponInfo, MysSign, OpenPush,
|
||||
connectDB, cookiesDB, deletecache, selectDB, get_alots,
|
||||
GetCharTalentsInfo,GetEnemiesInfo)
|
||||
GetEnemiesInfo)
|
||||
from nonebot import *
|
||||
from hoshino import Service,R,priv,util
|
||||
from hoshino.typing import MessageSegment,CQEvent, HoshinoBot
|
||||
@ -139,7 +139,7 @@ async def _(bot:HoshinoBot, ev: CQEvent):
|
||||
async def _(bot:HoshinoBot, ev: CQEvent):
|
||||
message = ev.message.extract_plain_text()
|
||||
message = message.replace(' ', "")
|
||||
im = await char_wiki(message,extra="cost")
|
||||
im = await char_wiki(message,"costs")
|
||||
await bot.send(ev,im)
|
||||
|
||||
@sv.on_prefix('原魔')
|
||||
@ -154,7 +154,7 @@ async def _(bot:HoshinoBot, ev: CQEvent):
|
||||
name = ''.join(re.findall('[\u4e00-\u9fa5]', message))
|
||||
num = re.findall(r"[0-9]+", message)
|
||||
if len(num) == 1:
|
||||
im = await talents_wiki(name,num[0])
|
||||
im = await char_wiki(name,"talents",num[0])
|
||||
else:
|
||||
im = "参数不正确。"
|
||||
await bot.send(ev,im)
|
||||
@ -177,7 +177,7 @@ async def _(bot:HoshinoBot, ev: CQEvent):
|
||||
name = ''.join(re.findall('[\u4e00-\u9fa5]', message))
|
||||
level = re.findall(r"[0-9]+", message)
|
||||
if len(level) == 1:
|
||||
im = await char_wiki(name,extra="stats",num=level[0])
|
||||
im = await char_wiki(name,"char",level=level[0])
|
||||
else:
|
||||
im = await char_wiki(name)
|
||||
await bot.send(ev,im)
|
||||
@ -192,60 +192,15 @@ async def enemies_wiki(name):
|
||||
raw_data["category"],raw_data["description"],reward)
|
||||
return im
|
||||
|
||||
async def talents_wiki(name,num):
|
||||
raw_data = await GetCharTalentsInfo(name)
|
||||
|
||||
if int(num) <= 3 :
|
||||
if num == "1":
|
||||
data = raw_data["combat1"]
|
||||
elif num == "2":
|
||||
data = raw_data["combat2"]
|
||||
elif num == "3":
|
||||
data = raw_data["combat3"]
|
||||
skill_name = data["name"]
|
||||
skill_info = data["info"]
|
||||
skill_detail = ""
|
||||
|
||||
for i in data["attributes"]["parameters"]:
|
||||
temp = ""
|
||||
for k in data["attributes"]["parameters"][i]:
|
||||
temp += "%.2f%%" % (k * 100) + "/"
|
||||
data["attributes"]["parameters"][i] = temp[:-1]
|
||||
|
||||
for i in data["attributes"]["labels"]:
|
||||
#i = i.replace("{","{{")
|
||||
i = re.sub(r':[a-zA-Z0-9]+}', "}", i)
|
||||
#i.replace(r':[a-zA-Z0-9]+}','}')
|
||||
skill_detail += i + "\n"
|
||||
|
||||
skill_detail = skill_detail.format(**data["attributes"]["parameters"])
|
||||
|
||||
im = "【{}】\n{}\n————\n{}".format(skill_name,skill_info,skill_detail)
|
||||
|
||||
else:
|
||||
if num == "4":
|
||||
data = raw_data["passive1"]
|
||||
elif num == "5":
|
||||
data = raw_data["passive2"]
|
||||
elif num == "6":
|
||||
data = raw_data["passive3"]
|
||||
elif num == "7":
|
||||
data = raw_data["passive4"]
|
||||
skill_name = data["name"]
|
||||
skill_info = data["info"]
|
||||
im = "【{}】\n{}".format(skill_name,skill_info)
|
||||
|
||||
return im
|
||||
|
||||
@sv.on_prefix('命座')
|
||||
async def _(bot:HoshinoBot, ev: CQEvent):
|
||||
message = ev.message.extract_plain_text()
|
||||
num = int(re.findall(r"\d+", message)[0])
|
||||
m = ''.join(re.findall('[\u4e00-\u9fa5]',message))
|
||||
num = int(re.findall(r"\d+", message)[0]) # str
|
||||
m = ''.join(re.findall('[\u4e00-\u9fa5]', message))
|
||||
if num<= 0 or num >6:
|
||||
await bot.send(ev,"你家{}有{}命?".format(m,num),at_sender = True)
|
||||
else:
|
||||
im = await char_wiki(m,2,num)
|
||||
im = await char_wiki(m, "constellations", num)
|
||||
await bot.send(ev,im,at_sender=True)
|
||||
|
||||
#每日零点清空cookies使用缓存
|
||||
@ -760,69 +715,103 @@ async def weapon_wiki(name,level = None):
|
||||
sub, effect)
|
||||
return im
|
||||
|
||||
async def char_wiki(name, mode=0, num="", extra=""):
|
||||
data = await GetCharInfo(name, mode)
|
||||
if mode == 0:
|
||||
async def char_wiki(name, mode="char", level=None):
|
||||
data = await GetCharInfo(name, mode, level if mode == "char" else None)
|
||||
if mode == "char":
|
||||
if isinstance(data,str):
|
||||
raw_data = data.replace("[","").replace("\n","").replace("]","").replace(" ","").replace("'","").split(',')
|
||||
if data.replace("\n","").replace(" ","") == "undefined":
|
||||
im = "不存在该角色或类型。"
|
||||
else:
|
||||
im = ','.join(raw_data)
|
||||
elif level:
|
||||
data2 = await GetCharInfo(name, mode)
|
||||
sp = data2["substat"] + ":" + '%.1f%%' % (data["specialized"] * 100) if data2["substat"] != "元素精通" else data2["substat"] + ":" + str(math.floor(data2["specialized"]))
|
||||
im = (data2["name"] + "\n等级:" + str(data["level"]) + "\n血量:" + str(math.floor(data["hp"])) +
|
||||
"\n攻击力:" + str(math.floor(data["attack"])) + "\n防御力:" + str(math.floor(data["defense"])) +
|
||||
"\n" + sp)
|
||||
else:
|
||||
if extra == "cost":
|
||||
talent_data = await GetCharInfo(name, 1)
|
||||
name = data['title'] + ' — ' + data['name']
|
||||
star = data['rarity']
|
||||
type = data["weapontype"]
|
||||
element = data['element']
|
||||
up_val = data['substat']
|
||||
bdday = data['birthday']
|
||||
polar = data['constellation']
|
||||
cv = data['cv']['chinese']
|
||||
info = data['description']
|
||||
im = char_info_im.format(
|
||||
name, star, type, element, up_val, bdday, polar, cv, info)
|
||||
elif mode == "costs":
|
||||
im = "【天赋材料(一份)】\n{}\n【突破材料】\n{}"
|
||||
im1 = ""
|
||||
im2 = ""
|
||||
|
||||
talent_temp = {}
|
||||
talent_cost = data[1]["costs"]
|
||||
for i in talent_cost.values():
|
||||
for j in i:
|
||||
if j["name"] not in talent_temp:
|
||||
talent_temp[j["name"]] = j["count"]
|
||||
else:
|
||||
talent_temp[j["name"]] = talent_temp[j["name"]] + j["count"]
|
||||
for k in talent_temp:
|
||||
im1 = im1 + k + ":" + str(talent_temp[k]) + "\n"
|
||||
|
||||
im = "【天赋材料(一份)】\n{}\n【突破材料】\n{}"
|
||||
im1 = ""
|
||||
im2 = ""
|
||||
|
||||
talent_temp = {}
|
||||
talent_cost = talent_data["costs"]
|
||||
for i in talent_cost.values():
|
||||
for j in i:
|
||||
if j["name"] not in talent_temp:
|
||||
talent_temp[j["name"]] = j["count"]
|
||||
else:
|
||||
talent_temp[j["name"]] = talent_temp[j["name"]] + j["count"]
|
||||
for k in talent_temp:
|
||||
im1 = im1 + k + ":" + str(talent_temp[k]) + "\n"
|
||||
temp = {}
|
||||
cost = data[0]
|
||||
for i in range(1,7):
|
||||
for j in cost["ascend{}".format(i)]:
|
||||
if j["name"] not in temp:
|
||||
temp[j["name"]] = j["count"]
|
||||
else:
|
||||
temp[j["name"]] = temp[j["name"]] + j["count"]
|
||||
|
||||
for k in temp:
|
||||
im2 = im2 + k + ":" + str(temp[k]) + "\n"
|
||||
|
||||
im = im.format(im1,im2)
|
||||
elif mode == "constellations":
|
||||
im = "【" + data["c{}".format(level)]['name'] + "】" + ":" + \
|
||||
"\n" + data["c{}".format(level)]['effect'].replace("*", "")
|
||||
elif mode == "talents":
|
||||
if int(level) <= 3 :
|
||||
if level == "1":
|
||||
data = data["combat1"]
|
||||
elif level == "2":
|
||||
data = data["combat2"]
|
||||
elif level == "3":
|
||||
data = data["combat3"]
|
||||
skill_name = data["name"]
|
||||
skill_info = data["info"]
|
||||
skill_detail = ""
|
||||
|
||||
temp = {}
|
||||
cost = data["costs"]
|
||||
for i in range(1,7):
|
||||
for j in cost["ascend{}".format(i)]:
|
||||
if j["name"] not in temp:
|
||||
temp[j["name"]] = j["count"]
|
||||
else:
|
||||
temp[j["name"]] = temp[j["name"]] + j["count"]
|
||||
|
||||
for k in temp:
|
||||
im2 = im2 + k + ":" + str(temp[k]) + "\n"
|
||||
|
||||
im = im.format(im1,im2)
|
||||
for i in data["attributes"]["parameters"]:
|
||||
temp = ""
|
||||
for k in data["attributes"]["parameters"][i]:
|
||||
temp += "%.2f%%" % (k * 100) + "/"
|
||||
data["attributes"]["parameters"][i] = temp[:-1]
|
||||
|
||||
elif extra == "stats":
|
||||
data2 = await GetCharInfo(name, mode, num)
|
||||
sp = data["substat"] + ":" + '%.1f%%' % (data2["specialized"] * 100) if data["substat"] != "元素精通" else data["substat"] + ":" + str(math.floor(data2["specialized"]))
|
||||
im = (data["name"] + "\n等级:" + str(data2["level"]) + "\n血量:" + str(math.floor(data2["hp"])) +
|
||||
"\n攻击力:" + str(math.floor(data2["attack"])) + "\n防御力:" + str(math.floor(data2["defense"])) +
|
||||
"\n" + sp)
|
||||
else:
|
||||
name = data['title'] + ' — ' + data['name']
|
||||
star = data['rarity']
|
||||
type = data["weapontype"]
|
||||
element = data['element']
|
||||
up_val = data['substat']
|
||||
bdday = data['birthday']
|
||||
polar = data['constellation']
|
||||
cv = data['cv']['chinese']
|
||||
info = data['description']
|
||||
im = char_info_im.format(
|
||||
name, star, type, element, up_val, bdday, polar, cv, info)
|
||||
elif mode == 1:
|
||||
im = '暂不支持'
|
||||
elif mode == 2:
|
||||
im = "【" + data["c{}".format(num)]['name'] + "】" + ":" + \
|
||||
"\n" + data["c{}".format(num)]['effect'].replace("*", "")
|
||||
for i in data["attributes"]["labels"]:
|
||||
#i = i.replace("{","{{")
|
||||
i = re.sub(r':[a-zA-Z0-9]+}', "}", i)
|
||||
#i.replace(r':[a-zA-Z0-9]+}','}')
|
||||
skill_detail += i + "\n"
|
||||
|
||||
skill_detail = skill_detail.format(**data["attributes"]["parameters"])
|
||||
|
||||
im = "【{}】\n{}\n————\n{}".format(skill_name,skill_info,skill_detail)
|
||||
|
||||
else:
|
||||
if level == "4":
|
||||
data = data["passive1"]
|
||||
elif level == "5":
|
||||
data = data["passive2"]
|
||||
elif level == "6":
|
||||
data = data["passive3"]
|
||||
elif level == "7":
|
||||
data = data["passive4"]
|
||||
skill_name = data["name"]
|
||||
skill_info = data["info"]
|
||||
im = "【{}】\n{}".format(skill_name,skill_info)
|
||||
return im
|
||||
|
80
getDB.py
80
getDB.py
@ -678,17 +678,6 @@ async def GetWeaponInfo(name,level = None):
|
||||
data = jsonfy(req.text)
|
||||
return data
|
||||
|
||||
async def GetCharTalentsInfo(name):
|
||||
baseurl = "https://api.minigg.cn/talents?query="
|
||||
async with AsyncClient() as client:
|
||||
req = await client.get(
|
||||
url = baseurl + name,
|
||||
headers={
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
|
||||
'Referer': 'https://genshin.minigg.cn/index.html'})
|
||||
data = jsonfy(req.text)
|
||||
return data
|
||||
|
||||
async def GetEnemiesInfo(name):
|
||||
baseurl = "https://api.minigg.cn/enemies?query="
|
||||
async with AsyncClient() as client:
|
||||
@ -700,47 +689,50 @@ async def GetEnemiesInfo(name):
|
||||
data = jsonfy(req.text)
|
||||
return data
|
||||
|
||||
async def GetCharInfo(name,mode = 0,level = None):
|
||||
str = ""
|
||||
if mode == 1:
|
||||
str = "&talents=1"
|
||||
elif mode == 2:
|
||||
str = "&constellations=1"
|
||||
|
||||
baseurl = "https://genshin.minigg.cn/?characters="
|
||||
|
||||
detailurl = "https://api.minigg.cn/characters?query="
|
||||
|
||||
if level:
|
||||
async with AsyncClient() as client:
|
||||
req = await client.get(
|
||||
url = detailurl + name + "&stats=" + level,
|
||||
headers={
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
|
||||
'Referer': 'https://genshin.minigg.cn/index.html'})
|
||||
data = jsonfy(req.text)
|
||||
async def GetCharInfo(name,mode = "char",level = None):
|
||||
url2 = None
|
||||
data2 = None
|
||||
baseurl = "https://api.minigg.cn/characters?query="
|
||||
if mode == "talents":
|
||||
url = "https://api.minigg.cn/talents?query=" + name
|
||||
elif mode == "constellations":
|
||||
url = "https://api.minigg.cn/constellations?query=" + name
|
||||
elif mode == "costs":
|
||||
url = baseurl + name + "&costs=1"
|
||||
url2 = "https://api.minigg.cn/talents?query=" + name + "&costs=1"
|
||||
elif level:
|
||||
url = baseurl + name + "&stats=" + level
|
||||
else:
|
||||
url = baseurl + name
|
||||
|
||||
if url2:
|
||||
async with AsyncClient() as client:
|
||||
req = await client.get(
|
||||
url = baseurl + name + str,
|
||||
url = url2,
|
||||
headers={
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
|
||||
'Referer': 'https://genshin.minigg.cn/index.html'})
|
||||
data2 = jsonfy(req.text)
|
||||
|
||||
soup = BeautifulSoup(req.text, "lxml")
|
||||
item = soup.select_one("pre").text
|
||||
if item:
|
||||
data = json.loads(item)
|
||||
else:
|
||||
async with AsyncClient() as client:
|
||||
req = await client.get(
|
||||
url = detailurl + name + "&matchCategories=true",
|
||||
headers={
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
|
||||
'Referer': 'https://genshin.minigg.cn/index.html'})
|
||||
data = jsonfy(req.text)
|
||||
async with AsyncClient() as client:
|
||||
req = await client.get(
|
||||
url = url,
|
||||
headers={
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
|
||||
'Referer': 'https://genshin.minigg.cn/index.html'})
|
||||
data = jsonfy(req.text)
|
||||
if data != "undefined":
|
||||
pass
|
||||
else:
|
||||
async with AsyncClient() as client:
|
||||
req = await client.get(
|
||||
url = baseurl + name + "&matchCategories=true",
|
||||
headers={
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
|
||||
'Referer': 'https://genshin.minigg.cn/index.html'})
|
||||
data = req.text
|
||||
|
||||
return data
|
||||
return data if data2 == None else [data,data2]
|
||||
|
||||
async def GetGenshinEvent(mode = "List"):
|
||||
if mode == "Calendar":
|
||||
|
Loading…
x
Reference in New Issue
Block a user