From c3b96efe3e62449eec20a59f5fc3a1d82a8f3ccf Mon Sep 17 00:00:00 2001 From: KimigaiiWuyi <444835641@qq.com> Date: Mon, 14 Aug 2023 02:51:43 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D`=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=E4=BF=A1=E6=81=AF`=E5=92=8C`=E6=89=AB=E7=A0=81?= =?UTF-8?q?=E7=99=BB=E9=99=86`=20(KimigaiiWuyi/GenshinUID#574)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gsuid_core/client.py | 2 +- .../core_command/core_user/draw_user_card.py | 3 +++ gsuid_core/utils/cookie_manager/add_ck.py | 4 +++- gsuid_core/utils/database/base_models.py | 19 +++++++++---------- gsuid_core/utils/database/dal.py | 6 +++--- 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/gsuid_core/client.py b/gsuid_core/client.py index 25f0a26..1915a65 100644 --- a/gsuid_core/client.py +++ b/gsuid_core/client.py @@ -47,7 +47,7 @@ class GsClient: bot_id='Nonebot222', user_type='direct', user_pm=1, - group_id='12345678888', + group_id=None, user_id='444835641', content=content, ) diff --git a/gsuid_core/plugins/core_command/core_user/draw_user_card.py b/gsuid_core/plugins/core_command/core_user/draw_user_card.py index 84afe22..e24b7ec 100644 --- a/gsuid_core/plugins/core_command/core_user/draw_user_card.py +++ b/gsuid_core/plugins/core_command/core_user/draw_user_card.py @@ -66,6 +66,9 @@ async def get_user_card(bot_id: str, user_id: str) -> Union[bytes, str]: if user_data.uid is not None and user_data.uid != '0': uid_text = f'原神UID {user_data.uid}' user_push_data = await sqla.select_push_data(user_data.uid) + if user_push_data is None: + await sqla.insert_push_data(user_data.uid) + user_push_data = await sqla.select_push_data(user_data.uid) else: uid_text = '未发现原神UID' user_push_data = GsPush(bot_id='TEMP') diff --git a/gsuid_core/utils/cookie_manager/add_ck.py b/gsuid_core/utils/cookie_manager/add_ck.py index d790146..bcf6d34 100644 --- a/gsuid_core/utils/cookie_manager/add_ck.py +++ b/gsuid_core/utils/cookie_manager/add_ck.py @@ -43,7 +43,9 @@ async def get_ck_by_all_stoken(bot_id: str): async def get_ck_by_stoken(bot_id: str, user_id: str): sqla = get_sqla(bot_id) - uid_list: List = await sqla.get_bind_uid_list(user_id) + uid_list = await sqla.get_bind_uid_list(user_id) + if uid_list is None: + return UID_HINT uid_dict = {uid: user_id for uid in uid_list} im = await refresh_ck_by_uid_list(bot_id, uid_dict) return im diff --git a/gsuid_core/utils/database/base_models.py b/gsuid_core/utils/database/base_models.py index fa91a8f..467cb40 100644 --- a/gsuid_core/utils/database/base_models.py +++ b/gsuid_core/utils/database/base_models.py @@ -12,10 +12,10 @@ from typing import ( ) from sqlalchemy.future import select +from sqlalchemy import delete, update from sqlalchemy.orm import sessionmaker from sqlmodel import Field, SQLModel, col from sqlalchemy.sql.expression import func -from sqlalchemy import and_, delete, update from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine from gsuid_core.data_store import get_res_path @@ -65,20 +65,18 @@ class BaseIDModel(SQLModel): @classmethod @with_session async def base_select_data( - cls, session: AsyncSession, model: Type[T_BaseIDModel], **data + cls: type[T_BaseIDModel], session: AsyncSession, **data ) -> Optional[T_BaseIDModel]: - conditions = [] - for key, value in data.items(): - conditions.append(getattr(model, key) == value) - where_clause = and_(*conditions) - sql = select(model).where(where_clause) - result = await session.execute(sql) + stmt = select(cls) + for k, v in data.items(): + stmt = stmt.where(getattr(cls, k) == v) + result = await session.execute(stmt) data = result.scalars().all() return data[0] if data else None @classmethod - async def data_exist(cls, model: Type[T_BaseIDModel], **data) -> bool: - return bool(await cls.base_select_data(model, **data)) + async def data_exist(cls, **data) -> bool: + return bool(await cls.base_select_data(**data)) class BaseBotIDModel(BaseIDModel): @@ -102,6 +100,7 @@ class BaseBotIDModel(BaseIDModel): query = sql.values(**data) query.execution_options(synchronize_session='fetch') await session.execute(query) + await session.commit() return 0 return -1 diff --git a/gsuid_core/utils/database/dal.py b/gsuid_core/utils/database/dal.py index 315e380..36faf0b 100644 --- a/gsuid_core/utils/database/dal.py +++ b/gsuid_core/utils/database/dal.py @@ -370,7 +370,7 @@ class SQLA: async def update_push_data(self, uid: str, data: dict) -> bool: retcode = -1 - if await GsPush.data_exist(GsPush, uid=uid): + if await GsPush.data_exist(uid=uid): retcode = await GsPush.update_data_by_uid( uid, self.bot_id, 'sr' if self.is_sr else None, **data ) @@ -385,10 +385,10 @@ class SQLA: await self.update_push_data(uid, {f'{mode}_is_push': status}) async def select_push_data(self, uid: str) -> Optional[GsPush]: - return await GsPush.base_select_data(GsPush, uid=uid) + return await GsPush.base_select_data(uid=uid) async def push_exists(self, uid: str) -> bool: - return await GsPush.data_exist(GsPush, uid=uid) + return await GsPush.data_exist(uid=uid) ##################### # 杂项部分 #