diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..57f1cb2a --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.idea/ \ No newline at end of file diff --git a/README.md b/README.md index a0577baf..01a66f44 100644 --- a/README.md +++ b/README.md @@ -49,8 +49,9 @@ else - [PaimonBot](https://github.com/XiaoMiku01/PaimonBot) - 插件原始代码来自于它 - [YuanShen_User_Info](https://github.com/Womsxd/YuanShen_User_Info) - 米游社API来自于它 -- [MiniGG](https://www.minigg.cn/)* - Wiki API来自于它 -- [@MingxuanGame](https://github.com/MingxuanGame) - 移植Nonebot2至[nonebot2-beta1](https://github.com/KimigaiiWuyi/GenshinUID/tree/nonebot2-beta1) +- *[MiniGG](https://www.minigg.cn/)* - Wiki API来自于它 +- [@MingxuanGame](https://github.com/MingxuanGame) - + 移植Nonebot2至[nonebot2-beta1](https://github.com/KimigaiiWuyi/GenshinUID/tree/nonebot2-beta1) - [@AMEKENN](https://github.com/AMEKENN) - 米游社签到部分的代码指导 - [@lgc233](https://github.com/lgc2333) - 众多优秀PR贡献 - [@RemKeeper](https://github.com/RemKeeper) - 简易Cookies获取文档 diff --git a/__init__.py b/__init__.py index 513825d1..77f0a002 100644 --- a/__init__.py +++ b/__init__.py @@ -1,194 +1,258 @@ -from .getDB import (CheckDB, OpenPush, connectDB, deletecache, selectDB, get_alots, config_check) -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 hoshino import asyncio -import sqlite3,random,traceback,os,re import base64 +import traceback + +from aiocqhttp.exceptions import ActionFailed +from hoshino import Service +from hoshino.typing import CQEvent, HoshinoBot +from nonebot import get_bot, logger + +from .get_data import * +from .get_image import * +from .get_mihoyo_bbs_data import * sv = Service('genshinuid') -bot = get_bot() +hoshino_bot = get_bot() + +FILE_PATH = os.path.join(os.path.dirname(__file__), 'mys') +INDEX_PATH = os.path.join(FILE_PATH, 'index') +Texture_PATH = os.path.join(FILE_PATH, 'texture2d') -FILE_PATH = os.path.dirname(__file__) -FILE2_PATH = os.path.join(FILE_PATH,'mys') -INDEX_PATH = os.path.join(FILE2_PATH, 'index') -Texture_PATH = os.path.join(FILE2_PATH,'texture2d') @sv.on_prefix('语音') -async def _(bot:HoshinoBot, ev: CQEvent): +async def send_audio(bot: HoshinoBot, ev: CQEvent): 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) + im = await audio_wiki(name, message) + await bot.send(ev, im) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) + logger.exception("获取语音失败") + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + @sv.on_fullmatch('活动列表') -async def _(bot:HoshinoBot, ev: CQEvent): +async def send_polar(bot: HoshinoBot, ev: CQEvent): try: - img_path = os.path.join(FILE2_PATH,"event.jpg") - while(1): + img_path = os.path.join(FILE_PATH, "event.jpg") + while 1: if os.path.exists(img_path): - f=open(img_path,'rb') + f = open(img_path, 'rb') ls_f = base64.b64encode(f.read()).decode() - imgmes = 'base64://' + ls_f + img_mihoyo_bbs = 'base64://' + ls_f f.close() - im = f"[CQ:image,file={imgmes}]" + im = f"[CQ:image,file={img_mihoyo_bbs}]" break else: await draw_event_pic() - await bot.send(ev,im) + await bot.send(ev, im) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送活动列表失败") except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("获取活动列表错误") + @sv.on_fullmatch('御神签') -async def _(bot:HoshinoBot, ev: CQEvent): +async def send_lots(bot: HoshinoBot, ev: CQEvent): try: qid = ev.sender["user_id"] - raw_data = await get_alots(qid) + raw_data = await get_a_lots(qid) im = base64.b64decode(raw_data).decode("utf-8") - await bot.send(ev,im) + await bot.send(ev, im) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送御神签失败") except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("获取御神签错误") + @sv.on_prefix('材料') -async def _(bot:HoshinoBot, ev: CQEvent): +async def send_cost(bot: HoshinoBot, ev: CQEvent): try: message = ev.message.extract_plain_text() message = message.replace(' ', "") - im = await char_wiki(message,"costs") - await bot.send(ev,im) + im = await char_wiki(message, "costs") + await bot.send(ev, im) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送材料信息失败") except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) - + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("获取材料信息错误") + + @sv.on_prefix('原魔') -async def _(bot:HoshinoBot, ev: CQEvent): +async def send_enemies(bot: HoshinoBot, ev: CQEvent): try: message = ev.message.extract_plain_text() im = await enemies_wiki(message) - await bot.send(ev,im) + await bot.send(ev, im) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送怪物信息失败") except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("获取怪物信息错误") + @sv.on_prefix('食物') -async def _(bot:HoshinoBot, ev: CQEvent): +async def send_food(bot: HoshinoBot, ev: CQEvent): try: message = ev.message.extract_plain_text() im = await foods_wiki(message) - await bot.send(ev,im) + await bot.send(ev, im) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送食物信息失败") except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("获取食物信息错误") + @sv.on_prefix('圣遗物') -async def _(bot:HoshinoBot, ev: CQEvent): +async def send_artifacts(bot: HoshinoBot, ev: CQEvent): try: message = ev.message.extract_plain_text() im = await artifacts_wiki(message) - await bot.send(ev,im) + await bot.send(ev, im) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送圣遗物信息失败") except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("获取圣遗物信息错误") + @sv.on_prefix('天赋') -async def _(bot:HoshinoBot, ev: CQEvent): +async def send_talents(bot: HoshinoBot, ev: CQEvent): 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]) + im = await char_wiki(name, "talents", num[0]) else: im = "参数不正确。" - await bot.send(ev,im) + await bot.send(ev, im) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送天赋信息失败") except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("获取天赋信息错误") + @sv.on_prefix('武器') -async def _(bot:HoshinoBot, ev: CQEvent): +async def send_weapon(bot: HoshinoBot, ev: CQEvent): 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]) + im = await weapon_wiki(name, level=level[0]) else: im = await weapon_wiki(name) - await bot.send(ev,im,at_sender=True) + await bot.send(ev, im, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送武器信息失败") except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("获取武器信息错误") + @sv.on_prefix('角色') -async def _(bot:HoshinoBot, ev: CQEvent): +async def send_char(bot: HoshinoBot, ev: CQEvent): 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]) + im = await char_wiki(name, "char", level=level[0]) else: im = await char_wiki(name) - await bot.send(ev,im) + await bot.send(ev, im) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送角色信息失败") except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("获取角色信息错误") + @sv.on_prefix('命座') -async def _(bot:HoshinoBot, ev: CQEvent): +async def send_polar(bot: HoshinoBot, ev: CQEvent): 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) + 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) + await bot.send(ev, im, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送命座信息失败") except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) - -#每日零点清空cookies使用缓存 + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("获取命座信息错误") + + +# 每日零点清空cookies使用缓存 @sv.scheduled_job('cron', hour='0') -async def delete(): - await deletecache() +async def clean_cache(): + await delete_cache() + @sv.scheduled_job('cron', hour='2') -async def delete(): +async def draw_event(): await draw_event_pic() + @sv.on_fullmatch('全部重签') -async def _(bot:HoshinoBot, ev: CQEvent): +async def _(bot: HoshinoBot, ev: CQEvent): try: if ev.user_id not in bot.config.SUPERUSERS: return - await bot.send(ev,"已开始执行") - await dailysign() + await bot.send(ev, "已开始执行") + await daily_sign() + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) except Exception as e: traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) -#每日零点半进行米游社签到 -@sv.scheduled_job('cron', hour='0',minute="30") -async def dailysign(): - await dailysign() -async def dailysign(): +# 每隔半小时检测树脂是否超过设定值 +@sv.scheduled_job('cron', minute="*/30") +async def push(): + daily_data = await daily() + if daily_data is not None: + for i in daily_data: + if i['gid'] == "on": + await hoshino_bot.send_private_msg(user_id=i['qid'], message=i['message']) + else: + await hoshino_bot.send_group_msg(group_id=i['gid'], message=f"[CQ:at,qq={i['qid']}]" + + "\n" + i['message']) + else: + pass + + +# 每日零点半进行米游社签到 +@sv.scheduled_job('cron', hour='0', minute="30") +async def daily_sign_schedule(): + await daily_sign() + + +async def daily_sign(): conn = sqlite3.connect('ID_DATA.db') c = conn.cursor() cursor = c.execute( @@ -199,10 +263,9 @@ async def dailysign(): im = await sign(str(row[0])) if row[4] == "on": try: - await bot.send_private_msg(user_id = row[2],message = im) + await hoshino_bot.send_private_msg(user_id=row[2], message=im) except: - traceback.print_exc() - print(im + "\nerror") + logger.exception(f"{im} Error") else: message = f"[CQ:at,qq={row[2]}]\n{im}" if await config_check("SignReportSimple"): @@ -216,9 +279,9 @@ async def dailysign(): break else: if im == "签到失败,请检查Cookies是否失效。": - temp_list.append({"push_group":row[4],"push_message":message,"success":0,"failed":1}) + temp_list.append({"push_group": row[4], "push_message": message, "success": 0, "failed": 1}) else: - temp_list.append({"push_group":row[4],"push_message":"","success":1,"failed":0}) + temp_list.append({"push_group": row[4], "push_message": "", "success": 1, "failed": 0}) else: for i in temp_list: if row[4] == i["push_group"] and i["num"] < 4: @@ -226,456 +289,535 @@ async def dailysign(): i["num"] += 1 break else: - temp_list.append({"push_group":row[4],"push_message":message,"num":1}) - await asyncio.sleep(6+random.randint(1,3)) + temp_list.append({"push_group": row[4], "push_message": message, "num": 1}) + await asyncio.sleep(6 + random.randint(1, 3)) if await config_check("SignReportSimple"): for i in temp_list: try: report = "以下为签到失败报告:{}".format(i["push_message"]) if i["push_message"] != "" else "" - await bot.send_group_msg(group_id = i["push_group"],message = "今日自动签到已完成!\n本群共签到成功{}人,共签到失败{}人。{}".format(i["success"],i["failed"],report)) + await hoshino_bot.send_group_msg(group_id=i["push_group"], + message="今日自动签到已完成!\n本群共签到成功{}人," + "共签到失败{}人。{}".format(i["success"], i["failed"], report)) except: - traceback.print_exc() - print(i["push_message"]) - await asyncio.sleep(4+random.randint(1,3)) + logger.exception("签到报告发送失败:{}".format(i["push_message"])) + await asyncio.sleep(4 + random.randint(1, 3)) else: for i in temp_list: try: - await bot.send_group_msg(group_id = i["push_group"],message = i["push_message"]) + await hoshino_bot.send_group_msg(group_id=i["push_group"], message=i["push_message"]) except: - traceback.print_exc() - print(i["push_message"]) - await asyncio.sleep(4+random.randint(1,3)) + logger.exception("签到报告发送失败:{}".format(i["push_message"])) + await asyncio.sleep(4 + random.randint(1, 3)) conn.close() return -#每隔半小时检测树脂是否超过设定值 -@sv.scheduled_job('interval', hours = 1) -async def push(): - daily_data = await daily() - if daily_data != None: - for i in daily_data: - if i['gid'] == "on": - await bot.send_private_msg(user_id = i['qid'],message = i['message']) - else: - await bot.send_group_msg(group_id = i['gid'],message = f"[CQ:at,qq={i['qid']}]" + "\n" + i['message']) - else: - pass -#私聊事件 -@bot.on_message('private') +# 私聊事件 +@hoshino_bot.on_message('private') async def setting(ctx): message = ctx['raw_message'] - sid=int(ctx["self_id"]) - userid=int(ctx["sender"]["user_id"]) - gid=0 + sid = int(ctx["self_id"]) + userid = int(ctx["sender"]["user_id"]) + gid = 0 if '添加 ' in message: try: - mes = message.replace('添加 ','') - 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。') + mes = message.replace('添加 ', '') + await deal_ck(mes, userid) + await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, + message=f'添加Cookies成功!\nCookies属于个人重要信息,如果你是在不知情的情况下添加,' + f'请马上修改米游社账户密码,保护个人隐私!\n————\n' + f'如果需要【开启自动签到】和【开启推送】还需要使用命令“绑定uid”绑定你的uid。\n' + f'例如:绑定uid123456789。') + except ActionFailed as e: + await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, + message="机器人发送消息失败:{}".format(e)) + logger.exception("发送Cookie校验信息失败") except Exception as e: - traceback.print_exc() - await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message='校验失败!请输入正确的Cookies!\n错误信息为{}'.format(e)) + await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, + message='校验失败!请输入正确的Cookies!\n错误信息为{}'.format(e)) + logger.exception("Cookie校验失败") 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: - traceback.print_exc() - await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。") + uid = await select_db(userid, mode="uid") + im = await open_push(int(uid[0]), userid, "on", "StatusA") + await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im) + except ActionFailed as e: + await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, + message="机器人发送消息失败:{}".format(e)) + logger.exception("私聊)发送开启推送信息失败") + except Exception: + await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。") + logger.exception("开启推送失败") elif '关闭推送' in message: try: - uid = await selectDB(userid,mode = "uid") - 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: - traceback.print_exc() - await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。") + uid = await select_db(userid, mode="uid") + im = await open_push(int(uid[0]), userid, "off", "StatusA") + await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im) + except ActionFailed as e: + await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, + message="机器人发送消息失败:{}".format(e)) + logger.exception("私聊)发送关闭推送信息失败") + except Exception: + await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。") + logger.exception("关闭推送失败") elif '开启自动签到' in message: try: - uid = await selectDB(userid,mode = "uid") - 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: + uid = await select_db(userid, mode="uid") + im = await open_push(int(uid[0]), userid, "on", "StatusB") + await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im) + except ActionFailed as e: + await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, + message="机器人发送消息失败:{}".format(e)) + logger.exception("私聊)发送开启自动签到信息失败") + except Exception: traceback.print_exc() - await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。") + await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。") + logger.exception("开启自动签到失败") elif '关闭自动签到' in message: try: - uid = await selectDB(userid,mode = "uid") - 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: + uid = await select_db(userid, mode="uid") + im = await open_push(int(uid[0]), userid, "off", "StatusA") + await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im) + except ActionFailed as e: + await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, + message="机器人发送消息失败:{}".format(e)) + logger.exception("私聊)发送关闭自动签到信息失败") + except Exception: traceback.print_exc() - await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。") + await hoshino_bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。") + logger.exception("关闭自动签到失败") -#群聊开启 自动签到 和 推送树脂提醒 功能 + +# 群聊开启 自动签到 和 推送树脂提醒 功能 @sv.on_prefix('开启') -async def _(bot:HoshinoBot, ev: CQEvent): +async def open_switch_func(bot: HoshinoBot, ev: CQEvent): try: message = ev.message.extract_plain_text() - m = ''.join(re.findall('[\u4e00-\u9fa5]',message)) - + m = ''.join(re.findall('[\u4e00-\u9fa5]', message)) + 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 == "自动签到": 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 + if at: + if at and at.group(1) != qid: + await bot.send(ev, "你没有权限。", at_sender=True) + return 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) + uid = await select_db(ev.sender['user_id'], mode="uid") + im = await open_push(int(uid[0]), ev.sender['user_id'], str(gid), "StatusB") + await bot.send(ev, im, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送开启自动签到信息失败") + except Exception: + await bot.send(ev, "未绑定uid信息!", at_sender=True) + logger.exception("开启自动签到失败") 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 + if at: + if at and at.group(1) != qid: + await bot.send(ev, "你没有权限。", at_sender=True) + return 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) + uid = await select_db(ev.sender['user_id'], mode="uid") + im = await open_push(int(uid[0]), ev.sender['user_id'], str(gid), "StatusA") + await bot.send(ev, im, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送开启推送信息失败") + except Exception: + await bot.send(ev, "未绑定uid信息!", at_sender=True) + logger.exception("开启推送失败") elif m == "简洁签到报告": try: if qid in bot.config.SUPERUSERS: - _ = await config_check("SignReportSimple","OPEN") - await bot.send(ev,"成功!", at_sender=True) + _ = await config_check("SignReportSimple", "OPEN") + await bot.send(ev, "成功!", at_sender=True) else: return + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送设置成功信息失败") except Exception as e: - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) - traceback.print_exc() + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("设置简洁签到报告失败") except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) - -#群聊关闭 自动签到 和 推送树脂提醒 功能 + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("开启功能失败") + + +# 群聊关闭 自动签到 和 推送树脂提醒 功能 @sv.on_prefix('关闭') -async def _(bot:HoshinoBot, ev: CQEvent): +async def close_switch_func(bot: HoshinoBot, ev: CQEvent): try: message = ev.message.extract_plain_text() - m = ''.join(re.findall('[\u4e00-\u9fa5]',message)) + m = ''.join(re.findall('[\u4e00-\u9fa5]', message)) 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 == "自动签到": 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) + if at: + if at and at.group(1) != qid: + await bot.send(ev, "你没有权限。", at_sender=True) + return + uid = await select_db(ev.sender['user_id'], mode="uid") + im = await open_push(int(uid[0]), ev.sender['user_id'], "off", "StatusB") + await bot.send(ev, im, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送关闭自动签到信息失败") + except Exception: + await bot.send(ev, "未绑定uid信息!", at_sender=True) + logger.exception("关闭自动签到失败") 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) + if at: + if at and at.group(1) != qid: + await bot.send(ev, "你没有权限。", at_sender=True) + return + uid = await select_db(ev.sender['user_id'], mode="uid") + im = await open_push(int(uid[0]), ev.sender['user_id'], "off", "StatusA") + await bot.send(ev, im, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送关闭推送信息失败") + except Exception: + await bot.send(ev, "未绑定uid信息!", at_sender=True) + logger.exception("关闭推送失败") elif m == "简洁签到报告": try: if qid in bot.config.SUPERUSERS: - _ = await config_check("SignReportSimple","CLOSED") - await bot.send(ev,"成功!", at_sender=True) + _ = await config_check("SignReportSimple", "CLOSED") + await bot.send(ev, "成功!", at_sender=True) else: return + except ActionFailed as e: + await bot.send("机器人发送消息失败:{}".format(e)) + logger.exception("发送设置成功信息失败") except Exception as e: - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) - traceback.print_exc() + await bot.send("发生错误 {},请检查后台输出。".format(e)) + logger.exception("设置简洁签到报告失败") except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) - -#群聊内 每月统计 功能 + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("关闭功能失败") + + +# 群聊内 每月统计 功能 @sv.on_fullmatch('每月统计') -async def _(bot:HoshinoBot, ev: CQEvent): +async def send_monthly_data(bot: HoshinoBot, ev: CQEvent): try: - qid = ev.sender["user_id"] - uid = await selectDB(ev.sender['user_id'],mode = "uid") + uid = await select_db(ev.sender['user_id'], mode="uid") uid = uid[0] im = await award(uid) - await bot.send(ev,im,at_sender=True) - except Exception as e: - traceback.print_exc() - await bot.send(ev,'未找到绑定信息',at_sender=True) - -#群聊内 签到 功能 + await bot.send(ev, im, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送每月统计信息失败") + except Exception: + await bot.send(ev, '未找到绑定信息', at_sender=True) + logger.exception("获取每月统计失败") + + +# 群聊内 签到 功能 @sv.on_fullmatch('签到') -async def _(bot:HoshinoBot, ev: CQEvent): +async def get_sing_func(bot: HoshinoBot, ev: CQEvent): try: - qid = ev.sender["user_id"] - uid = await selectDB(ev.sender['user_id'],mode = "uid") + uid = await select_db(ev.sender['user_id'], mode="uid") uid = uid[0] im = await sign(uid) - await bot.send(ev,im,at_sender=True) - except Exception as e: - traceback.print_exc() - await bot.send(ev,'未找到绑定信息',at_sender=True) + await bot.send(ev, im, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送签到信息失败") + except Exception: + await bot.send(ev, '未找到绑定信息', at_sender=True) + logger.exception("签到失败") -#群聊内 校验Cookies 是否正常的功能,不正常自动删掉 + +# 群聊内 校验Cookies 是否正常的功能,不正常自动删掉 @sv.on_fullmatch('校验全部Cookies') -async def _(bot:HoshinoBot, ev: CQEvent): +async def check_cookies(bot: HoshinoBot, ev: CQEvent): try: - raw_mes = await CheckDB() + raw_mes = await check_db() im = raw_mes[0] - await bot.send(ev,im) + await bot.send(ev, im) for i in raw_mes[1]: - await bot.send_private_msg(user_id = i[0], - message = "您绑定的Cookies(uid{})已失效,以下功能将会受到影响:\n查看完整信息列表\n查看深渊配队\n自动签到/当前状态/每月统计\n请及时重新绑定Cookies并重新开关相应功能。".format(i[1])) - await asyncio.sleep(3+random.randint(1,3)) + await bot.send_private_msg(user_id=i[0], + message="您绑定的Cookies(uid{})已失效,以下功能将会受到影响:\n查看完整信息列表\n" + "查看深渊配队\n自动签到/当前状态/每月统计\n" + "请及时重新绑定Cookies并重新开关相应功能。".format(i[1])) + await asyncio.sleep(3 + random.randint(1, 3)) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送Cookie校验信息失败") except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("Cookie校验错误") -#群聊内 查询当前树脂状态以及派遣状态 的命令 + +# 群聊内 查询当前树脂状态以及派遣状态 的命令 @sv.on_fullmatch('当前状态') -async def _(bot:HoshinoBot, ev: CQEvent): +async def send_daily_data(bot: HoshinoBot, ev: CQEvent): try: - uid = await selectDB(ev.sender['user_id'],mode = "uid") + uid = await select_db(ev.sender['user_id'], mode="uid") uid = uid[0] - mes = await daily("ask",uid) + mes = await daily("ask", uid) im = mes[0]['message'] - except Exception as e: - traceback.print_exc() + except Exception: im = "没有找到绑定信息。" + logger.exception("获取当前状态失败") - await bot.send(ev,im, at_sender=True) - -#群聊内 查询uid 的命令 -@sv.on_prefix('uid') -async def _(bot:HoshinoBot, ev: CQEvent): try: - image = re.search(r"\[CQ:image,file=(.*),url=(.*)\]", str(ev.message)) + await bot.send(ev, im, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送当前状态信息失败") + + +# 群聊内 查询uid 的命令 +@sv.on_prefix('uid') +async def send_uid_info(bot: HoshinoBot, ev: CQEvent): + 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)) + 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) + 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) + im = await draw_abyss0_pic(uid, ev.sender['nickname'], image) await bot.send(ev, im, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送uid深渊信息失败") except TypeError: - await bot.send("获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") - traceback.print_exc() + await bot.send(ev, "获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") + logger.exception("深渊数据获取失败(Cookie失效/不公开信息)") except Exception as e: - await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) - traceback.print_exc() + await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) + logger.exception("深渊数据获取失败(数据状态问题)") 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") + 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") + im = await draw_abyss0_pic(uid, ev.sender['nickname'], image, 2, "2") await bot.send(ev, im, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送uid上期深渊信息失败") except TypeError: - await bot.send("获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") - traceback.print_exc() + await bot.send(ev, "获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") + logger.exception("上期深渊数据获取失败(Cookie失效/不公开信息)") except Exception as e: - await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) - traceback.print_exc() + await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) + logger.exception("上期深渊数据获取失败(数据状态问题)") else: try: - im = await draw_pic(uid,ev.sender['nickname'],image,2) + im = await draw_pic(uid, ev.sender['nickname'], image, 2) await bot.send(ev, im, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送uid信息失败") except TypeError: - await bot.send("获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") - traceback.print_exc() + await bot.send(ev, "获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") + logger.exception("数据获取失败(Cookie失效/不公开信息)") except Exception as e: - await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) - traceback.print_exc() + await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) + logger.exception("数据获取失败(数据状态问题)") except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) - -#群聊内 绑定uid 的命令,会绑定至当前qq号上 + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("uid查询异常") + + +# 群聊内 绑定uid 的命令,会绑定至当前qq号上 @sv.on_prefix('绑定uid') -async def _(bot:HoshinoBot, ev: CQEvent): +async def link_uid_to_qq(bot: HoshinoBot, ev: CQEvent): 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) + await connect_db(ev.sender['user_id'], uid) + await bot.send(ev, '绑定uid成功!', at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送绑定信息失败") except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) - -#群聊内 绑定米游社通行证 的命令,会绑定至当前qq号上,和绑定uid不冲突,两者可以同时绑定 + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("绑定uid异常") + + +# 群聊内 绑定米游社通行证 的命令,会绑定至当前qq号上,和绑定uid不冲突,两者可以同时绑定 @sv.on_prefix('绑定mys') -async def _(bot:HoshinoBot, ev: CQEvent): +async def link_mihoyo_bbs_to_qq(bot: HoshinoBot, ev: CQEvent): 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) + await connect_db(ev.sender['user_id'], None, mys) + await bot.send(ev, '绑定米游社id成功!', at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送绑定信息失败") except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("绑定米游社通行证异常") -#群聊内 绑定过uid/mysid的情况下,可以查询,默认优先调用米游社通行证,多出世界等级一个参数 + +# 群聊内 绑定过uid/mysid的情况下,可以查询,默认优先调用米游社通行证,多出世界等级一个参数 @sv.on_prefix('查询') -async def _(bot, ev): +async def get_info(bot, 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())) + 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) + mi = await bot.get_group_member_info(group_id=ev.group_id, user_id=qid) nickname = mi["nickname"] - uid = await selectDB(qid) + uid = await select_db(qid) else: nickname = ev.sender['nickname'] - uid = await selectDB(ev.sender['user_id']) - - m = ''.join(re.findall('[\u4e00-\u9fa5]',message)) + uid = await select_db(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]) + 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 ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送uid深渊信息失败") except TypeError: - await bot.send("获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") - traceback.print_exc() + await bot.send(ev, "获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") + logger.exception("深渊数据获取失败(Cookie失效/不公开信息)") except Exception as e: - await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) - traceback.print_exc() + await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) + logger.exception("深渊数据获取失败(数据状态问题)") 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") + 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") + im = await draw_abyss0_pic(uid[0], nickname, image, uid[1], "2") await bot.send(ev, im, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送uid上期深渊信息失败") except TypeError: - await bot.send("获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") - traceback.print_exc() + await bot.send(ev, "获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") + logger.exception("上期深渊数据获取失败(Cookie失效/不公开信息)") except Exception as e: - await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) - traceback.print_exc() + await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) + logger.exception("上期深渊数据获取失败(数据状态问题)") elif m == "词云": try: - im = await draw_wordcloud(uid[0],image,uid[1]) - await bot.send(ev,im, at_sender=True) + im = await draw_word_cloud(uid[0], image, uid[1]) + await bot.send(ev, im, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送uid词云信息失败") except TypeError: - await bot.send("获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") - traceback.print_exc() + await bot.send(ev, "获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") + logger.exception("词云数据获取失败(Cookie失效/不公开信息)") except Exception as e: - await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) - traceback.print_exc() + await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) + logger.exception("词云数据获取失败(数据状态问题)") elif m == "": try: - bg = await draw_pic(uid[0],nickname,image,uid[1]) + bg = await draw_pic(uid[0], nickname, image, uid[1]) await bot.send(ev, bg, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送uid信息失败") except TypeError: - await bot.send("获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") - traceback.print_exc() + await bot.send(ev, "获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") + logger.exception("数据获取失败(Cookie失效/不公开信息)") except Exception as e: - await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) - traceback.print_exc() + await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) + logger.exception("数据获取失败(数据状态问题)") else: pass else: - await bot.send(ev,'未找到绑定记录!') + await bot.send(ev, '未找到绑定记录!') except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("查询异常") -#群聊内 查询米游社通行证 的命令 + +# 群聊内 查询米游社通行证 的命令 @sv.on_prefix('mys') -async def _(bot:HoshinoBot, ev: CQEvent): +async def send_mihoyo_bbs_info(bot: HoshinoBot, ev: CQEvent): try: - image = re.search(r"\[CQ:image,file=(.*),url=(.*)\]", str(ev.message)) + 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)) + 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) + 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) + im = await draw_abyss0_pic(uid, ev.sender['nickname'], image, 3) await bot.send(ev, im, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送米游社深渊信息失败") except TypeError: - await bot.send("获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") - traceback.print_exc() + await bot.send(ev, "获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") + logger.exception("深渊数据获取失败(Cookie失效/不公开信息)") except Exception as e: - await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) - traceback.print_exc() + await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) + logger.exception("深渊数据获取失败(数据状态问题)") 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") + 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") + im = await draw_abyss0_pic(uid, ev.sender['nickname'], image, 3, "2") await bot.send(ev, im, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送米游社上期深渊信息失败") except TypeError: - await bot.send("获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") - traceback.print_exc() + await bot.send(ev, "获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") + logger.exception("上期深渊数据获取失败(Cookie失效/不公开信息)") except Exception as e: - await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) - traceback.print_exc() + await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) + logger.exception("上期深渊数据获取失败(数据状态问题)") else: try: - im = await draw_pic(uid,ev.sender['nickname'],image,3) + im = await draw_pic(uid, ev.sender['nickname'], image, 3) await bot.send(ev, im, at_sender=True) + except ActionFailed as e: + await bot.send(ev, "机器人发送消息失败:{}".format(e)) + logger.exception("发送米游社信息失败") except TypeError: - await bot.send("获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") - traceback.print_exc() + await bot.send(ev, "获取失败,可能是Cookies失效或者未打开米游社角色详情开关。") + logger.exception("米游社数据获取失败(Cookie失效/不公开信息)") except Exception as e: - await bot.send("获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) - traceback.print_exc() + await bot.send(ev, "获取失败,有可能是数据状态有问题,\n{}\n请检查后台输出。".format(e)) + logger.exception("米游社数据获取失败(数据状态问题)") except Exception as e: - traceback.print_exc() - await bot.send(ev,"发生错误 {},请检查后台输出。".format(e)) + await bot.send(ev, "发生错误 {},请检查后台输出。".format(e)) + logger.exception("米游社查询异常") diff --git a/get_image.py b/get_image.py index 2c767fc1..f5f2a05c 100644 --- a/get_image.py +++ b/get_image.py @@ -10,7 +10,6 @@ from re import findall import numpy as np from PIL import Image, ImageDraw, ImageFont, ImageFilter from httpx import get -from nonebot.adapters.onebot.v11 import Message from wordcloud import WordCloud from .get_data import get_info, get_character, get_spiral_abyss_info, get_mihoyo_bbs_info, \ @@ -652,7 +651,7 @@ async def draw_abyss0_pic(uid, nickname, image=None, mode=2, date="1"): bg_img.save(result_buffer, format='JPEG', subsampling=0, quality=90) # bg_img.save(result_buffer, format='PNG') imgmes = 'base64://' + b64encode(result_buffer.getvalue()).decode() - resultmes = Message(f"[CQ:image,file={imgmes}]") + resultmes = f"[CQ:image,file={imgmes}]" return resultmes @@ -848,7 +847,7 @@ async def draw_abyss_pic(uid, nickname, floor_num, image=None, mode=2, date="1") bg_img.save(result_buffer, format='JPEG', subsampling=0, quality=90) # bg_img.save(result_buffer, format='PNG') imgmes = 'base64://' + b64encode(result_buffer.getvalue()).decode() - resultmes = Message(f"[CQ:image,file={imgmes}]") + resultmes = f"[CQ:image,file={imgmes}]" return resultmes diff --git a/requirements.txt b/requirements.txt index 1471a479..8d6c3505 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ -nonebot==1.8.2 +nonebot~=1.6.0 requests==2.25.1 httpx==0.18.1 Pillow>=8.3.1 wordcloud>=1.8.1 +numpy~=1.22.2 \ No newline at end of file