From 83b548c2f244ab64060991b2a43d504544402bad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wuyi=E6=97=A0=E7=96=91?= <444835641@qq.com> Date: Wed, 26 Jan 2022 23:59:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=96=B0=E7=9A=84WikiAPI=E6=8E=A5=E5=8F=A3=EF=BC=9B=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=9A=E9=94=99=E8=AF=AF=E6=8F=90=E7=A4=BA.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __init__.py | 670 +++++++++++++++++++++++++++++----------------------- getDB.py | 57 ++--- getMes.py | 203 ++++++++-------- 3 files changed, 500 insertions(+), 430 deletions(-) diff --git a/__init__.py b/__init__.py index 58074085..dc25a34d 100644 --- a/__init__.py +++ b/__init__.py @@ -1,24 +1,15 @@ -from .getDB import (CheckDB, GetAward, GetCharInfo, GetDaily, GetMysInfo, GetAudioInfo, - GetSignInfo, GetSignList, GetWeaponInfo, MysSign, OpenPush, - connectDB, cookiesDB, deletecache, selectDB, get_alots) -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 .getDB import (CheckDB, OpenPush, connectDB, deletecache, selectDB, get_alots) +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 hoshino import Service,R,priv,util from hoshino.typing import MessageSegment,CQEvent, HoshinoBot -import requests,random,os,json,re,time,datetime,string,base64,math - -import threading import hoshino import asyncio -import hashlib -import sqlite3 -from io import BytesIO -import urllib -import requests,traceback -from base64 import b64encode +import sqlite3,random,traceback,os,re +import base64 sv = Service('genshinuid') bot = get_bot() @@ -30,108 +21,147 @@ Texture_PATH = os.path.join(FILE2_PATH,'texture2d') @sv.on_prefix('语音') 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: + 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) except Exception as e: - print(e.with_traceback) - await bot.send(ev,"不存在该语音ID或者不存在该角色。") + traceback.print_exc() + await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) @sv.on_fullmatch('活动列表') async def _(bot:HoshinoBot, ev: CQEvent): - img_path = os.path.join(FILE2_PATH,"event.jpg") - while(1): - if os.path.exists(img_path): - f=open(img_path,'rb') - ls_f = base64.b64encode(f.read()).decode() - imgmes = 'base64://' + ls_f - f.close() - im = f"[CQ:image,file={imgmes}]" - break - else: - await draw_event_pic() - await bot.send(ev,im) + try: + img_path = os.path.join(FILE2_PATH,"event.jpg") + while(1): + if os.path.exists(img_path): + f=open(img_path,'rb') + ls_f = base64.b64encode(f.read()).decode() + imgmes = 'base64://' + ls_f + f.close() + im = f"[CQ:image,file={imgmes}]" + break + else: + 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('御神签') async def _(bot:HoshinoBot, ev: CQEvent): - qid = ev.sender["user_id"] - raw_data = await get_alots(qid) - im = base64.b64decode(raw_data).decode("utf-8") - await bot.send(ev,im) + try: + qid = ev.sender["user_id"] + raw_data = await get_alots(qid) + 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('材料') async def _(bot:HoshinoBot, ev: CQEvent): - message = ev.message.extract_plain_text() - message = message.replace(' ', "") - im = await char_wiki(message,"costs") - await bot.send(ev,im) + try: + message = ev.message.extract_plain_text() + message = message.replace(' ', "") + 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('原魔') async def _(bot:HoshinoBot, ev: CQEvent): - message = ev.message.extract_plain_text() - im = await enemies_wiki(message) - await bot.send(ev,im) + try: + message = ev.message.extract_plain_text() + 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('食物') async def _(bot:HoshinoBot, ev: CQEvent): - message = ev.message.extract_plain_text() - im = await foods_wiki(message) - await bot.send(ev,im) + try: + message = ev.message.extract_plain_text() + 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('圣遗物') async def _(bot:HoshinoBot, ev: CQEvent): - message = ev.message.extract_plain_text() - im = await artifacts_wiki(message) - await bot.send(ev,im) + try: + message = ev.message.extract_plain_text() + 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('天赋') async def _(bot:HoshinoBot, ev: CQEvent): - message = ev.message.extract_plain_text() - name = ''.join(re.findall('[\u4e00-\u9fa5]', message)) - num = re.findall(r"[0-9]+", message) - if len(num) == 1: - im = await char_wiki(name,"talents",num[0]) - else: - im = "参数不正确。" - await bot.send(ev,im) + try: + message = ev.message.extract_plain_text() + name = ''.join(re.findall('[\u4e00-\u9fa5]', message)) + num = re.findall(r"[0-9]+", message) + if len(num) == 1: + im = await char_wiki(name,"talents",num[0]) + else: + im = "参数不正确。" + await bot.send(ev,im) + except Exception as e: + traceback.print_exc() + await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) @sv.on_prefix('武器') async def _(bot:HoshinoBot, ev: CQEvent): - message = ev.message.extract_plain_text() - name = ''.join(re.findall('[\u4e00-\u9fa5]', message)) - level = re.findall(r"[0-9]+", message) - if len(level) == 1: - im = await weapon_wiki(name,level=level[0]) - else: - im = await weapon_wiki(name) - await bot.send(ev,im,at_sender=True) + try: + message = ev.message.extract_plain_text() + name = ''.join(re.findall('[\u4e00-\u9fa5]', message)) + level = re.findall(r"[0-9]+", message) + if len(level) == 1: + im = await weapon_wiki(name,level=level[0]) + else: + 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('角色') async def _(bot:HoshinoBot, ev: CQEvent): - message = ev.message.extract_plain_text() - message = message.replace(' ', "") - name = ''.join(re.findall('[\u4e00-\u9fa5]', message)) - level = re.findall(r"[0-9]+", message) - if len(level) == 1: - im = await char_wiki(name,"char",level=level[0]) - else: - im = await char_wiki(name) - await bot.send(ev,im) + try: + message = ev.message.extract_plain_text() + message = message.replace(' ', "") + name = ''.join(re.findall('[\u4e00-\u9fa5]', message)) + level = re.findall(r"[0-9]+", message) + if len(level) == 1: + im = await char_wiki(name,"char",level=level[0]) + else: + 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('命座') async def _(bot:HoshinoBot, ev: CQEvent): - message = ev.message.extract_plain_text() - 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, "constellations", num) - await bot.send(ev,im,at_sender=True) + try: + message = ev.message.extract_plain_text() + 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, "constellations", num) + await bot.send(ev,im,at_sender=True) + except Exception as e: + traceback.print_exc() + await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) #每日零点清空cookies使用缓存 @sv.scheduled_job('cron', hour='0') @@ -144,10 +174,14 @@ async def delete(): @sv.on_fullmatch('全部重签') async def _(bot:HoshinoBot, ev: CQEvent): - if ev.user_id not in bot.config.SUPERUSERS: - return - await bot.send(ev,"已开始执行") - await dailysign() + try: + if ev.user_id not in bot.config.SUPERUSERS: + return + 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") @@ -213,15 +247,15 @@ async def setting(ctx): 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。') except Exception as e: - print(e.with_traceback) - await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=f'校验失败!请输入正确的Cookies!') + traceback.print_exc() + await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message='校验失败!请输入正确的Cookies!\n错误信息为{}'.format(e)) elif '开启推送' in message: try: uid = await selectDB(userid,mode = "uid") im = await OpenPush(int(uid[0]),userid,"on","StatusA") await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im) 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绑定记录。") elif '关闭推送' in message: try: @@ -229,7 +263,7 @@ async def setting(ctx): im = await OpenPush(int(uid[0]),userid,"off","StatusA") await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im) 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绑定记录。") elif '开启自动签到' in message: try: @@ -237,7 +271,7 @@ async def setting(ctx): im = await OpenPush(int(uid[0]),userid,"on","StatusB") await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im) 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绑定记录。") elif '关闭自动签到' in message: try: @@ -245,92 +279,100 @@ async def setting(ctx): im = await OpenPush(int(uid[0]),userid,"off","StatusA") await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im) 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绑定记录。") #群聊开启 自动签到 和 推送树脂提醒 功能 @sv.on_prefix('开启') async def _(bot:HoshinoBot, ev: CQEvent): - 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) + try: + 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) - if m == "自动签到": - try: - if at and qid in bot.config.SUPERUSERS: - qid = at.group(1) - elif at and at.group(1) != qid: - await bot.send(ev,"你没有权限。",at_sender=True) - return - else: - pass - gid = ev.group_id - uid = await selectDB(ev.sender['user_id'],mode = "uid") - im = await OpenPush(int(uid[0]),ev.sender['user_id'],str(gid),"StatusB") - await bot.send(ev,im,at_sender=True) - except Exception as e: - print(e.with_traceback) - await bot.send(ev,"未绑定uid信息!",at_sender=True) - elif m == "推送": - try: - if at and qid in bot.config.SUPERUSERS: - qid = at.group(1) - elif at and at.group(1) != qid: - await bot.send(ev,"你没有权限。",at_sender=True) - return - else: - pass - gid = ev.group_id - uid = await selectDB(ev.sender['user_id'],mode = "uid") - im = await OpenPush(int(uid[0]),ev.sender['user_id'],str(gid),"StatusA") - await bot.send(ev,im,at_sender=True) - except Exception as e: - print(e.with_traceback) - await bot.send(ev,"未绑定uid信息!",at_sender=True) + if m == "自动签到": + try: + if at and qid in bot.config.SUPERUSERS: + qid = at.group(1) + elif at and at.group(1) != qid: + await bot.send(ev,"你没有权限。",at_sender=True) + return + else: + pass + gid = ev.group_id + uid = await selectDB(ev.sender['user_id'],mode = "uid") + im = await OpenPush(int(uid[0]),ev.sender['user_id'],str(gid),"StatusB") + await bot.send(ev,im,at_sender=True) + except Exception as e: + traceback.print_exc() + await bot.send(ev,"未绑定uid信息!",at_sender=True) + elif m == "推送": + try: + if at and qid in bot.config.SUPERUSERS: + qid = at.group(1) + elif at and at.group(1) != qid: + await bot.send(ev,"你没有权限。",at_sender=True) + return + else: + pass + gid = ev.group_id + uid = await selectDB(ev.sender['user_id'],mode = "uid") + im = await OpenPush(int(uid[0]),ev.sender['user_id'],str(gid),"StatusA") + await bot.send(ev,im,at_sender=True) + except Exception as e: + traceback.print_exc() + await bot.send(ev,"未绑定uid信息!",at_sender=True) + except Exception as e: + traceback.print_exc() + await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) #群聊关闭 自动签到 和 推送树脂提醒 功能 @sv.on_prefix('关闭') async def _(bot:HoshinoBot, ev: CQEvent): - message = ev.message.extract_plain_text() - m = ''.join(re.findall('[\u4e00-\u9fa5]',message)) + try: + 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 == "自动签到": - try: - if at and qid in bot.config.SUPERUSERS: - qid = at.group(1) - elif at and at.group(1) != qid: - await bot.send(ev,"你没有权限。",at_sender=True) - return - else: - pass - gid = ev.group_id - uid = await selectDB(ev.sender['user_id'],mode = "uid") - im = await OpenPush(int(uid[0]),ev.sender['user_id'],"off","StatusB") - await bot.send(ev,im,at_sender=True) - except Exception as e: - print(e.with_traceback) - await bot.send(ev,"未绑定uid信息!",at_sender=True) - elif m == "推送": - try: - if at and qid in bot.config.SUPERUSERS: - qid = at.group(1) - elif at and at.group(1) != qid: - await bot.send(ev,"你没有权限。",at_sender=True) - return - else: - pass - gid = ev.group_id - uid = await selectDB(ev.sender['user_id'],mode = "uid") - im = await OpenPush(int(uid[0]),ev.sender['user_id'],"off","StatusA") - await bot.send(ev,im,at_sender=True) - except Exception as e: - print(e.with_traceback) - await bot.send(ev,"未绑定uid信息!",at_sender=True) + if m == "自动签到": + try: + if at and qid in bot.config.SUPERUSERS: + qid = at.group(1) + elif at and at.group(1) != qid: + await bot.send(ev,"你没有权限。",at_sender=True) + return + else: + pass + gid = ev.group_id + uid = await selectDB(ev.sender['user_id'],mode = "uid") + im = await OpenPush(int(uid[0]),ev.sender['user_id'],"off","StatusB") + await bot.send(ev,im,at_sender=True) + except Exception as e: + traceback.print_exc() + await bot.send(ev,"未绑定uid信息!",at_sender=True) + elif m == "推送": + try: + if at and qid in bot.config.SUPERUSERS: + qid = at.group(1) + elif at and at.group(1) != qid: + await bot.send(ev,"你没有权限。",at_sender=True) + return + else: + pass + gid = ev.group_id + uid = await selectDB(ev.sender['user_id'],mode = "uid") + im = await OpenPush(int(uid[0]),ev.sender['user_id'],"off","StatusA") + await bot.send(ev,im,at_sender=True) + except Exception as e: + traceback.print_exc() + await bot.send(ev,"未绑定uid信息!",at_sender=True) + except Exception as e: + traceback.print_exc() + await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) #群聊内 每月统计 功能 @sv.on_fullmatch('每月统计') @@ -342,7 +384,7 @@ async def _(bot:HoshinoBot, ev: CQEvent): im = await award(uid) await bot.send(ev,im,at_sender=True) except Exception as e: - print(e.with_traceback) + traceback.print_exc() await bot.send(ev,'未找到绑定信息',at_sender=True) #群聊内 签到 功能 @@ -355,14 +397,18 @@ async def _(bot:HoshinoBot, ev: CQEvent): im = await sign(uid) await bot.send(ev,im,at_sender=True) except Exception as e: - print(e.with_traceback) + traceback.print_exc() await bot.send(ev,'未找到绑定信息',at_sender=True) #群聊内 校验Cookies 是否正常的功能,不正常自动删掉 @sv.on_fullmatch('校验全部Cookies') async def _(bot:HoshinoBot, ev: CQEvent): - im = await CheckDB() - await bot.send(ev,im) + try: + im = await CheckDB() + await bot.send(ev,im) + except Exception as e: + traceback.print_exc() + await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) #群聊内 查询当前树脂状态以及派遣状态 的命令 @sv.on_fullmatch('当前状态') @@ -373,7 +419,7 @@ async def _(bot:HoshinoBot, ev: CQEvent): mes = await daily("ask",uid) im = mes[0]['message'] except Exception as e: - print(e.with_traceback) + traceback.print_exc() im = "没有找到绑定信息。" await bot.send(ev,im, at_sender=True) @@ -381,153 +427,173 @@ async def _(bot:HoshinoBot, ev: CQEvent): #群聊内 查询uid 的命令 @sv.on_prefix('uid') async def _(bot:HoshinoBot, ev: CQEvent): - image = re.search(r"\[CQ:image,file=(.*),url=(.*)\]", str(ev.message)) - message = ev.message.extract_plain_text() - uid = re.findall(r"\d+", message)[0] # str - m = ''.join(re.findall('[\u4e00-\u9fa5]',message)) - if 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) + try: + image = re.search(r"\[CQ:image,file=(.*),url=(.*)\]", str(ev.message)) + message = ev.message.extract_plain_text() + uid = re.findall(r"\d+", message)[0] # str + m = ''.join(re.findall('[\u4e00-\u9fa5]',message)) + if 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) + 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) - else: - im = await draw_abyss0_pic(uid,ev.sender['nickname'],image) - 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)) == 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,'输入错误!') + except Exception as e: + await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) + traceback.print_exc() + except Exception as e: + traceback.print_exc() + await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) #群聊内 绑定uid 的命令,会绑定至当前qq号上 @sv.on_prefix('绑定uid') async def _(bot:HoshinoBot, ev: CQEvent): - message = ev.message.extract_plain_text() - uid = re.findall(r"\d+", message)[0] # str - await connectDB(ev.sender['user_id'],uid) - await bot.send(ev,'绑定uid成功!', at_sender=True) + try: + message = ev.message.extract_plain_text() + uid = re.findall(r"\d+", message)[0] # str + 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不冲突,两者可以同时绑定 @sv.on_prefix('绑定mys') async def _(bot:HoshinoBot, ev: CQEvent): - message = ev.message.extract_plain_text() - mys = re.findall(r"\d+", message)[0] # str - await connectDB(ev.sender['user_id'],None,mys) - await bot.send(ev,'绑定米游社id成功!', at_sender=True) + try: + message = ev.message.extract_plain_text() + mys = re.findall(r"\d+", message)[0] # str + 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的情况下,可以查询,默认优先调用米游社通行证,多出世界等级一个参数 @sv.on_prefix('查询') async def _(bot, ev): - image = re.search(r"\[CQ:image,file=(.*),url=(.*)\]", str(ev.message)) - at = re.search(r"\[CQ:at,qq=(\d*)\]", str(ev.raw_message.strip())) - message = ev.message.extract_plain_text() - if at: - qid = at.group(1) - mi =await bot.get_group_member_info(group_id=ev.group_id, user_id=qid) - nickname = mi["nickname"] - uid = await selectDB(qid) - else: - 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,'输入错误!') + try: + image = re.search(r"\[CQ:image,file=(.*),url=(.*)\]", str(ev.message)) + at = re.search(r"\[CQ:at,qq=(\d*)\]", str(ev.raw_message.strip())) + message = ev.message.extract_plain_text() + if at: + qid = at.group(1) + mi =await bot.get_group_member_info(group_id=ev.group_id, user_id=qid) + nickname = mi["nickname"] + uid = await selectDB(qid) else: - pass - else: - await bot.send(ev,'未找到绑定记录!') + 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: + 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') async def _(bot:HoshinoBot, ev: CQEvent): - image = re.search(r"\[CQ:image,file=(.*),url=(.*)\]", str(ev.message)) - message = ev.message.extract_plain_text() - uid = re.findall(r"\d+", message)[0] # str - m = ''.join(re.findall('[\u4e00-\u9fa5]',message)) - if 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,3) + try: + image = re.search(r"\[CQ:image,file=(.*),url=(.*)\]", str(ev.message)) + message = ev.message.extract_plain_text() + uid = re.findall(r"\d+", message)[0] # str + m = ''.join(re.findall('[\u4e00-\u9fa5]',message)) + if 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,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) - else: - im = await draw_abyss0_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,'深渊输入错误!') - 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,'输入错误!') \ No newline at end of file + except Exception as e: + await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) + traceback.print_exc() + except Exception as e: + traceback.print_exc() + await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) \ No newline at end of file diff --git a/getDB.py b/getDB.py index 1b4300e7..7421d376 100644 --- a/getDB.py +++ b/getDB.py @@ -1,18 +1,11 @@ -import sqlite3 -import sys,datetime,urllib - from httpx import AsyncClient from shutil import copyfile -from nonebot import * -from bs4 import BeautifulSoup +import sqlite3 import requests,random,os,json,re -import hoshino -import asyncio -import time +import time,datetime,urllib import string import hashlib -import base64 mhyVersion = "2.11.1" @@ -277,8 +270,7 @@ async def cookiesDB(uid,Cookies,qid): conn.commit() conn.close() - - + async def OwnerCookies(uid): conn = sqlite3.connect('ID_DATA.db') c = conn.cursor() @@ -344,6 +336,7 @@ async def GetDaily(Uid,ServerID="cn_gf01"): 'Referer': 'https://webstatic.mihoyo.com/', "Cookie": await OwnerCookies(Uid)}) data = json.loads(req.text) + #print(data) return data except requests.exceptions.SSLError: try: @@ -612,38 +605,34 @@ async def GetAudioInfo(name,audioid,language = "cn"): async def GetWeaponInfo(name,level = None): async with AsyncClient() as client: 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={ - '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) + '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'}) + data = json.loads(req.text) return data 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: 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/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', - 'accept-encoding':'gzip, deflate, br'}) - print(req.text) - data = jsonfy(req.text) + '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'}) + data = json.loads(req.text) return data async def GetCharInfo(name,mode = "char",level = None): url2 = None data2 = None - baseurl = "https://api.minigg.cn/characters?query=" + baseurl = "https://info.minigg.cn/characters?query=" if mode == "talents": - url = "https://api.minigg.cn/talents?query=" + name + url = "https://info.minigg.cn/talents?query=" + name elif mode == "constellations": - url = "https://api.minigg.cn/constellations?query=" + name + url = "https://info.minigg.cn/constellations?query=" + name elif mode == "costs": url = baseurl + name + "&costs=1" - url2 = "https://api.minigg.cn/talents?query=" + name + "&costs=1" - url3 = "https://api.minigg.cn/talents?query=" + name + "&matchCategories=true" + url2 = "https://info.minigg.cn/talents?query=" + name + "&costs=1" + url3 = "https://info.minigg.cn/talents?query=" + name + "&matchCategories=true" elif level: url = baseurl + name + "&stats=" + level else: @@ -656,8 +645,8 @@ async def GetCharInfo(name,mode = "char",level = None): 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) - if data2 != "undefined": + data2 = json.loads(req.text) + if "errcode" not in data2: pass else: async with AsyncClient() as client: @@ -666,7 +655,7 @@ async def GetCharInfo(name,mode = "char",level = None): 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 = req.text + data2 = json.loads(req.text) async with AsyncClient() as client: 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', 'Referer': 'https://genshin.minigg.cn/index.html'}) try: - data = jsonfy(req.text) - if data != "undefined": + data = json.loads(req.text) + if "errcode" not in data: pass else: async with AsyncClient() as client: @@ -685,7 +674,7 @@ async def GetCharInfo(name,mode = "char",level = None): 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 + data = json.loads(req.text) except: data = None return data if data2 == None else [data,data2] @@ -705,8 +694,10 @@ async def GetGenshinEvent(mode = "List"): data = json.loads(req.text) return data +''' def jsonfy(s:str)->object: s = s.replace("stats: [Function (anonymous)]","").replace("(","(").replace(")",")") #此函数将不带双引号的json的key标准化 obj = eval(s, type('js', (dict,), dict(__getitem__=lambda s, n: n))()) - return obj \ No newline at end of file + return obj +''' diff --git a/getMes.py b/getMes.py index 8b1a8c35..09a8b799 100644 --- a/getMes.py +++ b/getMes.py @@ -2,9 +2,9 @@ import math,sqlite3,re,os,random,requests,json from base64 import b64encode from io import BytesIO -from .getDB import (CheckDB, GetAward, GetCharInfo, GetDaily, GetMysInfo, GetAudioInfo, - GetSignInfo, GetSignList, GetWeaponInfo, MysSign, OpenPush, - connectDB, cookiesDB, deletecache, selectDB, get_alots, GetMiscInfo) +from .getDB import ( GetAward, GetCharInfo, GetDaily, GetMysInfo, GetAudioInfo, + GetSignInfo, GetSignList, GetWeaponInfo, MysSign, + cookiesDB, GetMiscInfo) FILE_PATH = os.path.dirname(__file__) FILE2_PATH = os.path.join(FILE_PATH, 'mys') @@ -110,8 +110,7 @@ artifacts_im = '''【{}】 【{}】:{} 【{}】:{} 【{}】:{} -【{}】:{} -''' +【{}】:{}''' food_im = '''【{}】 【稀有度】:{} @@ -119,8 +118,8 @@ food_im = '''【{}】 【食物类别】:{} 【效果】:{} 【介绍】:{} -【材料】:{} -''' +【材料】: +{}''' audio_json = '''{ "357":["357_01","357_02","357_03"], @@ -159,11 +158,10 @@ async def deal_ck(mes,qid): conn = sqlite3.connect('ID_DATA.db') c = conn.cursor() - test = c.execute("SELECT count(*) FROM sqlite_master WHERE type='table' AND name = 'CookiesCache'") - if test == 0: - pass - else: + try: c.execute("DELETE from CookiesCache where uid=? or mysid = ?",(uid,mysid)) + except: + pass conn.commit() conn.close() @@ -225,39 +223,47 @@ async def audio_wiki(name,message): async def artifacts_wiki(name): data = await GetMiscInfo("artifacts",name) - star = "" - for i in data["rarity"]: - star = star + i + "星、" - 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"]) + if "errcode" in data: + im = "该圣遗物不存在。" + else: + star = "" + for i in data["rarity"]: + star = star + i + "星、" + 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 async def foods_wiki(name): data = await GetMiscInfo("foods",name) - ingredients = "" - food_temp = {} - for i in data["ingredients"]: - if i["name"] not in food_temp: - food_temp[i["name"]] = i["count"] - else: - food_temp[i["name"]] = food_temp[i["name"]] + i["count"] - print(food_temp) - for i in food_temp: - 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) + if "errcode" in data: + im = "该食物不存在。" + else: + ingredients = "" + food_temp = {} + for i in data["ingredients"]: + if i["name"] not in food_temp: + food_temp[i["name"]] = i["count"] + else: + food_temp[i["name"]] = food_temp[i["name"]] + i["count"] + for i in food_temp: + 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 async def enemies_wiki(name): raw_data = await GetMiscInfo("enemies",name) - reward = "" - for i in raw_data["rewardpreview"]: - 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) + if "errcode" in raw_data: + im = "该原魔不存在。" + else: + reward = "" + for i in raw_data["rewardpreview"]: + 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 # 签到函数 @@ -330,15 +336,15 @@ async def daily(mode="push", uid=None): expedition_info.append( 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 = '' if current_resin >= row[6] and row[6] != 0: tip += "\n==============\n你的树脂快满了!" if dailydata["max_home_coin"] - dailydata["current_home_coin"] <= 100: tip += "\n==============\n你的洞天宝钱快满了!" - if finished_expedition_num >0: - tip += "\n==============\n你有探索派遣完成了!" + #if finished_expedition_num >0: + # tip += "\n==============\n你有探索派遣完成了!" max_resin = dailydata['max_resin'] rec_time = '' # print(dailydata) @@ -374,8 +380,10 @@ async def daily(mode="push", uid=None): async def weapon_wiki(name,level = None): data = await GetWeaponInfo(name) - if level: - data2 = await GetWeaponInfo(name,level+"plus" if level else level) + if "errcode" in data: + im = "武器不存在。" + elif level: + data2 = await GetWeaponInfo(name,level) if data["substat"] != "": sp = data["substat"] + ":" + '%.1f%%' % (data2["specialized"] * 100) if data["substat"] != "元素精通" else data["substat"] + ":" + str(math.floor(data2["specialized"])) else: @@ -416,12 +424,10 @@ async def weapon_wiki(name,level = None): 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) + if isinstance(data,list): + im = ','.join(data) + elif "errcode" in data: + im = "不存在该角色或类型。" elif level: data2 = await GetCharInfo(name, mode) 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( name, star, type, element, up_val, bdday, polar, cv, info) elif mode == "costs": - if isinstance(data[1],str): - raw_data = data[1].replace("[","").replace("\n","").replace("]","").replace(" ","").replace("'","").split(',') - if data[1].replace("\n","").replace(" ","") == "undefined": - im = "不存在该角色或类型。" - else: - im = ','.join(raw_data) + if isinstance(data[1],list): + im = ','.join(data[1]) + elif "errcode" in data[1]: + im = "不存在该角色或类型。" else: im = "【天赋材料(一份)】\n{}\n【突破材料】\n{}" im1 = "" im2 = "" talent_temp = {} - talent_cost = data[1]["costs"] + talent_cost = data[1] for i in talent_cost.values(): for j in i: 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) 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 = "" - - 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) - + if "errcode" in data: + im = "不存在该角色或命座数量。" 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) + im = "【" + data["c{}".format(level)]['name'] + "】" + ":" + \ + "\n" + data["c{}".format(level)]['effect'].replace("*", "") + elif mode == "talents": + if "errcode" in data: + im = "不存在该角色。" + else: + if int(level) <=6 and int(level) > 0: + 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: + 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 \ No newline at end of file