From bb0cea2dd3bc3381dd9f7ee3989fba63d1fb83d3 Mon Sep 17 00:00:00 2001 From: HDU_Nbsp <1808347356@qq.com> Date: Fri, 5 Aug 2022 22:32:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E5=8E=9F=E7=A5=9E?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E7=AD=BE=E5=88=B0=E8=BF=94=E5=9B=9Einvalid?= =?UTF-8?q?=20request=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=9F=A5=E7=9C=8B=E6=88=91=E7=9A=84cookie=E5=91=BD?= =?UTF-8?q?=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/genshin/query_user/bind/__init__.py | 10 ++- .../query_user/genshin_sign/__init__.py | 11 ++-- .../query_user/genshin_sign/data_source.py | 66 +++++++++++++++---- 3 files changed, 69 insertions(+), 18 deletions(-) diff --git a/plugins/genshin/query_user/bind/__init__.py b/plugins/genshin/query_user/bind/__init__.py index 2c81784f..1ca8ace7 100644 --- a/plugins/genshin/query_user/bind/__init__.py +++ b/plugins/genshin/query_user/bind/__init__.py @@ -64,9 +64,13 @@ async def _(event: MessageEvent, cmd: Tuple[str, ...] = Command(), arg: Message _x = f"已成功为uid:{uid} 设置米游社id:{msg}" else: if not msg: - await bind.finish( - "私聊发送!!\n打开 https://bbs.mihoyo.com/ys/\n登录后按F12点击控制台输入document.cookie复制输出的内容即可" - ) + await bind.finish("""私聊发送!! + 1.以无痕模式打开浏览器(Edge请新建InPrivate窗口) + 2.打开http://bbs.mihoyo.com/ys/并登陆 + 3.登陆后打开http://user.mihoyo.com/进行登陆 + 4.按下F12,打开控制台,输入以下命令: + var cookie=document.cookie;var ask=confirm('Cookie:'+cookie+'\\n\\nDo you want to copy the cookie to the clipboard?');if(ask==true){copy(cookie);msg=cookie}else{msg='Cancel'} + 5.私聊发送:原神绑定cookie 刚刚复制的cookie""") if isinstance(event, GroupMessageEvent): await bind.finish("请立即撤回你的消息并私聊发送!") uid = await Genshin.get_user_uid(event.user_id) diff --git a/plugins/genshin/query_user/genshin_sign/__init__.py b/plugins/genshin/query_user/genshin_sign/__init__.py index 654bd15d..1750af7a 100644 --- a/plugins/genshin/query_user/genshin_sign/__init__.py +++ b/plugins/genshin/query_user/genshin_sign/__init__.py @@ -22,7 +22,7 @@ usage: __plugin_des__ = "原神懒人签到" __plugin_cmd__ = ["开启/关闭原神自动签到", "原神我硬签"] __plugin_type__ = ("原神相关",) -__plugin_version__ = 0.1 +__plugin_version__ = 0.2 __plugin_author__ = "HibiKier" __plugin_settings__ = { "level": 5, @@ -33,7 +33,7 @@ __plugin_settings__ = { genshin_matcher = on_command( - "开原神自动签到", aliases={"关原神自动签到", "原神我硬签"}, priority=5, block=True + "开原神自动签到", aliases={"关原神自动签到", "原神我硬签", "查看我的cookie"}, priority=5, block=True ) @@ -41,10 +41,13 @@ genshin_matcher = on_command( async def _(event: MessageEvent, cmd: Tuple[str, ...] = Command()): cmd = cmd[0] uid = await Genshin.get_user_uid(event.user_id) + if cmd == "查看我的cookie": + my_cookie = await Genshin.get_user_cookie(uid, True) + await genshin_matcher.finish("您的cookie为" + my_cookie) if not uid or not await Genshin.get_user_cookie(uid, True): await genshin_matcher.finish("请先绑定uid和cookie!") - if "account_id" not in await Genshin.get_user_cookie(uid, True): - await genshin_matcher.finish("请更新cookie!") + # if "account_id" not in await Genshin.get_user_cookie(uid, True): + # await genshin_matcher.finish("请更新cookie!") if cmd == "原神我硬签": try: msg = await genshin_sign(uid) diff --git a/plugins/genshin/query_user/genshin_sign/data_source.py b/plugins/genshin/query_user/genshin_sign/data_source.py index 737c7ea6..4679e80c 100644 --- a/plugins/genshin/query_user/genshin_sign/data_source.py +++ b/plugins/genshin/query_user/genshin_sign/data_source.py @@ -4,6 +4,12 @@ from services.log import logger from .._utils import random_hex, get_old_ds from .._models import Genshin from typing import Optional, Dict +import hashlib +import random +import string +import uuid +import requests +import time async def genshin_sign(uid: int) -> Optional[str]: @@ -22,10 +28,10 @@ async def genshin_sign(uid: int) -> Optional[str]: sign_list = await get_sign_reward_list() get_reward = sign_list["data"]["awards"][ int(sign_info["total_sign_day"]) - 1 - ]["name"] + ]["name"] reward_num = sign_list["data"]["awards"][ int(sign_info["total_sign_day"]) - 1 - ]["cnt"] + ]["cnt"] get_im = f"本次签到获得:{get_reward}x{reward_num}" if status == "OK" and sign_info["is_sign"]: return f"\n原神签到成功!\n{get_im}\n本月漏签次数:{sign_info['sign_cnt_missed']}" @@ -34,6 +40,39 @@ async def genshin_sign(uid: int) -> Optional[str]: return None +# 获取请求Header里的DS 当web为true则生成网页端的DS +def get_ds(web: bool) -> str: + if web: + n = "9nQiU3AV0rJSIBWgdynfoGMGKaklfbM7" + else: + n = "9nQiU3AV0rJSIBWgdynfoGMGKaklfbM7" + i = str(timestamp()) + r = random_text(6) + c = md5("salt=" + n + "&t=" + i + "&r=" + r) + return f"{i},{r},{c}" + + +# 时间戳 +def timestamp() -> int: + return int(time.time()) + + +def random_text(num: int) -> str: + return ''.join(random.sample(string.ascii_lowercase + string.digits, num)) + + +def md5(text: str) -> str: + md5 = hashlib.md5() + md5.update(text.encode()) + return md5.hexdigest() + + +# 生成一个device id +def get_device_id(cookie) -> str: + return str(uuid.uuid3(uuid.NAMESPACE_URL, cookie)).replace( + '-', '').upper() + + async def _sign(uid: int, server_id: str = "cn_gf01") -> Optional[Dict[str, str]]: """ 米游社签到 @@ -43,18 +82,23 @@ async def _sign(uid: int, server_id: str = "cn_gf01") -> Optional[Dict[str, str] if str(uid)[0] == "5": server_id = "cn_qd01" try: + cookie = await Genshin.get_user_cookie(uid, True) req = await AsyncHttpx.post( url="https://api-takumi.mihoyo.com/event/bbs_sign_reward/sign", headers={ - "User_Agent": "Mozilla/5.0 (Linux; Android 10; MIX 2 Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.101 Mobile Safari/537.36 miHoYoBBS/2.3.0", - "Cookie": await Genshin.get_user_cookie(int(uid), True), - "x-rpc-device_id": random_hex(32), - "Origin": "https://webstatic.mihoyo.com", - "X_Requested_With": "com.mihoyo.hyperion", - "DS": get_old_ds(), - "x-rpc-client_type": "5", - "Referer": "https://webstatic.mihoyo.com/bbs/event/signin-ys/index.html?bbs_auth_required=true&act_id=e202009291139501&utm_source=bbs&utm_medium=mys&utm_campaign=icon", - "x-rpc-app_version": "2.3.0", + 'Accept': 'application/json, text/plain, */*', + 'DS': get_ds(web=True), + 'Origin': 'https://webstatic.mihoyo.com', + 'x-rpc-app_version': "2.34.1", + 'User-Agent': 'Mozilla/5.0 (Linux; Android 9; Unspecified Device) AppleWebKit/537.36 (KHTML, like Gecko) ' + 'Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36 miHoYoBBS/2.3.0', + 'x-rpc-client_type': "5", + 'Referer': 'https://webstatic.mihoyo.com/bbs/event/signin-ys/index.html?bbs_auth_required=true&act_id=e202009291139501&utm_source=bbs&utm_medium=mys&utm_campaign=icon', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,en-US;q=0.8', + 'X-Requested-With': 'com.mihoyo.hyperion', + "Cookie": cookie, + 'x-rpc-device_id': get_device_id(cookie) }, json={"act_id": "e202009291139501", "uid": uid, "region": server_id}, )