Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

更新至 v2.0.1 #245

Merged
merged 24 commits into from
Jan 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
6ed95a4
refactor(all): 从 nonebot.log 导入 logger
Ljzd-PRO Jan 23, 2024
c4d37e3
fix(utils): 修复 F821 undefined name 'Logger'
Ljzd-PRO Jan 23, 2024
455a83e
style(all): 修复编码样式违规
Ljzd-PRO Jan 23, 2024
1afd67c
refactor(model): 更新 Preference.github_proxy 默认值
Ljzd-PRO Jan 23, 2024
9e10d70
feat(model): 为用户数据增加显示名称输出
Ljzd-PRO Jan 24, 2024
0964519
refactor(utils): 采用更保守的手机号模糊方式(只保留尾号)
Ljzd-PRO Jan 24, 2024
1158b37
feat(all): 在文本输出方面采用 UserAccount.display_name 输出账号名称
Ljzd-PRO Jan 24, 2024
68e0974
feat(all): 在文本输出方面采用 UserAccount.display_name 输出账号名称
Ljzd-PRO Jan 24, 2024
3658eec
Merge remote-tracking branch 'origin/dev' into dev
Ljzd-PRO Jan 24, 2024
cd96ba7
fix(command): 补充遗漏的 account.display_name 调用
Ljzd-PRO Jan 24, 2024
f2859ee
fix(command): 修复 AttributeError: 'str' object has no attribute 'displ…
Ljzd-PRO Jan 24, 2024
a293f48
build: version bump
Ljzd-PRO Jan 24, 2024
bf38063
docs: 增加更新内容
Ljzd-PRO Jan 24, 2024
8e88483
docs: fix indent
Ljzd-PRO Jan 24, 2024
575354d
Merge branch 'stable' into dev
Ljzd-PRO Jan 24, 2024
dad8338
Merge branch 'stable' into dev
Ljzd-PRO Jan 24, 2024
80c7a90
Merge branch '2.0.0' into dev
Ljzd-PRO Jan 26, 2024
72e8547
build: version bump
Ljzd-PRO Jan 28, 2024
bb2f9d8
Merge branch 'stable' into dev
Ljzd-PRO Jan 28, 2024
056c7ec
docs: 增加更新内容
Ljzd-PRO Jan 28, 2024
d94cf83
build: 更新邮箱
Ljzd-PRO Jan 27, 2024
1507a53
build: 更新pydantic
Ljzd-PRO Jan 28, 2024
3c7400b
fix(model): 修复插件不会主动创建data目录的问题
Ljzd-PRO Jan 29, 2024
8aad2f9
docs: 增加更新内容
Ljzd-PRO Jan 29, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@

## 📣 更新内容

### 2024.1.24 - [v2.0.1-beta.1](https://github.com/Ljzd-PRO/nonebot-plugin-mystool/releases/tag/v2.0.1-beta.1)
### 2024.1.28 - v2.0.1

- 修复插件无法自动创建 `data` 目录以创建配置文件和数据文件的问题 (v2.0.1)

