修复:同步新的WikiAPI接口;优化:错误提示.

This commit is contained in:
Wuyi无疑 2022-01-26 23:59:29 +08:00
parent 5f3d37852a
commit 83b548c2f2
3 changed files with 500 additions and 430 deletions

View File

@ -1,24 +1,15 @@
from .getDB import (CheckDB, GetAward, GetCharInfo, GetDaily, GetMysInfo, GetAudioInfo, from .getDB import (CheckDB, OpenPush, connectDB, deletecache, selectDB, get_alots)
GetSignInfo, GetSignList, GetWeaponInfo, MysSign, OpenPush, from .getImg import (draw_abyss0_pic, draw_abyss_pic, draw_event_pic, draw_pic, draw_wordcloud)
connectDB, cookiesDB, deletecache, selectDB, get_alots) from .getMes import (foods_wiki, artifacts_wiki, enemies_wiki, sign, daily, weapon_wiki, char_wiki, audio_wiki, award, deal_ck)
from .getImg import draw_abyss0_pic, draw_abyss_pic, draw_event_pic, draw_pic, draw_wordcloud
from .getMes import foods_wiki, artifacts_wiki, enemies_wiki, sign, daily, weapon_wiki, char_wiki, audio_wiki, award, deal_ck
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
import requests,random,os,json,re,time,datetime,string,base64,math
import threading
import hoshino import hoshino
import asyncio import asyncio
import hashlib import sqlite3,random,traceback,os,re
import sqlite3 import base64
from io import BytesIO
import urllib
import requests,traceback
from base64 import b64encode
sv = Service('genshinuid') sv = Service('genshinuid')
bot = get_bot() bot = get_bot()
@ -30,108 +21,147 @@ Texture_PATH = os.path.join(FILE2_PATH,'texture2d')
@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 = message.replace(' ', "")
name = ''.join(re.findall('[\u4e00-\u9fa5]', message))
im = await audio_wiki(name,message)
try: try:
message = ev.message.extract_plain_text()
message = message.replace(' ', "")
name = ''.join(re.findall('[\u4e00-\u9fa5]', message))
im = await audio_wiki(name,message)
await bot.send(ev,im) await bot.send(ev,im)
except Exception as e: except Exception as e:
print(e.with_traceback) traceback.print_exc()
await bot.send(ev,"不存在该语音ID或者不存在该角色。") await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
@sv.on_fullmatch('活动列表') @sv.on_fullmatch('活动列表')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
img_path = os.path.join(FILE2_PATH,"event.jpg") try:
while(1): img_path = os.path.join(FILE2_PATH,"event.jpg")
if os.path.exists(img_path): while(1):
f=open(img_path,'rb') if os.path.exists(img_path):
ls_f = base64.b64encode(f.read()).decode() f=open(img_path,'rb')
imgmes = 'base64://' + ls_f ls_f = base64.b64encode(f.read()).decode()
f.close() imgmes = 'base64://' + ls_f
im = f"[CQ:image,file={imgmes}]" f.close()
break im = f"[CQ:image,file={imgmes}]"
else: break
await draw_event_pic() else:
await bot.send(ev,im) await draw_event_pic()
await bot.send(ev,im)
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
@sv.on_fullmatch('御神签') @sv.on_fullmatch('御神签')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
qid = ev.sender["user_id"] try:
raw_data = await get_alots(qid) qid = ev.sender["user_id"]
im = base64.b64decode(raw_data).decode("utf-8") raw_data = await get_alots(qid)
await bot.send(ev,im) im = base64.b64decode(raw_data).decode("utf-8")
await bot.send(ev,im)
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
@sv.on_prefix('材料') @sv.on_prefix('材料')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
message = ev.message.extract_plain_text() try:
message = message.replace(' ', "") message = ev.message.extract_plain_text()
im = await char_wiki(message,"costs") message = message.replace(' ', "")
await bot.send(ev,im) im = await char_wiki(message,"costs")
await bot.send(ev,im)
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
@sv.on_prefix('原魔') @sv.on_prefix('原魔')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
message = ev.message.extract_plain_text() try:
im = await enemies_wiki(message) message = ev.message.extract_plain_text()
await bot.send(ev,im) im = await enemies_wiki(message)
await bot.send(ev,im)
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
@sv.on_prefix('食物') @sv.on_prefix('食物')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
message = ev.message.extract_plain_text() try:
im = await foods_wiki(message) message = ev.message.extract_plain_text()
await bot.send(ev,im) im = await foods_wiki(message)
await bot.send(ev,im)
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
@sv.on_prefix('圣遗物') @sv.on_prefix('圣遗物')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
message = ev.message.extract_plain_text() try:
im = await artifacts_wiki(message) message = ev.message.extract_plain_text()
await bot.send(ev,im) im = await artifacts_wiki(message)
await bot.send(ev,im)
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
@sv.on_prefix('天赋') @sv.on_prefix('天赋')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
message = ev.message.extract_plain_text() try:
name = ''.join(re.findall('[\u4e00-\u9fa5]', message)) message = ev.message.extract_plain_text()
num = re.findall(r"[0-9]+", message) name = ''.join(re.findall('[\u4e00-\u9fa5]', message))
if len(num) == 1: num = re.findall(r"[0-9]+", message)
im = await char_wiki(name,"talents",num[0]) if len(num) == 1:
else: im = await char_wiki(name,"talents",num[0])
im = "参数不正确。" else:
await bot.send(ev,im) im = "参数不正确。"
await bot.send(ev,im)
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
@sv.on_prefix('武器') @sv.on_prefix('武器')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
message = ev.message.extract_plain_text() try:
name = ''.join(re.findall('[\u4e00-\u9fa5]', message)) message = ev.message.extract_plain_text()
level = re.findall(r"[0-9]+", message) name = ''.join(re.findall('[\u4e00-\u9fa5]', message))
if len(level) == 1: level = re.findall(r"[0-9]+", message)
im = await weapon_wiki(name,level=level[0]) if len(level) == 1:
else: im = await weapon_wiki(name,level=level[0])
im = await weapon_wiki(name) else:
await bot.send(ev,im,at_sender=True) im = await weapon_wiki(name)
await bot.send(ev,im,at_sender=True)
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
@sv.on_prefix('角色') @sv.on_prefix('角色')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
message = ev.message.extract_plain_text() try:
message = message.replace(' ', "") message = ev.message.extract_plain_text()
name = ''.join(re.findall('[\u4e00-\u9fa5]', message)) message = message.replace(' ', "")
level = re.findall(r"[0-9]+", message) name = ''.join(re.findall('[\u4e00-\u9fa5]', message))
if len(level) == 1: level = re.findall(r"[0-9]+", message)
im = await char_wiki(name,"char",level=level[0]) if len(level) == 1:
else: im = await char_wiki(name,"char",level=level[0])
im = await char_wiki(name) else:
await bot.send(ev,im) im = await char_wiki(name)
await bot.send(ev,im)
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
@sv.on_prefix('命座') @sv.on_prefix('命座')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
message = ev.message.extract_plain_text() try:
num = int(re.findall(r"\d+", message)[0]) # str message = ev.message.extract_plain_text()
m = ''.join(re.findall('[\u4e00-\u9fa5]', message)) num = int(re.findall(r"\d+", message)[0]) # str
if num<= 0 or num >6: m = ''.join(re.findall('[\u4e00-\u9fa5]', message))
await bot.send(ev,"你家{}{}命?".format(m,num),at_sender = True) if num<= 0 or num >6:
else: await bot.send(ev,"你家{}{}命?".format(m,num),at_sender = True)
im = await char_wiki(m, "constellations", num) else:
await bot.send(ev,im,at_sender=True) im = await char_wiki(m, "constellations", num)
await bot.send(ev,im,at_sender=True)
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
#每日零点清空cookies使用缓存 #每日零点清空cookies使用缓存
@sv.scheduled_job('cron', hour='0') @sv.scheduled_job('cron', hour='0')
@ -144,10 +174,14 @@ async def delete():
@sv.on_fullmatch('全部重签') @sv.on_fullmatch('全部重签')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
if ev.user_id not in bot.config.SUPERUSERS: try:
return if ev.user_id not in bot.config.SUPERUSERS:
await bot.send(ev,"已开始执行") return
await dailysign() await bot.send(ev,"已开始执行")
await dailysign()
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
#每日零点半进行米游社签到 #每日零点半进行米游社签到
@sv.scheduled_job('cron', hour='0',minute="30") @sv.scheduled_job('cron', hour='0',minute="30")
@ -213,15 +247,15 @@ async def setting(ctx):
await deal_ck(mes,userid) await deal_ck(mes,userid)
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=f'添加Cookies成功\nCookies属于个人重要信息如果你是在不知情的情况下添加请马上修改米游社账户密码保护个人隐私\n————\n如果需要【开启自动签到】和【开启推送】还需要使用命令“绑定uid”绑定你的uid。\n例如绑定uid123456789。') await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=f'添加Cookies成功\nCookies属于个人重要信息如果你是在不知情的情况下添加请马上修改米游社账户密码保护个人隐私\n————\n如果需要【开启自动签到】和【开启推送】还需要使用命令“绑定uid”绑定你的uid。\n例如绑定uid123456789。')
except Exception as e: except Exception as e:
print(e.with_traceback) traceback.print_exc()
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=f'校验失败请输入正确的Cookies') await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message='校验失败请输入正确的Cookies\n错误信息为{}'.format(e))
elif '开启推送' in message: elif '开启推送' in message:
try: try:
uid = await selectDB(userid,mode = "uid") uid = await selectDB(userid,mode = "uid")
im = await OpenPush(int(uid[0]),userid,"on","StatusA") im = await OpenPush(int(uid[0]),userid,"on","StatusA")
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im) await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im)
except Exception as e: except Exception as e:
print(e.with_traceback) traceback.print_exc()
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。") await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。")
elif '关闭推送' in message: elif '关闭推送' in message:
try: try:
@ -229,7 +263,7 @@ async def setting(ctx):
im = await OpenPush(int(uid[0]),userid,"off","StatusA") im = await OpenPush(int(uid[0]),userid,"off","StatusA")
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im) await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im)
except Exception as e: except Exception as e:
print(e.with_traceback) traceback.print_exc()
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。") await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。")
elif '开启自动签到' in message: elif '开启自动签到' in message:
try: try:
@ -237,7 +271,7 @@ async def setting(ctx):
im = await OpenPush(int(uid[0]),userid,"on","StatusB") im = await OpenPush(int(uid[0]),userid,"on","StatusB")
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im) await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im)
except Exception as e: except Exception as e:
print(e.with_traceback) traceback.print_exc()
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。") await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。")
elif '关闭自动签到' in message: elif '关闭自动签到' in message:
try: try:
@ -245,92 +279,100 @@ async def setting(ctx):
im = await OpenPush(int(uid[0]),userid,"off","StatusA") im = await OpenPush(int(uid[0]),userid,"off","StatusA")
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im) await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im)
except Exception as e: except Exception as e:
print(e.with_traceback) traceback.print_exc()
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。") await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。")
#群聊开启 自动签到 和 推送树脂提醒 功能 #群聊开启 自动签到 和 推送树脂提醒 功能
@sv.on_prefix('开启') @sv.on_prefix('开启')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
message = ev.message.extract_plain_text() try:
m = ''.join(re.findall('[\u4e00-\u9fa5]',message)) message = ev.message.extract_plain_text()
m = ''.join(re.findall('[\u4e00-\u9fa5]',message))
qid = ev.sender["user_id"]
at = re.search(r"\[CQ:at,qq=(\d*)\]", message) qid = ev.sender["user_id"]
at = re.search(r"\[CQ:at,qq=(\d*)\]", message)
if m == "自动签到": if m == "自动签到":
try: try:
if at and qid in bot.config.SUPERUSERS: if at and qid in bot.config.SUPERUSERS:
qid = at.group(1) qid = at.group(1)
elif at and at.group(1) != qid: elif at and at.group(1) != qid:
await bot.send(ev,"你没有权限。",at_sender=True) await bot.send(ev,"你没有权限。",at_sender=True)
return return
else: else:
pass pass
gid = ev.group_id gid = ev.group_id
uid = await selectDB(ev.sender['user_id'],mode = "uid") uid = await selectDB(ev.sender['user_id'],mode = "uid")
im = await OpenPush(int(uid[0]),ev.sender['user_id'],str(gid),"StatusB") im = await OpenPush(int(uid[0]),ev.sender['user_id'],str(gid),"StatusB")
await bot.send(ev,im,at_sender=True) await bot.send(ev,im,at_sender=True)
except Exception as e: except Exception as e:
print(e.with_traceback) traceback.print_exc()
await bot.send(ev,"未绑定uid信息",at_sender=True) await bot.send(ev,"未绑定uid信息",at_sender=True)
elif m == "推送": elif m == "推送":
try: try:
if at and qid in bot.config.SUPERUSERS: if at and qid in bot.config.SUPERUSERS:
qid = at.group(1) qid = at.group(1)
elif at and at.group(1) != qid: elif at and at.group(1) != qid:
await bot.send(ev,"你没有权限。",at_sender=True) await bot.send(ev,"你没有权限。",at_sender=True)
return return
else: else:
pass pass
gid = ev.group_id gid = ev.group_id
uid = await selectDB(ev.sender['user_id'],mode = "uid") uid = await selectDB(ev.sender['user_id'],mode = "uid")
im = await OpenPush(int(uid[0]),ev.sender['user_id'],str(gid),"StatusA") im = await OpenPush(int(uid[0]),ev.sender['user_id'],str(gid),"StatusA")
await bot.send(ev,im,at_sender=True) await bot.send(ev,im,at_sender=True)
except Exception as e: except Exception as e:
print(e.with_traceback) traceback.print_exc()
await bot.send(ev,"未绑定uid信息",at_sender=True) await bot.send(ev,"未绑定uid信息",at_sender=True)
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
#群聊关闭 自动签到 和 推送树脂提醒 功能 #群聊关闭 自动签到 和 推送树脂提醒 功能
@sv.on_prefix('关闭') @sv.on_prefix('关闭')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
message = ev.message.extract_plain_text() try:
m = ''.join(re.findall('[\u4e00-\u9fa5]',message)) message = ev.message.extract_plain_text()
m = ''.join(re.findall('[\u4e00-\u9fa5]',message))
qid = ev.sender["user_id"] qid = ev.sender["user_id"]
at = re.search(r"\[CQ:at,qq=(\d*)\]", message) at = re.search(r"\[CQ:at,qq=(\d*)\]", message)
if m == "自动签到": if m == "自动签到":
try: try:
if at and qid in bot.config.SUPERUSERS: if at and qid in bot.config.SUPERUSERS:
qid = at.group(1) qid = at.group(1)
elif at and at.group(1) != qid: elif at and at.group(1) != qid:
await bot.send(ev,"你没有权限。",at_sender=True) await bot.send(ev,"你没有权限。",at_sender=True)
return return
else: else:
pass pass
gid = ev.group_id gid = ev.group_id
uid = await selectDB(ev.sender['user_id'],mode = "uid") uid = await selectDB(ev.sender['user_id'],mode = "uid")
im = await OpenPush(int(uid[0]),ev.sender['user_id'],"off","StatusB") im = await OpenPush(int(uid[0]),ev.sender['user_id'],"off","StatusB")
await bot.send(ev,im,at_sender=True) await bot.send(ev,im,at_sender=True)
except Exception as e: except Exception as e:
print(e.with_traceback) traceback.print_exc()
await bot.send(ev,"未绑定uid信息",at_sender=True) await bot.send(ev,"未绑定uid信息",at_sender=True)
elif m == "推送": elif m == "推送":
try: try:
if at and qid in bot.config.SUPERUSERS: if at and qid in bot.config.SUPERUSERS:
qid = at.group(1) qid = at.group(1)
elif at and at.group(1) != qid: elif at and at.group(1) != qid:
await bot.send(ev,"你没有权限。",at_sender=True) await bot.send(ev,"你没有权限。",at_sender=True)
return return
else: else:
pass pass
gid = ev.group_id gid = ev.group_id
uid = await selectDB(ev.sender['user_id'],mode = "uid") uid = await selectDB(ev.sender['user_id'],mode = "uid")
im = await OpenPush(int(uid[0]),ev.sender['user_id'],"off","StatusA") im = await OpenPush(int(uid[0]),ev.sender['user_id'],"off","StatusA")
await bot.send(ev,im,at_sender=True) await bot.send(ev,im,at_sender=True)
except Exception as e: except Exception as e:
print(e.with_traceback) traceback.print_exc()
await bot.send(ev,"未绑定uid信息",at_sender=True) await bot.send(ev,"未绑定uid信息",at_sender=True)
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
#群聊内 每月统计 功能 #群聊内 每月统计 功能
@sv.on_fullmatch('每月统计') @sv.on_fullmatch('每月统计')
@ -342,7 +384,7 @@ async def _(bot:HoshinoBot, ev: CQEvent):
im = await award(uid) im = await award(uid)
await bot.send(ev,im,at_sender=True) await bot.send(ev,im,at_sender=True)
except Exception as e: except Exception as e:
print(e.with_traceback) traceback.print_exc()
await bot.send(ev,'未找到绑定信息',at_sender=True) await bot.send(ev,'未找到绑定信息',at_sender=True)
#群聊内 签到 功能 #群聊内 签到 功能
@ -355,14 +397,18 @@ async def _(bot:HoshinoBot, ev: CQEvent):
im = await sign(uid) im = await sign(uid)
await bot.send(ev,im,at_sender=True) await bot.send(ev,im,at_sender=True)
except Exception as e: except Exception as e:
print(e.with_traceback) traceback.print_exc()
await bot.send(ev,'未找到绑定信息',at_sender=True) await bot.send(ev,'未找到绑定信息',at_sender=True)
#群聊内 校验Cookies 是否正常的功能,不正常自动删掉 #群聊内 校验Cookies 是否正常的功能,不正常自动删掉
@sv.on_fullmatch('校验全部Cookies') @sv.on_fullmatch('校验全部Cookies')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
im = await CheckDB() try:
await bot.send(ev,im) im = await CheckDB()
await bot.send(ev,im)
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
#群聊内 查询当前树脂状态以及派遣状态 的命令 #群聊内 查询当前树脂状态以及派遣状态 的命令
@sv.on_fullmatch('当前状态') @sv.on_fullmatch('当前状态')
@ -373,7 +419,7 @@ async def _(bot:HoshinoBot, ev: CQEvent):
mes = await daily("ask",uid) mes = await daily("ask",uid)
im = mes[0]['message'] im = mes[0]['message']
except Exception as e: except Exception as e:
print(e.with_traceback) traceback.print_exc()
im = "没有找到绑定信息。" im = "没有找到绑定信息。"
await bot.send(ev,im, at_sender=True) await bot.send(ev,im, at_sender=True)
@ -381,153 +427,173 @@ async def _(bot:HoshinoBot, ev: CQEvent):
#群聊内 查询uid 的命令 #群聊内 查询uid 的命令
@sv.on_prefix('uid') @sv.on_prefix('uid')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
image = re.search(r"\[CQ:image,file=(.*),url=(.*)\]", str(ev.message)) try:
message = ev.message.extract_plain_text() image = re.search(r"\[CQ:image,file=(.*),url=(.*)\]", str(ev.message))
uid = re.findall(r"\d+", message)[0] # str message = ev.message.extract_plain_text()
m = ''.join(re.findall('[\u4e00-\u9fa5]',message)) uid = re.findall(r"\d+", message)[0] # str
if m == "深渊": m = ''.join(re.findall('[\u4e00-\u9fa5]',message))
try: if m == "深渊":
if len(re.findall(r"\d+", message)) == 2: try:
floor_num = re.findall(r"\d+", message)[1] if len(re.findall(r"\d+", message)) == 2:
im = await draw_abyss_pic(uid,ev.sender['nickname'],floor_num,image) floor_num = re.findall(r"\d+", message)[1]
im = await draw_abyss_pic(uid,ev.sender['nickname'],floor_num,image)
await bot.send(ev, im, at_sender=True)
else:
im = await draw_abyss0_pic(uid,ev.sender['nickname'],image)
await bot.send(ev, im, at_sender=True)
except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc()
elif m == "上期深渊":
try:
if len(re.findall(r"\d+", message)) == 2:
floor_num = re.findall(r"\d+", message)[1]
im = await draw_abyss_pic(uid,ev.sender['nickname'],floor_num,image,2,"2")
await bot.send(ev, im, at_sender=True)
else:
im = await draw_abyss0_pic(uid,ev.sender['nickname'],image,2,"2")
await bot.send(ev, im, at_sender=True)
except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc()
else:
try:
im = await draw_pic(uid,ev.sender['nickname'],image,2)
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
else: except Exception as e:
im = await draw_abyss0_pic(uid,ev.sender['nickname'],image) await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
await bot.send(ev, im, at_sender=True) traceback.print_exc()
except Exception as e: except Exception as e:
print(e.with_traceback) traceback.print_exc()
await bot.send(ev,'深渊输入错误!') await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
elif m == "上期深渊":
try:
if len(re.findall(r"\d+", message)) == 2:
floor_num = re.findall(r"\d+", message)[1]
im = await draw_abyss_pic(uid,ev.sender['nickname'],floor_num,image,2,"2")
await bot.send(ev, im, at_sender=True)
else:
im = await draw_abyss0_pic(uid,ev.sender['nickname'],image,2,"2")
await bot.send(ev, im, at_sender=True)
except Exception as e:
print(e.with_traceback)
await bot.send(ev,'深渊输入错误!')
else:
try:
im = await draw_pic(uid,ev.sender['nickname'],image,2)
await bot.send(ev, im, at_sender=True)
except Exception as e:
print(e.with_traceback)
await bot.send(ev,'输入错误!')
#群聊内 绑定uid 的命令会绑定至当前qq号上 #群聊内 绑定uid 的命令会绑定至当前qq号上
@sv.on_prefix('绑定uid') @sv.on_prefix('绑定uid')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
message = ev.message.extract_plain_text() try:
uid = re.findall(r"\d+", message)[0] # str message = ev.message.extract_plain_text()
await connectDB(ev.sender['user_id'],uid) uid = re.findall(r"\d+", message)[0] # str
await bot.send(ev,'绑定uid成功', at_sender=True) await connectDB(ev.sender['user_id'],uid)
await bot.send(ev,'绑定uid成功', at_sender=True)
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
#群聊内 绑定米游社通行证 的命令会绑定至当前qq号上和绑定uid不冲突两者可以同时绑定 #群聊内 绑定米游社通行证 的命令会绑定至当前qq号上和绑定uid不冲突两者可以同时绑定
@sv.on_prefix('绑定mys') @sv.on_prefix('绑定mys')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
message = ev.message.extract_plain_text() try:
mys = re.findall(r"\d+", message)[0] # str message = ev.message.extract_plain_text()
await connectDB(ev.sender['user_id'],None,mys) mys = re.findall(r"\d+", message)[0] # str
await bot.send(ev,'绑定米游社id成功', at_sender=True) await connectDB(ev.sender['user_id'],None,mys)
await bot.send(ev,'绑定米游社id成功', at_sender=True)
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
#群聊内 绑定过uid/mysid的情况下可以查询默认优先调用米游社通行证多出世界等级一个参数 #群聊内 绑定过uid/mysid的情况下可以查询默认优先调用米游社通行证多出世界等级一个参数
@sv.on_prefix('查询') @sv.on_prefix('查询')
async def _(bot, ev): async def _(bot, ev):
image = re.search(r"\[CQ:image,file=(.*),url=(.*)\]", str(ev.message)) try:
at = re.search(r"\[CQ:at,qq=(\d*)\]", str(ev.raw_message.strip())) image = re.search(r"\[CQ:image,file=(.*),url=(.*)\]", str(ev.message))
message = ev.message.extract_plain_text() at = re.search(r"\[CQ:at,qq=(\d*)\]", str(ev.raw_message.strip()))
if at: message = ev.message.extract_plain_text()
qid = at.group(1) if at:
mi =await bot.get_group_member_info(group_id=ev.group_id, user_id=qid) qid = at.group(1)
nickname = mi["nickname"] mi =await bot.get_group_member_info(group_id=ev.group_id, user_id=qid)
uid = await selectDB(qid) nickname = mi["nickname"]
else: uid = await selectDB(qid)
nickname = ev.sender['nickname']
uid = await selectDB(ev.sender['user_id'])
m = ''.join(re.findall('[\u4e00-\u9fa5]',message))
if uid:
if m == "深渊":
try:
if len(re.findall(r"\d+", message)) == 1:
floor_num = re.findall(r"\d+", message)[0]
im = await draw_abyss_pic(uid[0],nickname,floor_num,image,uid[1])
await bot.send(ev, im, at_sender=True)
else:
im = await draw_abyss0_pic(uid[0],nickname,image,uid[1])
await bot.send(ev, im, at_sender=True)
except Exception as e:
print(e.with_traceback)
await bot.send(ev,'输入错误!')
elif m == "上期深渊":
try:
if len(re.findall(r"\d+", message)) == 1:
floor_num = re.findall(r"\d+", message)[0]
im = await draw_abyss_pic(uid[0],nickname,floor_num,image,uid[1],"2")
await bot.send(ev, im, at_sender=True)
else:
im = await draw_abyss0_pic(uid[0],nickname,image,uid[1],"2")
await bot.send(ev, im, at_sender=True)
except Exception as e:
print(e.with_traceback)
await bot.send(ev,'深渊输入错误!')
elif m == "词云":
try:
im = await draw_wordcloud(uid[0],image,uid[1])
await bot.send(ev,im, at_sender=True)
except Exception as e:
print(e.with_traceback)
await bot.send(ev,'遇到错误!')
elif m == "":
try:
bg = await draw_pic(uid[0],nickname,image,uid[1])
await bot.send(ev, bg, at_sender=True)
except Exception as e:
print(e.with_traceback)
await bot.send(ev,'输入错误!')
else: else:
pass nickname = ev.sender['nickname']
else: uid = await selectDB(ev.sender['user_id'])
await bot.send(ev,'未找到绑定记录!')
m = ''.join(re.findall('[\u4e00-\u9fa5]',message))
if uid:
if m == "深渊":
try:
if len(re.findall(r"\d+", message)) == 1:
floor_num = re.findall(r"\d+", message)[0]
im = await draw_abyss_pic(uid[0],nickname,floor_num,image,uid[1])
await bot.send(ev, im, at_sender=True)
else:
im = await draw_abyss0_pic(uid[0],nickname,image,uid[1])
await bot.send(ev, im, at_sender=True)
except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc()
elif m == "上期深渊":
try:
if len(re.findall(r"\d+", message)) == 1:
floor_num = re.findall(r"\d+", message)[0]
im = await draw_abyss_pic(uid[0],nickname,floor_num,image,uid[1],"2")
await bot.send(ev, im, at_sender=True)
else:
im = await draw_abyss0_pic(uid[0],nickname,image,uid[1],"2")
await bot.send(ev, im, at_sender=True)
except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc()
elif m == "词云":
try:
im = await draw_wordcloud(uid[0],image,uid[1])
await bot.send(ev,im, at_sender=True)
except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc()
elif m == "":
try:
bg = await draw_pic(uid[0],nickname,image,uid[1])
await bot.send(ev, bg, at_sender=True)
except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc()
else:
pass
else:
await bot.send(ev,'未找到绑定记录!')
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
#群聊内 查询米游社通行证 的命令 #群聊内 查询米游社通行证 的命令
@sv.on_prefix('mys') @sv.on_prefix('mys')
async def _(bot:HoshinoBot, ev: CQEvent): async def _(bot:HoshinoBot, ev: CQEvent):
image = re.search(r"\[CQ:image,file=(.*),url=(.*)\]", str(ev.message)) try:
message = ev.message.extract_plain_text() image = re.search(r"\[CQ:image,file=(.*),url=(.*)\]", str(ev.message))
uid = re.findall(r"\d+", message)[0] # str message = ev.message.extract_plain_text()
m = ''.join(re.findall('[\u4e00-\u9fa5]',message)) uid = re.findall(r"\d+", message)[0] # str
if m == "深渊": m = ''.join(re.findall('[\u4e00-\u9fa5]',message))
try: if m == "深渊":
if len(re.findall(r"\d+", message)) == 2: try:
floor_num = re.findall(r"\d+", message)[1] if len(re.findall(r"\d+", message)) == 2:
im = await draw_abyss_pic(uid,ev.sender['nickname'],floor_num,image,3) floor_num = re.findall(r"\d+", message)[1]
im = await draw_abyss_pic(uid,ev.sender['nickname'],floor_num,image,3)
await bot.send(ev, im, at_sender=True)
else:
im = await draw_abyss0_pic(uid,ev.sender['nickname'],image,3)
await bot.send(ev, im, at_sender=True)
except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc()
elif m == "上期深渊":
try:
if len(re.findall(r"\d+", message)) == 1:
floor_num = re.findall(r"\d+", message)[0]
im = await draw_abyss_pic(uid,ev.sender['nickname'],floor_num,image,3,"2")
await bot.send(ev, im, at_sender=True)
else:
im = await draw_abyss0_pic(uid,ev.sender['nickname'],image,3,"2")
await bot.send(ev, im, at_sender=True)
except Exception as e:
await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
traceback.print_exc()
else:
try:
im = await draw_pic(uid,ev.sender['nickname'],image,3)
await bot.send(ev, im, at_sender=True) await bot.send(ev, im, at_sender=True)
else: except Exception as e:
im = await draw_abyss0_pic(uid,ev.sender['nickname'],image,3) await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e))
await bot.send(ev, im, at_sender=True) traceback.print_exc()
except Exception as e: except Exception as e:
print(e.with_traceback) traceback.print_exc()
await bot.send(ev,'深渊输入错误!') await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
elif m == "上期深渊":
try:
if len(re.findall(r"\d+", message)) == 1:
floor_num = re.findall(r"\d+", message)[0]
im = await draw_abyss_pic(uid,ev.sender['nickname'],floor_num,image,3,"2")
await bot.send(ev, im, at_sender=True)
else:
im = await draw_abyss0_pic(uid,ev.sender['nickname'],image,3,"2")
await bot.send(ev, im, at_sender=True)
except Exception as e:
print(e.with_traceback)
await bot.send(ev,'深渊输入错误!')
else:
try:
im = await draw_pic(uid,ev.sender['nickname'],image,3)
await bot.send(ev, im, at_sender=True)
except Exception as e:
print(e.with_traceback)
await bot.send(ev,'输入错误!')

