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