- 更新插件配置的 `preference.github_proxy` 默认值为 `https://mirror.ghproxy.com/`
> [!NOTE]
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "nonebot-plugin-mystool"
version = "v2.0.0"
version = "v2.0.1"
description = "QQ聊天、频道机器人插件 | 米游社工具-每日米游币任务、游戏签到、商品兑换、免抓包登录、原神崩铁便笺提醒"
license = "MIT"
authors = [
Expand Down Expand Up @@ -33,7 +33,7 @@ nonebot-adapter-onebot = "^2.3.1"
nonebot-adapter-qq = "^1.1.2"
tenacity = "^8.2.3"
qrcode = "^7.4.2"
pydantic = "^1.10.0"
pydantic = "^1.10.14"
nonebot2 = ">=2.0.0"
pytz = "^2023.3.post1"

Expand Down
2 changes: 1 addition & 1 deletion src/nonebot_plugin_mystool/_version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "v2.0.0"
__version__ = "v2.0.1"
48 changes: 25 additions & 23 deletions src/nonebot_plugin_mystool/api/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@ async def get_game_record(account: UserAccount, retry: bool = True) -> Tuple[Bas
api_result = ApiResultHandler(res.json())
if api_result.login_expired:
logger.info(
f"获取用户游戏数据(GameRecord) - 用户 {account.bbs_uid} 登录失效")
f"获取用户游戏数据(GameRecord) - 用户 {account.display_name} 登录失效")
logger.debug(f"网络请求返回: {res.text}")
return BaseApiStatus(login_expired=True), None
return BaseApiStatus(success=True), list(
Expand Down Expand Up @@ -455,7 +455,7 @@ async def get_user_myb(account: UserAccount, retry: bool = True) -> Tuple[BaseAp
api_result = ApiResultHandler(res.json())
if api_result.login_expired:
logger.info(
f"获取用户米游币 - 用户 {account.bbs_uid} 登录失效")
f"获取用户米游币 - 用户 {account.display_name} 登录失效")
logger.debug(f"网络请求返回: {res.text}")
return BaseApiStatus(login_expired=True), None
return BaseApiStatus(success=True), int(api_result.data["points"])
Expand Down Expand Up @@ -497,7 +497,7 @@ async def device_login(account: UserAccount, retry: bool = True):
api_result = ApiResultHandler(res.json())
if api_result.login_expired:
logger.info(
f"设备登录(device_login) - 用户 {account.bbs_uid} 登录失效")
f"设备登录(device_login) - 用户 {account.display_name} 登录失效")
logger.debug(f"网络请求返回: {res.text}")
return BaseApiStatus(login_expired=True)
if res.json()["message"] != "OK":
Expand Down Expand Up @@ -542,7 +542,7 @@ async def device_save(account: UserAccount, retry: bool = True):
api_result = ApiResultHandler(res.json())
if api_result.login_expired:
logger.info(
f"设备保存(device_save) - 用户 {account.bbs_uid} 登录失效")
f"设备保存(device_save) - 用户 {account.display_name} 登录失效")
logger.debug(f"网络请求返回: {res.text}")
return BaseApiStatus(login_expired=True)
if res.json()["message"] != "OK":
Expand Down Expand Up @@ -679,7 +679,7 @@ async def get_address(account: UserAccount, retry: bool = True) -> Tuple[BaseApi
api_result = ApiResultHandler(res.json())
if api_result.login_expired:
logger.info(
f"获取地址数据 - 用户 {account.bbs_uid} 登录失效")
f"获取地址数据 - 用户 {account.display_name} 登录失效")
logger.debug(f"网络请求返回: {res.text}")
return BaseApiStatus(login_expired=True), None
address_list = list(map(Address.parse_obj, api_result.data["list"]))
Expand Down Expand Up @@ -1362,28 +1362,28 @@ async def good_exchange(plan: ExchangePlan) -> Tuple[ExchangeStatus, Optional[Ex
api_result = ApiResultHandler(res.json())
if api_result.login_expired:
logger.info(
f"米游币商品兑换 - 执行兑换: 用户 {plan.account.bbs_uid} 登录失效 - 请求发送时间: {start_time}")
f"米游币商品兑换 - 执行兑换: 用户 {plan.account.display_name} 登录失效 - 请求发送时间: {start_time}")
logger.debug(f"网络请求返回: {res.text}")
return ExchangeStatus(login_expired=True), None
if api_result.success:
logger.info(
f"米游币商品兑换: 用户 {plan.account.bbs_uid} 商品 {plan.good.goods_id} 兑换成功!可以自行确认 - 请求发送时间: {start_time}")
f"米游币商品兑换: 用户 {plan.account.display_name} 商品 {plan.good.goods_id} 兑换成功!可以自行确认 - 请求发送时间: {start_time}")
logger.debug(f"网络请求返回: {res.text}")
return ExchangeStatus(success=True), ExchangeResult(result=True, return_data=res.json(), plan=plan)
else:
logger.info(
f"米游币商品兑换: 用户 {plan.account.bbs_uid} 商品 {plan.good.goods_id} 兑换失败,可以自行确认 - 请求发送时间: {start_time}")
f"米游币商品兑换: 用户 {plan.account.display_name} 商品 {plan.good.goods_id} 兑换失败,可以自行确认 - 请求发送时间: {start_time}")
logger.debug(f"网络请求返回: {res.text}")
return ExchangeStatus(success=True), ExchangeResult(result=False, return_data=res.json(), plan=plan)
except Exception as e:
if is_incorrect_return(e):
logger.error(
f"米游币商品兑换: 用户 {plan.account.bbs_uid} 商品 {plan.good.goods_id} 服务器没有正确返回 - 请求发送时间: {start_time}")
f"米游币商品兑换: 用户 {plan.account.display_name} 商品 {plan.good.goods_id} 服务器没有正确返回 - 请求发送时间: {start_time}")
logger.debug(f"网络请求返回: {res.text}")
return ExchangeStatus(incorrect_return=True), None
else:
logger.exception(
f"米游币商品兑换: 用户 {plan.account.bbs_uid} 商品 {plan.good.goods_id} 请求失败 - 请求发送时间: {start_time}")
f"米游币商品兑换: 用户 {plan.account.display_name} 商品 {plan.good.goods_id} 请求失败 - 请求发送时间: {start_time}")
return ExchangeStatus(network_error=True), None


