From 91e8cf1c216e775f15b2788dca4dc4d542276776 Mon Sep 17 00:00:00 2001 From: nicklly <1134741727@qq.com> Date: Tue, 14 Jun 2022 21:17:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=A7=A3=E7=BB=91=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=EF=BC=8C=E4=BF=AE=E5=A4=8D=E9=83=A8=E5=88=86bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Paimon_CloudGenshin/__init__.py | 90 +++++++++++++++++++++++++-------- 1 file changed, 69 insertions(+), 21 deletions(-) diff --git a/Paimon_CloudGenshin/__init__.py b/Paimon_CloudGenshin/__init__.py index 58033fa..392c083 100644 --- a/Paimon_CloudGenshin/__init__.py +++ b/Paimon_CloudGenshin/__init__.py @@ -2,8 +2,10 @@ import json import re import uuid from typing import Union -from nonebot import on_command, require, get_bot +from nonebot import on_command, require, get_bot, logger from nonebot.adapters.onebot.v11 import MessageEvent, Message, GroupMessageEvent +from nonebot.internal.matcher import Matcher +from nonebot.internal.params import ArgPlainText from nonebot.params import CommandArg from .data_source import get_Info, get_Notification, check_token from LittlePaimon.utils.decorator import exception_handler @@ -17,33 +19,73 @@ HELP_STR = ''' 云原神 信息/info: 查询云原神账户信息 '''.strip() - -cloud_ys = on_command('mhyy', aliases={'云原神', 'mhyy'}, priority=16, block=True) +cloud_ys = on_command('云原神', aliases={'云原神', 'yys'}, priority=16, block=True) +rm_cloud_ys = on_command('云原神解绑', aliases={'yys解绑', 'yys解除绑定', 'yysdel'}, priority=16, block=True) cloud_ys.__paimon_help__ = { "usage": "云原神", "introduce": "查询云原神账户信息, 绑定token进行签到", "priority": 99 } +rm_cloud_ys.__paimon_help__ = { + "usage": "云原神解绑", + "introduce": "解绑cookie并取消自动签到", + "priority": 99 +} scheduler = require('nonebot_plugin_apscheduler').scheduler uuid = str(uuid.uuid4()) -async def auto_sign(user_id, data): +@rm_cloud_ys.handle() +async def _handle(event: Union[GroupMessageEvent, MessageEvent], match: Matcher, args: Message = CommandArg()): + plan_text = args.extract_plain_text() + if plan_text: + match.set_arg('choice', plan_text) + + +@rm_cloud_ys.got('choice', prompt='是否要解绑token并取消自动签到?\n请输入 是/否 来进行操作') +async def _(event: Union[GroupMessageEvent, MessageEvent], choice: str = ArgPlainText('choice')): + if choice == '是': + user_id = str(event.user_id) + data = load_json('user_data.json') + + del data[user_id] + if scheduler.get_job('cloud_genshin_' + user_id): + scheduler.remove_job("cloud_genshin_" + user_id) + save_json(data, 'user_data.json') + + await rm_cloud_ys.finish('token已解绑并取消自动签到~', at_sender=True) + elif choice == '否': + await rm_cloud_ys.finish() + else: + await rm_cloud_ys.finish() + + +async def auto_sign_cgn(user_id, data): token = data['token'] uuid = data['uuid'] if await check_token(uuid, token): - """ 签到云原神 """ - d1 = await get_Notification(uuid, token) """ 获取免费时间 """ d2 = await get_Info(uuid, token) """ 解析签到返回信息 """ - signInfo = json.loads(d1['data']['list'][0]['msg']) - if d2['data']['free_time']['free_time'] == '600': + if d2['data']['free_time']['free_time'] == data['limit']: await get_bot().send_private_msg(user_id=user_id, message='免费签到时长已达上限,无法继续签到') - elif not signInfo: - await get_bot().send_private_msg(user_id=user_id, message=f'签到成功~ {signInfo["msg"]}: {signInfo["num"]}分钟') - await get_bot().send_private_msg(user_id=user_id, message='token已过期,请重新自行抓包并绑定') + else: + """ 取云原神签到信息 """ + d1 = await get_Notification(uuid, token) + if not list(d1['data']['list']): + logger.info(f'UID{data["uid"]} 已经签到云原神') + else: + signInfo = json.loads(d1['data']['list'][0]['msg']) + if signInfo: + await get_bot().send_private_msg( + user_id=user_id, + message=f'签到成功~ {signInfo["msg"]}: {signInfo["num"]}分钟' + ) + else: + return + else: + await get_bot().send_private_msg(user_id=user_id, message='token已过期,请重新自行抓包并重新绑定') @cloud_ys.handle() @@ -56,13 +98,17 @@ async def _(event: Union[GroupMessageEvent, MessageEvent], msg: Message = Comman action = re.search(r'(?P(信息|info)|(绑定|bind))', param) if event.message_type == 'guild': - await cloud_ys.finish('该功能不支持群组或频道推送哦~', at_sender=True) - - if str(get_message_id(event)) not in config.paimon_cloudys_group: - await cloud_ys.finish(f'尚未在群 {str(get_message_id(event))} 开启本功能') + await cloud_ys.finish('该功能不支持频道推送哦~', at_sender=True) if not param: - await cloud_ys.finish('请输入具体指令或参数!', at_sender=True) + message = f'亲爱的旅行者: {user_id}\n\n' \ + '本插件食用方法:\n' \ + '<云原神/yys> [绑定/bind] 绑定云原神token\n' \ + '<云原神/yys> [信息/info] 查询云原神账户信息\n\n' \ + ' 解绑token并取消自动签到\n\n' \ + '有关如何抓取token的方法:\n' \ + '请前往 https://blog.ethreal.cn/archives/yysgettoken 查阅' + await cloud_ys.finish(message, at_sender=True) else: if action.group('action') in ['绑定', 'bind']: match = re.search(r'oi=\d+', param.split(" ")[1]) @@ -72,6 +118,8 @@ async def _(event: Union[GroupMessageEvent, MessageEvent], msg: Message = Comman data[user_id] = { 'uid': uid, 'uuid': uuid, + 'limit': 600, + 'isFullTime': False, 'token': param.split(" ")[1] } @@ -82,14 +130,14 @@ async def _(event: Union[GroupMessageEvent, MessageEvent], msg: Message = Comman save_json(data, 'user_data.json') """ 添加推送任务 """ scheduler.add_job( - func=auto_sign, + func=auto_sign_cgn, trigger='cron', - hour=4, + hour=6, id="cloud_genshin_" + user_id, args=(user_id, data[user_id]), misfire_grace_time=10 ) - await cloud_ys.finish(f'[UID:{uid}]已绑定token, 将在每天4点为你自动签到!', at_sender=True) + await cloud_ys.finish(f'[UID:{uid}]已绑定token, 将在每天6点为你自动签到!', at_sender=True) elif action.group('action') in ['信息', 'info']: @@ -117,9 +165,9 @@ async def _(event: Union[GroupMessageEvent, MessageEvent], msg: Message = Comman for user_id, data in load_json('user_data.json').items(): scheduler.add_job( - func=auto_sign, + func=auto_sign_cgn, trigger='cron', - hour=4, + hour=6, id="cloud_genshin_" + user_id, args=(user_id, data), misfire_grace_time=10