Skip to content

Commit b183804

Browse files
committed
✨ 初步实现深渊过码(测试不完全)
1 parent 4ece68a commit b183804

2 files changed

Lines changed: 132 additions & 1 deletion

File tree

__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323
from .handle.ssbq_handler import get_subs, handle_ssbq, sub_list
2424
from .utils.logger import Logger
2525
from .utils.update import do_update
26-
from .web import web_api, web_page # noqa
26+
from .handle.sy_handle import sy as sy
27+
from .web import web_api as web_api
28+
from .web import web_page as web_page
2729

2830
__plugin_meta__ = PluginMetadata(
2931
name="加强小派蒙验证",

handle/sy_handle.py

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
from typing import Optional
2+
3+
from LittlePaimon.database import AbyssInfo
4+
from LittlePaimon.plugins.Paimon_Abyss import draw_abyss_card
5+
from LittlePaimon.utils.api import ABYSS_API, get_cookie, mihoyo_headers
6+
from LittlePaimon.utils.message import CommandPlayer
7+
from LittlePaimon.utils.requests import aiorequests
8+
from nonebot import on_command
9+
from nonebot.adapters.onebot.v11 import Message, MessageEvent
10+
from nonebot.params import CommandArg
11+
12+
from ..captcha.captcha import get_pass_challenge
13+
from ..config.config import config
14+
from ..utils.logger import Logger
15+
16+
sy = on_command(
17+
"sy",
18+
aliases={"深渊战报", "深渊信息"},
19+
priority=9,
20+
block=True,
21+
state={
22+
"pm_name": "sy",
23+
"pm_description": "查看本期|上期的深渊战报",
24+
"pm_usage": "sy(uid)(本期|上期)",
25+
"pm_priority": 1,
26+
},
27+
)
28+
29+
30+
async def get_abyss_info(
31+
uid: str,
32+
user_id: Optional[str],
33+
schedule_type: Optional[str] = "1",
34+
):
35+
server_id = "cn_qd01" if uid[0] == "5" else "cn_gf01"
36+
cookie_info = await get_cookie(user_id, uid, True)
37+
headers = mihoyo_headers(
38+
q=f"role_id={uid}&schedule_type={schedule_type}&server={server_id}",
39+
cookie=cookie_info.cookie,
40+
)
41+
k = 0
42+
for i in range(2):
43+
data: dict = (
44+
await aiorequests.get(
45+
url=ABYSS_API,
46+
headers=headers,
47+
params={
48+
"schedule_type": schedule_type,
49+
"role_id": uid,
50+
"server": server_id,
51+
},
52+
)
53+
).json()
54+
if data["retcode"] == 1034 and k < 2:
55+
k += 1
56+
Logger.info(
57+
"原神深渊战报",
58+
"➤➤",
59+
{},
60+
f"遇到验证码,开始尝试过码",
61+
True,
62+
)
63+
challenge = await get_pass_challenge(uid, user_id, config.ssbq_ch)
64+
if challenge is not None:
65+
headers.update({"challenge": challenge})
66+
continue
67+
else:
68+
Logger.info(
69+
"原神深渊战报",
70+
"➤➤",
71+
{},
72+
f"过码失败",
73+
False,
74+
)
75+
return "遇到验证码,但是过码失败"
76+
else:
77+
if data["retcode"] != 1034 and k != 0:
78+
Logger.info(
79+
"原神深渊战报",
80+
"➤➤",
81+
{},
82+
f"过码成功",
83+
)
84+
return "遇到验证码,请手动去解决" if data["retcode"] == 1034 else data
85+
86+
87+
async def update_abyss_info(uid, user_id, abyss_index: str):
88+
data = await get_abyss_info(uid, user_id, schedule_type=abyss_index)
89+
if not isinstance(data, dict):
90+
return data
91+
elif data["retcode"] != 0:
92+
Logger.info(
93+
"原神信息", f'更新<m>{uid}</m>的玩家数据时出错,消息为<r>{data["message"]}</r>'
94+
)
95+
return data["message"]
96+
await AbyssInfo.update_info(user_id, uid, data["data"])
97+
Logger.info("原神信息", f"➤UID<m>{uid}</m><g>更新深渊信息成功</g>")
98+
return await AbyssInfo.get_or_none(user_id=user_id, uid=uid)
99+
100+
101+
@sy.handle()
102+
async def _(
103+
event: MessageEvent, players=CommandPlayer(), msg: Message = CommandArg()
104+
):
105+
Logger.info("原神深渊战报", "开始执行")
106+
abyss_index = (
107+
2 if any(i in msg.extract_plain_text() for i in ["上", "last"]) else 1
108+
)
109+
msg = Message()
110+
for player in players:
111+
Logger.info(
112+
"原神深渊战报", "➤ ", {"用户": players[0].user_id, "UID": players[0].uid}
113+
)
114+
abyss_info = await update_abyss_info(
115+
player.uid, player.user_id, str(abyss_index)
116+
)
117+
if isinstance(abyss_info, str):
118+
Logger.info("原神深渊战报", "➤➤", {}, abyss_info, False)
119+
msg += f"UID{player.uid}{abyss_info}\n"
120+
else:
121+
Logger.info("原神深渊战报", "➤➤", {}, "数据获取成功", True)
122+
try:
123+
img = await draw_abyss_card(abyss_info)
124+
Logger.info("原神深渊战报", "➤➤➤", {}, "制图完成", True)
125+
msg += img
126+
except Exception as e:
127+
Logger.info("原神深渊战报", "➤➤➤", {}, f"制图出错:{e}", False)
128+
msg += f"UID{player.uid}制图时出错:{e}\n"
129+
await sy.finish(msg, at_sender=True)

0 commit comments

Comments
 (0)