Expand Down Expand Up @@ -1421,28 +1421,28 @@ def good_exchange_sync(plan: ExchangePlan) -> Tuple[ExchangeStatus, Optional[Exc
api_result = ApiResultHandler(res.json())
if api_result.login_expired:
logger.info(
f"米游币商品兑换 - 执行兑换: 用户 {plan.account.bbs_uid} 登录失效 - 请求发送时间: {start_time}")
f"米游币商品兑换 - 执行兑换: 用户 {plan.account.display_name} 登录失效 - 请求发送时间: {start_time}")
logger.debug(f"网络请求返回: {res.text}")
return ExchangeStatus(login_expired=True), None
if api_result.success:
logger.info(
f"米游币商品兑换: 用户 {plan.account.bbs_uid} 商品 {plan.good.goods_id} 兑换成功!可以自行确认 - 请求发送时间: {start_time}")
f"米游币商品兑换: 用户 {plan.account.display_name} 商品 {plan.good.goods_id} 兑换成功!可以自行确认 - 请求发送时间: {start_time}")
logger.debug(f"网络请求返回: {res.text}")
return ExchangeStatus(success=True), ExchangeResult(result=True, return_data=res.json(), plan=plan)
else:
logger.info(
f"米游币商品兑换: 用户 {plan.account.bbs_uid} 商品 {plan.good.goods_id} 兑换失败,可以自行确认 - 请求发送时间: {start_time}")
f"米游币商品兑换: 用户 {plan.account.display_name} 商品 {plan.good.goods_id} 兑换失败,可以自行确认 - 请求发送时间: {start_time}")
logger.debug(f"网络请求返回: {res.text}")
return ExchangeStatus(success=True), ExchangeResult(result=False, return_data=res.json(), plan=plan)
except Exception as e:
if is_incorrect_return(e):
logger.error(
f"米游币商品兑换: 用户 {plan.account.bbs_uid} 商品 {plan.good.goods_id} 服务器没有正确返回 - 请求发送时间: {start_time}")
f"米游币商品兑换: 用户 {plan.account.display_name} 商品 {plan.good.goods_id} 服务器没有正确返回 - 请求发送时间: {start_time}")
logger.debug(f"网络请求返回: {res.text}")
return ExchangeStatus(incorrect_return=True), None
else:
logger.exception(
f"米游币商品兑换: 用户 {plan.account.bbs_uid} 商品 {plan.good.goods_id} 请求失败 - 请求发送时间: {start_time}")
f"米游币商品兑换: 用户 {plan.account.display_name} 商品 {plan.good.goods_id} 请求失败 - 请求发送时间: {start_time}")
return ExchangeStatus(network_error=True), None


Expand Down Expand Up @@ -1491,17 +1491,17 @@ async def genshin_note(account: UserAccount) -> Tuple[
api_result = ApiResultHandler(res.json())
if api_result.login_expired:
logger.info(
f"原神实时便笺: 用户 {account.bbs_uid} 登录失效")
f"原神实时便笺: 用户 {account.display_name} 登录失效")
logger.debug(f"网络请求返回: {res.text}")
return GenshinNoteStatus(login_expired=True), None

if api_result.invalid_ds:
logger.info(
f"原神实时便笺: 用户 {account.bbs_uid} DS 校验失败")
f"原神实时便笺: 用户 {account.display_name} DS 校验失败")
logger.debug(f"网络请求返回: {res.text}")
if api_result.retcode == 1034:
logger.info(
f"原神实时便笺: 用户 {account.bbs_uid} 可能被验证码阻拦")
f"原神实时便笺: 用户 {account.display_name} 可能被验证码阻拦")
logger.debug(f"网络请求返回: {res.text}")
if not api_result.success:
headers["DS"] = generate_ds()
Expand Down Expand Up @@ -1568,17 +1568,17 @@ async def starrail_note(account: UserAccount) -> Tuple[
api_result = ApiResultHandler(res.json())
if api_result.login_expired:
logger.info(
f"崩铁实时便笺: 用户 {account.bbs_uid} 登录失效")
f"崩铁实时便笺: 用户 {account.display_name} 登录失效")
logger.debug(f"网络请求返回: {res.text}")
return StarRailNoteStatus(login_expired=True), None