View File

@ -1,18 +1,11 @@
import sqlite3
import sys,datetime,urllib
from httpx import AsyncClient from httpx import AsyncClient
from shutil import copyfile from shutil import copyfile
from nonebot import * import sqlite3
from bs4 import BeautifulSoup
import requests,random,os,json,re import requests,random,os,json,re
import hoshino import time,datetime,urllib
import asyncio
import time
import string import string
import hashlib import hashlib
import base64
mhyVersion = "2.11.1" mhyVersion = "2.11.1"
@ -277,8 +270,7 @@ async def cookiesDB(uid,Cookies,qid):
conn.commit() conn.commit()
conn.close() conn.close()
async def OwnerCookies(uid): async def OwnerCookies(uid):
conn = sqlite3.connect('ID_DATA.db') conn = sqlite3.connect('ID_DATA.db')
c = conn.cursor() c = conn.cursor()
@ -344,6 +336,7 @@ async def GetDaily(Uid,ServerID="cn_gf01"):
'Referer': 'https://webstatic.mihoyo.com/', 'Referer': 'https://webstatic.mihoyo.com/',
"Cookie": await OwnerCookies(Uid)}) "Cookie": await OwnerCookies(Uid)})
data = json.loads(req.text) data = json.loads(req.text)
#print(data)
return data return data
except requests.exceptions.SSLError: except requests.exceptions.SSLError:
try: try:
@ -612,38 +605,34 @@ async def GetAudioInfo(name,audioid,language = "cn"):
async def GetWeaponInfo(name,level = None): async def GetWeaponInfo(name,level = None):
async with AsyncClient() as client: async with AsyncClient() as client:
req = await client.get( req = await client.get(
url="https://api.minigg.cn/weapons?query=" + name + "&stats=" + level if level else "https://api.minigg.cn/weapons?query=" + name, url="https://info.minigg.cn/weapons?query=" + name + "&stats=" + level if level else "https://info.minigg.cn/weapons?query=" + name,
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'}) data = json.loads(req.text)
data = jsonfy(req.text)
return data return data
async def GetMiscInfo(mode,name): async def GetMiscInfo(mode,name):
url = "https://api.minigg.cn/{}?query={}".format(mode,urllib.parse.quote(name, safe='')) url = "https://info.minigg.cn/{}?query={}".format(mode,urllib.parse.quote(name, safe=''))
async with AsyncClient() as client: async with AsyncClient() as client:
req = await client.get( req = await client.get(
url = url, url = url,
headers={ headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'})
'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', data = json.loads(req.text)
'accept-encoding':'gzip, deflate, br'})
print(req.text)
data = jsonfy(req.text)
return data return data
async def GetCharInfo(name,mode = "char",level = None): async def GetCharInfo(name,mode = "char",level = None):
url2 = None url2 = None
data2 = None data2 = None
baseurl = "https://api.minigg.cn/characters?query=" baseurl = "https://info.minigg.cn/characters?query="
if mode == "talents": if mode == "talents":
url = "https://api.minigg.cn/talents?query=" + name url = "https://info.minigg.cn/talents?query=" + name
elif mode == "constellations": elif mode == "constellations":
url = "https://api.minigg.cn/constellations?query=" + name url = "https://info.minigg.cn/constellations?query=" + name
elif mode == "costs": elif mode == "costs":
url = baseurl + name + "&costs=1" url = baseurl + name + "&costs=1"
url2 = "https://api.minigg.cn/talents?query=" + name + "&costs=1" url2 = "https://info.minigg.cn/talents?query=" + name + "&costs=1"
url3 = "https://api.minigg.cn/talents?query=" + name + "&matchCategories=true" url3 = "https://info.minigg.cn/talents?query=" + name + "&matchCategories=true"
elif level: elif level:
url = baseurl + name + "&stats=" + level url = baseurl + name + "&stats=" + level
else: else:
@ -656,8 +645,8 @@ async def GetCharInfo(name,mode = "char",level = None):
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) data2 = json.loads(req.text)
if data2 != "undefined": if "errcode" not in data2:
pass pass
else: else:
async with AsyncClient() as client: async with AsyncClient() as client:
@ -666,7 +655,7 @@ async def GetCharInfo(name,mode = "char",level = None):
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 = req.text data2 = json.loads(req.text)
async with AsyncClient() as client: async with AsyncClient() as client:
req = await client.get( req = await client.get(
@ -675,8 +664,8 @@ async def GetCharInfo(name,mode = "char",level = None):
'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'})
try: try:
data = jsonfy(req.text) data = json.loads(req.text)
if data != "undefined": if "errcode" not in data:
pass pass
else: else:
async with AsyncClient() as client: async with AsyncClient() as client:
@ -685,7 +674,7 @@ async def GetCharInfo(name,mode = "char",level = None):
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'})
data = req.text data = json.loads(req.text)
except: except:
data = None data = None
return data if data2 == None else [data,data2] return data if data2 == None else [data,data2]
@ -705,8 +694,10 @@ async def GetGenshinEvent(mode = "List"):
data = json.loads(req.text) data = json.loads(req.text)
return data return data
'''
def jsonfy(s:str)->object: def jsonfy(s:str)->object:
s = s.replace("stats: [Function (anonymous)]","").replace("(","").replace(")","") s = s.replace("stats: [Function (anonymous)]","").replace("(","").replace(")","")
#此函数将不带双引号的json的key标准化 #此函数将不带双引号的json的key标准化
obj = eval(s, type('js', (dict,), dict(__getitem__=lambda s, n: n))()) obj = eval(s, type('js', (dict,), dict(__getitem__=lambda s, n: n))())
return obj return obj
'''

203
getMes.py
View File

@ -2,9 +2,9 @@ import math,sqlite3,re,os,random,requests,json
from base64 import b64encode from base64 import b64encode
from io import BytesIO from io import BytesIO
from .getDB import (CheckDB, GetAward, GetCharInfo, GetDaily, GetMysInfo, GetAudioInfo, from .getDB import ( GetAward, GetCharInfo, GetDaily, GetMysInfo, GetAudioInfo,
GetSignInfo, GetSignList, GetWeaponInfo, MysSign, OpenPush, GetSignInfo, GetSignList, GetWeaponInfo, MysSign,
connectDB, cookiesDB, deletecache, selectDB, get_alots, GetMiscInfo) cookiesDB, GetMiscInfo)
FILE_PATH = os.path.dirname(__file__) FILE_PATH = os.path.dirname(__file__)
FILE2_PATH = os.path.join(FILE_PATH, 'mys') FILE2_PATH = os.path.join(FILE_PATH, 'mys')
@ -110,8 +110,7 @@ artifacts_im = '''【{}】
{}{} {}{}
{}{} {}{}
{}{} {}{}
{}{} {}{}'''
'''
food_im = '''{} food_im = '''{}
稀有度{} 稀有度{}
@ -119,8 +118,8 @@ food_im = '''【{}】
食物类别{} 食物类别{}
效果{} 效果{}
介绍{} 介绍{}
材料{} 材料
''' {}'''
audio_json = '''{ audio_json = '''{
"357":["357_01","357_02","357_03"], "357":["357_01","357_02","357_03"],
@ -159,11 +158,10 @@ async def deal_ck(mes,qid):
conn = sqlite3.connect('ID_DATA.db') conn = sqlite3.connect('ID_DATA.db')
c = conn.cursor() c = conn.cursor()
test = c.execute("SELECT count(*) FROM sqlite_master WHERE type='table' AND name = 'CookiesCache'") try:
if test == 0:
pass
else:
c.execute("DELETE from CookiesCache where uid=? or mysid = ?",(uid,mysid)) c.execute("DELETE from CookiesCache where uid=? or mysid = ?",(uid,mysid))
except:
pass
conn.commit() conn.commit()
conn.close() conn.close()
@ -225,39 +223,47 @@ async def audio_wiki(name,message):
async def artifacts_wiki(name): async def artifacts_wiki(name):
data = await GetMiscInfo("artifacts",name) data = await GetMiscInfo("artifacts",name)
star = "" if "errcode" in data:
for i in data["rarity"]: im = "该圣遗物不存在。"
star = star + i + "星、" else:
star = star[:-1] star = ""
im = artifacts_im.format(data["name"],star,data["2pc"],data["4pc"],data["flower"]["name"],data["flower"]["description"], for i in data["rarity"]:
data["plume"]["name"],data["plume"]["description"],data["sands"]["name"],data["sands"]["description"], star = star + i + "星、"
data["goblet"]["name"],data["goblet"]["description"],data["circlet"]["name"],data["circlet"]["description"]) star = star[:-1]
im = artifacts_im.format(data["name"],star,data["2pc"],data["4pc"],data["flower"]["name"],data["flower"]["description"],
data["plume"]["name"],data["plume"]["description"],data["sands"]["name"],data["sands"]["description"],
data["goblet"]["name"],data["goblet"]["description"],data["circlet"]["name"],data["circlet"]["description"])
return im return im
async def foods_wiki(name): async def foods_wiki(name):
data = await GetMiscInfo("foods",name) data = await GetMiscInfo("foods",name)
ingredients = "" if "errcode" in data:
food_temp = {} im = "该食物不存在。"
for i in data["ingredients"]: else:
if i["name"] not in food_temp: ingredients = ""
food_temp[i["name"]] = i["count"] food_temp = {}
else: for i in data["ingredients"]:
food_temp[i["name"]] = food_temp[i["name"]] + i["count"] if i["name"] not in food_temp:
print(food_temp) food_temp[i["name"]] = i["count"]
for i in food_temp: else:
ingredients += i + ":" + str(food_temp[i]) + "\n" food_temp[i["name"]] = food_temp[i["name"]] + i["count"]
ingredients = ingredients[:-1] for i in food_temp:
im = food_im.format(data["name"],data["rarity"],data["foodtype"],data["foodfilter"],data["effect"],data["description"],ingredients) ingredients += i + ":" + str(food_temp[i]) + "\n"
ingredients = ingredients[:-1]
im = food_im.format(data["name"],data["rarity"],data["foodtype"],data["foodfilter"],data["effect"],data["description"],ingredients)
return im return im
async def enemies_wiki(name): async def enemies_wiki(name):
raw_data = await GetMiscInfo("enemies",name) raw_data = await GetMiscInfo("enemies",name)
reward = "" if "errcode" in raw_data:
for i in raw_data["rewardpreview"]: im = "该原魔不存在。"
reward += i["name"] + "" + str(i["count"]) if "count" in i.keys() else i["name"] + "" + "可能" else:
reward += "\n" reward = ""
im = "{}\n——{}——\n类型:{}\n信息:{}\n掉落物:\n{}".format(raw_data["name"],raw_data["specialname"], for i in raw_data["rewardpreview"]:
raw_data["category"],raw_data["description"],reward) reward += i["name"] + "" + str(i["count"]) if "count" in i.keys() else i["name"] + "" + "可能"
reward += "\n"
im = "{}\n——{}——\n类型:{}\n信息:{}\n掉落物:\n{}".format(raw_data["name"],raw_data["specialname"],
raw_data["category"],raw_data["description"],reward)
return im return im
# 签到函数 # 签到函数
@ -330,15 +336,15 @@ async def daily(mode="push", uid=None):
expedition_info.append( expedition_info.append(
f"{avatar_name} 剩余时间{remained_timed}") f"{avatar_name} 剩余时间{remained_timed}")
if current_resin >= row[6] or dailydata["max_home_coin"] - dailydata["current_home_coin"] <= 100 or finished_expedition_num >0: if current_resin >= row[6] or dailydata["max_home_coin"] - dailydata["current_home_coin"] <= 100:
tip = '' tip = ''
if current_resin >= row[6] and row[6] != 0: if current_resin >= row[6] and row[6] != 0:
tip += "\n==============\n你的树脂快满了!" tip += "\n==============\n你的树脂快满了!"
if dailydata["max_home_coin"] - dailydata["current_home_coin"] <= 100: if dailydata["max_home_coin"] - dailydata["current_home_coin"] <= 100:
tip += "\n==============\n你的洞天宝钱快满了!" tip += "\n==============\n你的洞天宝钱快满了!"
if finished_expedition_num >0: #if finished_expedition_num >0:
tip += "\n==============\n你有探索派遣完成了!" # tip += "\n==============\n你有探索派遣完成了"
max_resin = dailydata['max_resin'] max_resin = dailydata['max_resin']
rec_time = '' rec_time = ''
# print(dailydata) # print(dailydata)
@ -374,8 +380,10 @@ async def daily(mode="push", uid=None):
async def weapon_wiki(name,level = None): async def weapon_wiki(name,level = None):
data = await GetWeaponInfo(name) data = await GetWeaponInfo(name)
if level: if "errcode" in data:
data2 = await GetWeaponInfo(name,level+"plus" if level else level) im = "武器不存在。"
elif level:
data2 = await GetWeaponInfo(name,level)
if data["substat"] != "": if data["substat"] != "":
sp = data["substat"] + "" + '%.1f%%' % (data2["specialized"] * 100) if data["substat"] != "元素精通" else data["substat"] + "" + str(math.floor(data2["specialized"])) sp = data["substat"] + "" + '%.1f%%' % (data2["specialized"] * 100) if data["substat"] != "元素精通" else data["substat"] + "" + str(math.floor(data2["specialized"]))
else: else:
@ -416,12 +424,10 @@ async def weapon_wiki(name,level = None):
async def char_wiki(name, mode="char", level=None): async def char_wiki(name, mode="char", level=None):
data = await GetCharInfo(name, mode, level if mode == "char" else None) data = await GetCharInfo(name, mode, level if mode == "char" else None)
if mode == "char": if mode == "char":
if isinstance(data,str): if isinstance(data,list):
raw_data = data.replace("[","").replace("\n","").replace("]","").replace(" ","").replace("'","").split(',') im = ','.join(data)
if data.replace("\n","").replace(" ","") == "undefined": elif "errcode" in data:
im = "不存在该角色或类型。" im = "不存在该角色或类型。"
else:
im = ','.join(raw_data)
elif level: elif level:
data2 = await GetCharInfo(name, mode) data2 = await GetCharInfo(name, mode)
sp = data2["substat"] + "" + '%.1f%%' % (data["specialized"] * 100) if data2["substat"] != "元素精通" else data2["substat"] + "" + str(math.floor(data["specialized"])) sp = data2["substat"] + "" + '%.1f%%' % (data["specialized"] * 100) if data2["substat"] != "元素精通" else data2["substat"] + "" + str(math.floor(data["specialized"]))
@ -441,19 +447,17 @@ async def char_wiki(name, mode="char", level=None):
im = char_info_im.format( im = char_info_im.format(
name, star, type, element, up_val, bdday, polar, cv, info) name, star, type, element, up_val, bdday, polar, cv, info)
elif mode == "costs": elif mode == "costs":
if isinstance(data[1],str): if isinstance(data[1],list):
raw_data = data[1].replace("[","").replace("\n","").replace("]","").replace(" ","").replace("'","").split(',') im = ','.join(data[1])
if data[1].replace("\n","").replace(" ","") == "undefined": elif "errcode" in data[1]:
im = "不存在该角色或类型。" im = "不存在该角色或类型。"
else:
im = ','.join(raw_data)
else: else:
im = "【天赋材料(一份)】\n{}\n【突破材料】\n{}" im = "【天赋材料(一份)】\n{}\n【突破材料】\n{}"
im1 = "" im1 = ""
im2 = "" im2 = ""
talent_temp = {} talent_temp = {}
talent_cost = data[1]["costs"] talent_cost = data[1]
for i in talent_cost.values(): for i in talent_cost.values():
for j in i: for j in i:
if j["name"] not in talent_temp: if j["name"] not in talent_temp:
@ -477,46 +481,55 @@ async def char_wiki(name, mode="char", level=None):
im = im.format(im1,im2) im = im.format(im1,im2)
elif mode == "constellations": elif mode == "constellations":
im = "" + data["c{}".format(level)]['name'] + "" + "" + \ if "errcode" in data:
"\n" + data["c{}".format(level)]['effect'].replace("*", "") im = "不存在该角色或命座数量。"
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 = ""
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: else:
if level == "4": im = "" + data["c{}".format(level)]['name'] + "" + "" + \
data = data["passive1"] "\n" + data["c{}".format(level)]['effect'].replace("*", "")
elif level == "5": elif mode == "talents":
data = data["passive2"] if "errcode" in data:
elif level == "6": im = "不存在该角色。"
data = data["passive3"] else:
elif level == "7": if int(level) <=6 and int(level) > 0:
data = data["passive4"] if int(level) <= 3 :
skill_name = data["name"] if level == "1":
skill_info = data["info"] data = data["combat1"]
im = "{}\n{}".format(skill_name,skill_info) elif level == "2":
data = data["combat2"]
elif level == "3":
data = 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 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)
else:
im = "不存在该天赋。"
return im return im