diff --git a/.gitignore b/.gitignore
index 5c7ce6e..d1bbbda 100644
--- a/.gitignore
+++ b/.gitignore
@@ -136,6 +136,7 @@ logs/
report/
data/
/resources/*/*/test/
+/resources/*/*/*.map
plugins/genshin/daily/daily.json
metadata/data/
resources/assets/
diff --git a/modules/playercards/metadata b/modules/playercards/metadata
index 6f366f6..5743ac6 160000
--- a/modules/playercards/metadata
+++ b/modules/playercards/metadata
@@ -1 +1 @@
-Subproject commit 6f366f6367d29cc89643ddf591608f58826dd9dd
+Subproject commit 5743ac6ea8ab35ab3149e13c66d0465ab253f29a
diff --git a/plugins/genshin/abyss.py b/plugins/genshin/abyss.py
index bed885e..6a12fe1 100644
--- a/plugins/genshin/abyss.py
+++ b/plugins/genshin/abyss.py
@@ -9,17 +9,16 @@ from arkowrapper import ArkoWrapper
from pytz import timezone
from simnet import GenshinClient
from simnet.errors import BadRequest as SimnetBadRequest
-from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Message, Update
+from telegram import Message, Update
from telegram.constants import ChatAction, ParseMode
from telegram.ext import CallbackContext, filters
-from telegram.helpers import create_deep_linked_url
from core.dependence.assets import AssetsService
from core.plugin import Plugin, handler
from core.services.cookies.error import TooManyRequestPublicCookies
from core.services.template.models import RenderGroupResult, RenderResult
from core.services.template.services import TemplateService
-from plugins.tools.genshin import PlayerNotFoundError, CookiesNotFoundError, GenshinHelper
+from plugins.tools.genshin import CookiesNotFoundError, GenshinHelper
from utils.log import logger
try:
@@ -76,7 +75,7 @@ class AbyssPlugin(Plugin):
@handler.command("abyss", block=False)
@handler.message(filters.Regex(msg_pattern), block=False)
- async def command_start(self, update: Update, context: CallbackContext) -> None:
+ async def command_start(self, update: Update, _: CallbackContext) -> None:
user = update.effective_user
message = update.effective_message
uid: Optional[int] = None
@@ -147,17 +146,6 @@ class AbyssPlugin(Plugin):
except AbyssNotFoundError:
await message.reply_text("无法查询玩家挑战队伍详情,只能查询统计详情哦~")
return
- except PlayerNotFoundError: # 若未找到账号
- buttons = [[InlineKeyboardButton("点我绑定账号", url=create_deep_linked_url(context.bot.username, "set_uid"))]]
- if filters.ChatType.GROUPS.filter(message):
- reply_message = await message.reply_text(
- "未查询到您所绑定的账号信息,请先私聊派蒙绑定账号", reply_markup=InlineKeyboardMarkup(buttons)
- )
- self.add_delete_message_job(reply_message)
- self.add_delete_message_job(message)
- else:
- await message.reply_text("未查询到您所绑定的账号信息,请先绑定账号", reply_markup=InlineKeyboardMarkup(buttons))
- return
except TooManyRequestPublicCookies:
reply_message = await message.reply_text("查询次数太多,请您稍后重试")
if filters.ChatType.GROUPS.filter(message):
diff --git a/plugins/genshin/avatar_list.py b/plugins/genshin/avatar_list.py
index 8815547..ba3e74a 100644
--- a/plugins/genshin/avatar_list.py
+++ b/plugins/genshin/avatar_list.py
@@ -2,13 +2,12 @@ import asyncio
from typing import List, Optional, Sequence, TYPE_CHECKING
from simnet import GenshinClient
-from simnet.errors import BadRequest as SimnetBadRequest, InvalidCookies
+from simnet.errors import BadRequest as SimnetBadRequest
from simnet.models.genshin.calculator import CalculatorTalent, CalculatorCharacterDetails
from simnet.models.genshin.chronicle.characters import Character
-from telegram import InlineKeyboardButton, InlineKeyboardMarkup, User
-from telegram.constants import ChatAction, ParseMode
+from telegram import User
+from telegram.constants import ChatAction
from telegram.ext import filters
-from telegram.helpers import create_deep_linked_url
from core.dependence.assets import AssetsService
from core.plugin import Plugin, handler
@@ -19,7 +18,7 @@ from core.services.template.models import FileType
from core.services.template.services import TemplateService
from metadata.genshin import AVATAR_DATA
from modules.wiki.base import Model
-from plugins.tools.genshin import CharacterDetails, PlayerNotFoundError, CookiesNotFoundError, GenshinHelper
+from plugins.tools.genshin import CharacterDetails, GenshinHelper
from utils.log import logger
if TYPE_CHECKING:
@@ -70,40 +69,6 @@ class AvatarListPlugin(Plugin):
self.player_service = player_service
self.player_info_service = player_info_service
- async def get_user_client(
- self, update: "Update", context: "ContextTypes.DEFAULT_TYPE"
- ) -> Optional["GenshinClient"]:
- message = update.effective_message
- user = update.effective_user
- try:
- return await self.helper.get_genshin_client(user.id)
- except PlayerNotFoundError: # 若未找到账号
- buttons = [[InlineKeyboardButton("点我绑定账号", url=create_deep_linked_url(context.bot.username, "set_cookie"))]]
- if filters.ChatType.GROUPS.filter(message):
- reply_message = await message.reply_text(
- "未查询到您所绑定的账号信息,请先私聊派蒙绑定账号", reply_markup=InlineKeyboardMarkup(buttons)
- )
- self.add_delete_message_job(reply_message, delay=30)
- self.add_delete_message_job(message, delay=30)
- else:
- await message.reply_text("未查询到您所绑定的账号信息,请先绑定账号", reply_markup=InlineKeyboardMarkup(buttons))
- except CookiesNotFoundError:
- buttons = [[InlineKeyboardButton("点我绑定账号", url=create_deep_linked_url(context.bot.username, "set_cookie"))]]
- if filters.ChatType.GROUPS.filter(message):
- reply_message = await message.reply_text(
- "此功能需要绑定cookie
后使用,请先私聊派蒙绑定账号",
- reply_markup=InlineKeyboardMarkup(buttons),
- parse_mode=ParseMode.HTML,
- )
- self.add_delete_message_job(reply_message, delay=30)
- self.add_delete_message_job(message, delay=30)
- else:
- await message.reply_text(
- "此功能需要绑定cookie
后使用,请先私聊派蒙进行绑定",
- parse_mode=ParseMode.HTML,
- reply_markup=InlineKeyboardMarkup(buttons),
- )
-
async def get_avatar_data(self, character: Character, client: "GenshinClient") -> Optional["AvatarData"]:
detail = await self.character_details.get_character_details(client, character)
if detail is None:
@@ -191,43 +156,29 @@ class AvatarListPlugin(Plugin):
@handler.command("avatars", block=False)
@handler.message(filters.Regex(r"^(全部)?练度统计$"), block=False)
- async def avatar_list(self, update: "Update", context: "ContextTypes.DEFAULT_TYPE"):
+ async def avatar_list(self, update: "Update", _: "ContextTypes.DEFAULT_TYPE"):
user = update.effective_user
message = update.effective_message
all_avatars = "全部" in message.text or "all" in message.text # 是否发送全部角色
logger.info("用户 %s[%s] [bold]练度统计[/bold]: all=%s", user.full_name, user.id, all_avatars, extra={"markup": True})
-
- client = await self.get_user_client(update, context)
- if not client:
- return
-
- notice = await message.reply_text("派蒙需要收集整理数据,还请耐心等待哦~")
- await message.reply_chat_action(ChatAction.TYPING)
-
+ notice = None
try:
- characters = await client.get_genshin_characters(client.player_id)
- avatar_datas: List[AvatarData] = await self.get_avatars_data(
- characters, client, None if all_avatars else 20
- )
- except InvalidCookies as exc:
- await notice.delete()
- await client.get_genshin_user(client.player_id)
- logger.warning("用户 %s[%s] 无法请求角色数数据 API返回信息为 [%s]%s", user.full_name, user.id, exc.ret_code, exc.original)
- reply_message = await message.reply_text("出错了呜呜呜 ~ 当前访问令牌无法请求角色数数据,请尝试重新获取Cookie。")
- if filters.ChatType.GROUPS.filter(message):
- self.add_delete_message_job(reply_message, delay=30)
- self.add_delete_message_job(message, delay=30)
- return
+ async with self.helper.genshin(user.id) as client:
+ notice = await message.reply_text("派蒙需要收集整理数据,还请耐心等待哦~")
+ await message.reply_chat_action(ChatAction.TYPING)
+ characters = await client.get_genshin_characters(client.player_id)
+ avatar_datas: List[AvatarData] = await self.get_avatars_data(
+ characters, client, None if all_avatars else 20
+ )
except SimnetBadRequest as e:
- await notice.delete()
+ if notice:
+ await notice.delete()
if e.ret_code == -502002:
reply_message = await message.reply_html("请先在米游社中使用一次养成计算器后再使用此功能~")
self.add_delete_message_job(reply_message, delay=20)
return
raise e
- finally:
- await client.shutdown()
name_card, avatar, nickname, rarity = await self.get_final_data(client.player_id, user)
diff --git a/plugins/genshin/daily_note.py b/plugins/genshin/daily_note.py
index 5bfe576..f88ba74 100644
--- a/plugins/genshin/daily_note.py
+++ b/plugins/genshin/daily_note.py
@@ -3,15 +3,13 @@ from datetime import datetime
from typing import Optional, TYPE_CHECKING
from simnet.errors import DataNotPublic
-from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from telegram.constants import ChatAction
from telegram.ext import ConversationHandler, filters
-from telegram.helpers import create_deep_linked_url
from core.plugin import Plugin, handler
from core.services.template.models import RenderResult
from core.services.template.services import TemplateService
-from plugins.tools.genshin import PlayerNotFoundError, CookiesNotFoundError, GenshinHelper
+from plugins.tools.genshin import GenshinHelper
from utils.log import logger
if TYPE_CHECKING:
@@ -105,23 +103,6 @@ class DailyNotePlugin(Plugin):
# 获取当前用户的 genshin.Client
async with self.helper.genshin(user.id) as client:
render_result = await self._get_daily_note(client)
- except (CookiesNotFoundError, PlayerNotFoundError):
- buttons = [
- [
- InlineKeyboardButton(
- "点我绑定账号", url=create_deep_linked_url(self.application.bot.username, "set_cookie")
- )
- ]
- ]
- if filters.ChatType.GROUPS.filter(message):
- reply_message = await message.reply_text(
- "未查询到您所绑定的账号信息,请先私聊派蒙绑定账号", reply_markup=InlineKeyboardMarkup(buttons)
- )
- self.add_delete_message_job(reply_message, delay=30)
- self.add_delete_message_job(message, delay=30)
- else:
- await message.reply_text("未查询到您所绑定的账号信息,请先绑定账号", reply_markup=InlineKeyboardMarkup(buttons))
- return
except DataNotPublic:
reply_message = await message.reply_text("查询失败惹,可能是便签功能被禁用了?请尝试通过米游社或者 hoyolab 获取一次便签信息后重试。")
if filters.ChatType.GROUPS.filter(message):
diff --git a/plugins/genshin/ledger.py b/plugins/genshin/ledger.py
index 2baa948..fda6b2b 100644
--- a/plugins/genshin/ledger.py
+++ b/plugins/genshin/ledger.py
@@ -3,17 +3,15 @@ import re
from datetime import datetime, timedelta
from typing import TYPE_CHECKING
-from simnet.errors import DataNotPublic, BadRequest as SimnetBadRequest, InvalidCookies
-from telegram import InlineKeyboardButton, InlineKeyboardMarkup
+from simnet.errors import DataNotPublic, BadRequest as SimnetBadRequest
from telegram.constants import ChatAction
from telegram.ext import filters
-from telegram.helpers import create_deep_linked_url
from core.plugin import Plugin, handler
from core.services.cookies import CookiesService
from core.services.template.models import RenderResult
from core.services.template.services import TemplateService
-from plugins.tools.genshin import PlayerNotFoundError, CookiesNotFoundError, GenshinHelper
+from plugins.tools.genshin import GenshinHelper
from utils.log import logger
if TYPE_CHECKING:
@@ -113,35 +111,7 @@ class LedgerPlugin(Plugin):
await message.reply_chat_action(ChatAction.TYPING)
try:
async with self.helper.genshin(user.id) as client:
- try:
- render_result = await self._start_get_ledger(client, month)
- except InvalidCookies as exc: # 如果抛出InvalidCookies 判断是否真的玄学过期(或权限不足?)
- await client.get_genshin_user(client.player_id)
- logger.warning(
- "用户 %s[%s] 无法请求旅行札记数据 API返回信息为 [%s]%s", user.full_name, user.id, exc.ret_code, exc.original
- )
- reply_message = await message.reply_text("出错了呜呜呜 ~ 当前访问令牌无法请求角色数数据,请尝试重新获取Cookie。")
- if filters.ChatType.GROUPS.filter(message):
- self.add_delete_message_job(reply_message, delay=30)
- self.add_delete_message_job(message, delay=30)
- return
- except (PlayerNotFoundError, CookiesNotFoundError):
- buttons = [
- [
- InlineKeyboardButton(
- "点我绑定账号", url=create_deep_linked_url(self.application.bot.username, "set_cookie")
- )
- ]
- ]
- if filters.ChatType.GROUPS.filter(message):
- reply_message = await message.reply_text(
- "未查询到您所绑定的账号信息,请先私聊派蒙绑定账号", reply_markup=InlineKeyboardMarkup(buttons)
- )
- self.add_delete_message_job(reply_message, delay=30)
- self.add_delete_message_job(message, delay=30)
- else:
- await message.reply_text("未查询到您所绑定的账号信息,请先绑定账号", reply_markup=InlineKeyboardMarkup(buttons))
- return
+ render_result = await self._start_get_ledger(client, month)
except DataNotPublic:
reply_message = await message.reply_text("查询失败惹,可能是旅行札记功能被禁用了?请先通过米游社或者 hoyolab 获取一次旅行札记后重试。")
if filters.ChatType.GROUPS.filter(message):
diff --git a/plugins/genshin/pay_log.py b/plugins/genshin/pay_log.py
index 2d3569e..9bb91b0 100644
--- a/plugins/genshin/pay_log.py
+++ b/plugins/genshin/pay_log.py
@@ -236,14 +236,3 @@ class PayLogPlugin(Plugin.Conversation):
[InlineKeyboardButton("点我导入", url=create_deep_linked_url(context.bot.username, "pay_log_import"))]
]
await message.reply_text("派蒙没有找到你的充值记录,快来点击按钮私聊派蒙导入吧~", reply_markup=InlineKeyboardMarkup(buttons))
- except PlayerNotFoundError:
- logger.info("未查询到用户 %s[%s] 所绑定的账号信息", user.full_name, user.id)
- buttons = [[InlineKeyboardButton("点我绑定账号", url=create_deep_linked_url(context.bot.username, "set_uid"))]]
- if filters.ChatType.GROUPS.filter(message):
- reply_message = await message.reply_text(
- "未查询到您所绑定的账号信息,请先私聊派蒙绑定账号", reply_markup=InlineKeyboardMarkup(buttons)
- )
- self.add_delete_message_job(reply_message, delay=30)
- self.add_delete_message_job(message, delay=30)
- else:
- await message.reply_text("未查询到您所绑定的账号信息,请先绑定账号", reply_markup=InlineKeyboardMarkup(buttons))
diff --git a/plugins/genshin/reg_time.py b/plugins/genshin/reg_time.py
index 0c5b6b4..c5a62dc 100644
--- a/plugins/genshin/reg_time.py
+++ b/plugins/genshin/reg_time.py
@@ -2,7 +2,7 @@ from datetime import datetime
from typing import TYPE_CHECKING
from simnet.client.routes import InternationalRoute
-from simnet.errors import InvalidCookies, BadRequest as SIMNetBadRequest
+from simnet.errors import BadRequest as SIMNetBadRequest
from simnet.utils.player import recognize_genshin_server, recognize_genshin_game_biz
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from telegram.constants import ParseMode
@@ -97,15 +97,6 @@ class RegTimePlugin(Plugin):
parse_mode=ParseMode.HTML,
reply_markup=InlineKeyboardMarkup(buttons),
)
- except InvalidCookies as exc:
- async with self.helper.genshin(user.id) as client:
- await client.get_genshin_user(client.player_id)
- logger.warning("用户 %s[%s] 无法请求注册时间 API返回信息为 [%s]%s", user.full_name, user.id, exc.ret_code, exc.original)
- reply_message = await message.reply_text("出错了呜呜呜 ~ 当前访问令牌无法请求角色数数据,")
- if filters.ChatType.GROUPS.filter(message):
- self.add_delete_message_job(reply_message, delay=30)
- self.add_delete_message_job(message, delay=30)
- return
except SIMNetBadRequest as exc:
if exc.ret_code == -501101:
await message.reply_text("当前角色冒险等阶未达到10级,暂时无法获取信息")
diff --git a/plugins/genshin/sign.py b/plugins/genshin/sign.py
index 024ec1a..f8d2575 100644
--- a/plugins/genshin/sign.py
+++ b/plugins/genshin/sign.py
@@ -1,6 +1,6 @@
from typing import Optional, Tuple
-from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
+from telegram import Update
from telegram.constants import ChatAction
from telegram.ext import CommandHandler, CallbackContext
from telegram.ext import MessageHandler, filters
@@ -14,7 +14,7 @@ from core.services.players import PlayersService
from core.services.task.models import Task as SignUser, TaskStatusEnum
from core.services.task.services import SignServices
from core.services.users.services import UserAdminService
-from plugins.tools.genshin import PlayerNotFoundError, CookiesNotFoundError, GenshinHelper
+from plugins.tools.genshin import GenshinHelper
from plugins.tools.sign import SignSystem, NeedChallenge
from utils.log import logger
@@ -112,17 +112,6 @@ class Sign(Plugin):
reply_message = await message.reply_text(sign_text, allow_sending_without_reply=True)
if filters.ChatType.GROUPS.filter(reply_message):
self.add_delete_message_job(reply_message)
- except (PlayerNotFoundError, CookiesNotFoundError):
- buttons = [[InlineKeyboardButton("点我绑定账号", url=create_deep_linked_url(context.bot.username, "set_cookie"))]]
- if filters.ChatType.GROUPS.filter(message):
- reply_message = await message.reply_text(
- "未查询到您所绑定的账号信息,请先私聊派蒙绑定账号", reply_markup=InlineKeyboardMarkup(buttons)
- )
- self.add_delete_message_job(reply_message, delay=30)
-
- self.add_delete_message_job(message, delay=30)
- else:
- await message.reply_text("未查询到您所绑定的账号信息,请先绑定账号", reply_markup=InlineKeyboardMarkup(buttons))
except NeedChallenge as exc:
button = await self.sign_system.get_challenge_button(
context.bot.username,
diff --git a/plugins/genshin/stats.py b/plugins/genshin/stats.py
index 519cd3c..c5f4c8a 100644
--- a/plugins/genshin/stats.py
+++ b/plugins/genshin/stats.py
@@ -2,16 +2,14 @@ import random
from typing import Optional, TYPE_CHECKING
from simnet.errors import BadRequest as SimnetBadRequest
-from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from telegram.constants import ChatAction
from telegram.ext import filters
-from telegram.helpers import create_deep_linked_url
from core.plugin import Plugin, handler
from core.services.cookies.error import TooManyRequestPublicCookies
from core.services.template.models import RenderResult
from core.services.template.services import TemplateService
-from plugins.tools.genshin import PlayerNotFoundError, CookiesNotFoundError, GenshinHelper
+from plugins.tools.genshin import CookiesNotFoundError, GenshinHelper
from utils.log import logger
if TYPE_CHECKING:
@@ -52,17 +50,6 @@ class PlayerStatsPlugins(Plugin):
except CookiesNotFoundError:
async with self.helper.public_genshin(user.id) as client:
render_result = await self.render(client, uid)
- except PlayerNotFoundError:
- buttons = [[InlineKeyboardButton("点我绑定账号", url=create_deep_linked_url(context.bot.username, "set_cookie"))]]
- if filters.ChatType.GROUPS.filter(message):
- reply_message = await message.reply_text(
- "未查询到您所绑定的账号信息,请先私聊派蒙绑定账号", reply_markup=InlineKeyboardMarkup(buttons)
- )
- self.add_delete_message_job(reply_message, delay=30)
- self.add_delete_message_job(message, delay=30)
- else:
- await message.reply_text("未查询到您所绑定的账号信息,请先绑定账号", reply_markup=InlineKeyboardMarkup(buttons))
- return
except SimnetBadRequest as exc:
if exc.ret_code == 1034 and uid:
await message.reply_text("出错了呜呜呜 ~ 请稍后重试")
diff --git a/plugins/genshin/wish_log.py b/plugins/genshin/wish_log.py
index 56050d8..0b5b673 100644
--- a/plugins/genshin/wish_log.py
+++ b/plugins/genshin/wish_log.py
@@ -352,17 +352,6 @@ class WishLogPlugin(Plugin.Conversation):
[InlineKeyboardButton("点我导入", url=create_deep_linked_url(context.bot.username, "gacha_log_import"))]
]
await message.reply_text("派蒙没有找到你的抽卡记录,快来点击按钮私聊派蒙导入吧~", reply_markup=InlineKeyboardMarkup(buttons))
- except PlayerNotFoundError:
- logger.info("未查询到用户 %s[%s] 所绑定的账号信息", user.full_name, user.id)
- buttons = [[InlineKeyboardButton("点我绑定账号", url=create_deep_linked_url(context.bot.username, "set_uid"))]]
- if filters.ChatType.GROUPS.filter(message):
- reply_message = await message.reply_text(
- "未查询到您所绑定的账号信息,请先私聊派蒙绑定账号", reply_markup=InlineKeyboardMarkup(buttons)
- )
- self.add_delete_message_job(reply_message, delay=30)
- self.add_delete_message_job(message, delay=30)
- else:
- await message.reply_text("未查询到您所绑定的账号信息,请先绑定账号", reply_markup=InlineKeyboardMarkup(buttons))
@handler(CommandHandler, command="gacha_count", block=False)
@handler(MessageHandler, filters=filters.Regex("^抽卡统计?(武器|角色|常驻|仅五星|)$"), block=False)
@@ -417,15 +406,3 @@ class WishLogPlugin(Plugin.Conversation):
[InlineKeyboardButton("点我导入", url=create_deep_linked_url(context.bot.username, "gacha_log_import"))]
]
await message.reply_text("派蒙没有找到你的抽卡记录,快来私聊派蒙导入吧~", reply_markup=InlineKeyboardMarkup(buttons))
- except PlayerNotFoundError:
- logger.info("未查询到用户 %s[%s] 所绑定的账号信息", user.full_name, user.id)
- buttons = [[InlineKeyboardButton("点我绑定账号", url=create_deep_linked_url(context.bot.username, "set_uid"))]]
- if filters.ChatType.GROUPS.filter(message):
- reply_message = await message.reply_text(
- "未查询到您所绑定的账号信息,请先私聊派蒙绑定账号", reply_markup=InlineKeyboardMarkup(buttons)
- )
- self.add_delete_message_job(reply_message, delay=30)
-
- self.add_delete_message_job(message, delay=30)
- else:
- await message.reply_text("未查询到您所绑定的账号信息,请先绑定账号", reply_markup=InlineKeyboardMarkup(buttons))
diff --git a/plugins/system/errorhandler.py b/plugins/system/errorhandler.py
index 5010f0a..689f1a9 100644
--- a/plugins/system/errorhandler.py
+++ b/plugins/system/errorhandler.py
@@ -23,6 +23,7 @@ from telegram.helpers import create_deep_linked_url
from core.config import config
from core.plugin import Plugin, error_handler
+from gram_core.services.players.error import PlayerNotFoundError
from modules.apihelper.error import APIHelperException, APIHelperTimedOut, ResponseException, ReturnCodeError
from modules.errorpush import (
PbClient,
@@ -30,6 +31,7 @@ from modules.errorpush import (
SentryClient,
SentryClientException,
)
+from plugins.tools.genshin import CookiesNotFoundError, PlayerNotFoundError as GenshinPlayerNotFoundError
from utils.log import logger
from utils.patch.aiohttp import AioHttpTimeoutException
@@ -77,6 +79,16 @@ class ErrorHandler(Plugin):
]
]
)
+ elif "绑定账号" in content:
+ buttons = InlineKeyboardMarkup(
+ [
+ [
+ InlineKeyboardButton(
+ "点我绑定账号", url=create_deep_linked_url(self.application.bot.username, "set_cookie")
+ )
+ ]
+ ]
+ )
else:
buttons = ReplyKeyboardRemove()
@@ -237,6 +249,16 @@ class ErrorHandler(Plugin):
self.create_notice_task(update, context, notice)
raise ApplicationHandlerStop
+ @error_handler()
+ async def process_player_and_cookie_not_found(self, update: object, context: CallbackContext):
+ if not isinstance(
+ context.error, (CookiesNotFoundError, PlayerNotFoundError, GenshinPlayerNotFoundError)
+ ) or not isinstance(update, Update):
+ return
+ notice = "未查询到您所绑定的账号信息,请先私聊派蒙绑定账号"
+ self.create_notice_task(update, context, notice)
+ raise ApplicationHandlerStop
+
@error_handler(block=False)
async def process_z_error(self, update: object, context: CallbackContext) -> None:
# 必须 `process_` 加上 `z` 保证该函数最后一个注册
diff --git a/plugins/tools/genshin.py b/plugins/tools/genshin.py
index a3bee7c..0fc671b 100644
--- a/plugins/tools/genshin.py
+++ b/plugins/tools/genshin.py
@@ -254,10 +254,12 @@ class GenshinHelper(Plugin):
stoken = client.cookies.get("stoken")
if stoken is not None:
try:
- cookie_model.data["cookie_token"] = await client.get_cookie_token_by_stoken()
+ new_cookies = cookie_model.data.copy()
+ new_cookies["cookie_token"] = await client.get_cookie_token_by_stoken()
logger.success("用户 %s 刷新 cookie_token 成功", user_id)
- cookie_model.data["ltoken"] = await client.get_ltoken_by_stoken()
+ new_cookies["ltoken"] = await client.get_ltoken_by_stoken()
logger.success("用户 %s 刷新 ltoken 成功", user_id)
+ cookie_model.data = new_cookies
await self.cookies_service.update(cookie_model)
except SimnetBadRequest as _exc:
logger.warning(