if api_result.invalid_ds:
logger.info(
f"崩铁实时便笺: 用户 {account.bbs_uid} DS 校验失败")
f"崩铁实时便笺: 用户 {account.display_name} DS 校验失败")
logger.debug(f"网络请求返回: {res.text}")
if api_result.retcode == 1034:
logger.info(
f"崩铁实时便笺: 用户 {account.bbs_uid} 可能被验证码阻拦")
f"崩铁实时便笺: 用户 {account.display_name} 可能被验证码阻拦")
logger.debug(f"网络请求返回: {res.text}")
return StarRailNoteStatus(success=True), StarRailNote.parse_obj(api_result.data)
except tenacity.RetryError as e:
Expand All @@ -1593,8 +1593,10 @@ async def starrail_note(account: UserAccount) -> Tuple[
return StarRailNoteStatus(no_starrail_account=True), None


async def create_verification(account: UserAccount = None, retry: bool = True) -> Tuple[
BaseApiStatus, Optional[MmtData]]:
async def create_verification(
account: UserAccount = None,
retry: bool = True
) -> Tuple[BaseApiStatus, Optional[MmtData]]:
"""
创建人机验证任务 - 一般用于米游社讨论区签到

Expand Down
19 changes: 11 additions & 8 deletions src/nonebot_plugin_mystool/api/game_sign_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,11 @@ async def get_rewards(self, retry: bool = True) -> Tuple[BaseApiStatus, Optional
logger.exception(f"获取签到奖励信息 - 请求失败")
return BaseApiStatus(network_error=True), None

async def get_info(self, platform: Literal["ios", "android"] = "ios", retry: bool = True) -> Tuple[
BaseApiStatus, Optional[GameSignInfo]]:
async def get_info(
self,
platform: Literal["ios", "android"] = "ios",
retry: bool = True
) -> Tuple[BaseApiStatus, Optional[GameSignInfo]]:
"""
获取签到记录

Expand All @@ -112,12 +115,12 @@ async def get_info(self, platform: Literal["ios", "android"] = "ios", retry: boo
api_result = ApiResultHandler(res.json())
if api_result.login_expired:
logger.info(
f"获取签到数据 - 用户 {self.account.bbs_uid} 登录失效")
f"获取签到数据 - 用户 {self.account.display_name} 登录失效")
logger.debug(f"网络请求返回: {res.text}")
return BaseApiStatus(login_expired=True), None
if api_result.invalid_ds:
logger.info(
f"获取签到数据 - 用户 {self.account.bbs_uid} DS 校验失败")
f"获取签到数据 - 用户 {self.account.display_name} DS 校验失败")
logger.debug(f"网络请求返回: {res.text}")
return BaseApiStatus(invalid_ds=True), None
return BaseApiStatus(success=True), GameSignInfo.parse_obj(api_result.data)
Expand Down Expand Up @@ -190,21 +193,21 @@ async def sign(self,
api_result = ApiResultHandler(res.json())
if api_result.login_expired:
logger.info(
f"游戏签到 - 用户 {self.account.bbs_uid} 登录失效")
f"游戏签到 - 用户 {self.account.display_name} 登录失效")
logger.debug(f"网络请求返回: {res.text}")
return BaseApiStatus(login_expired=True), None
elif api_result.invalid_ds:
logger.info(
f"游戏签到 - 用户 {self.account.bbs_uid} DS 校验失败")
f"游戏签到 - 用户 {self.account.display_name} DS 校验失败")
logger.debug(f"网络请求返回: {res.text}")
return BaseApiStatus(invalid_ds=True), None
elif api_result.data.get("risk_code") != 0:
logger.warning(
f"{plugin_config.preference.log_head}游戏签到 - 用户 {self.account.bbs_uid} 可能被人机验证阻拦")
f"{plugin_config.preference.log_head}游戏签到 - 用户 {self.account.display_name} 可能被人机验证阻拦")
logger.debug(f"{plugin_config.preference.log_head}网络请求返回: {res.text}")
return BaseApiStatus(need_verify=True), MmtData.parse_obj(api_result.data)
else:
logger.success(f"游戏签到 - 用户 {self.account.bbs_uid} 签到成功")
logger.success(f"游戏签到 - 用户 {self.account.display_name} 签到成功")
logger.debug(f"网络请求返回: {res.text}")
return BaseApiStatus(success=True), None

Expand Down
Loading
Loading