🐛 修复绑定信息扫码登陆 (KimigaiiWuyi/GenshinUID#574)

This commit is contained in:
KimigaiiWuyi 2023-08-14 02:51:43 +08:00
parent ff47dafc66
commit c3b96efe3e
5 changed files with 19 additions and 15 deletions

View File

@ -47,7 +47,7 @@ class GsClient:
bot_id='Nonebot222', bot_id='Nonebot222',
user_type='direct', user_type='direct',
user_pm=1, user_pm=1,
group_id='12345678888', group_id=None,
user_id='444835641', user_id='444835641',
content=content, content=content,
) )

View File

@ -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': if user_data.uid is not None and user_data.uid != '0':
uid_text = f'原神UID {user_data.uid}' uid_text = f'原神UID {user_data.uid}'
user_push_data = await sqla.select_push_data(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: else:
uid_text = '未发现原神UID' uid_text = '未发现原神UID'
user_push_data = GsPush(bot_id='TEMP') user_push_data = GsPush(bot_id='TEMP')

View File

@ -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): async def get_ck_by_stoken(bot_id: str, user_id: str):
sqla = get_sqla(bot_id) 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} uid_dict = {uid: user_id for uid in uid_list}
im = await refresh_ck_by_uid_list(bot_id, uid_dict) im = await refresh_ck_by_uid_list(bot_id, uid_dict)
return im return im

View File

@ -12,10 +12,10 @@ from typing import (
) )
from sqlalchemy.future import select from sqlalchemy.future import select
from sqlalchemy import delete, update
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import sessionmaker
from sqlmodel import Field, SQLModel, col from sqlmodel import Field, SQLModel, col
from sqlalchemy.sql.expression import func from sqlalchemy.sql.expression import func
from sqlalchemy import and_, delete, update
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from gsuid_core.data_store import get_res_path from gsuid_core.data_store import get_res_path
@ -65,20 +65,18 @@ class BaseIDModel(SQLModel):
@classmethod @classmethod
@with_session @with_session
async def base_select_data( async def base_select_data(
cls, session: AsyncSession, model: Type[T_BaseIDModel], **data cls: type[T_BaseIDModel], session: AsyncSession, **data
) -> Optional[T_BaseIDModel]: ) -> Optional[T_BaseIDModel]:
conditions = [] stmt = select(cls)
for key, value in data.items(): for k, v in data.items():
conditions.append(getattr(model, key) == value) stmt = stmt.where(getattr(cls, k) == v)
where_clause = and_(*conditions) result = await session.execute(stmt)
sql = select(model).where(where_clause)
result = await session.execute(sql)
data = result.scalars().all() data = result.scalars().all()
return data[0] if data else None return data[0] if data else None
@classmethod @classmethod
async def data_exist(cls, model: Type[T_BaseIDModel], **data) -> bool: async def data_exist(cls, **data) -> bool:
return bool(await cls.base_select_data(model, **data)) return bool(await cls.base_select_data(**data))
class BaseBotIDModel(BaseIDModel): class BaseBotIDModel(BaseIDModel):
@ -102,6 +100,7 @@ class BaseBotIDModel(BaseIDModel):
query = sql.values(**data) query = sql.values(**data)
query.execution_options(synchronize_session='fetch') query.execution_options(synchronize_session='fetch')
await session.execute(query) await session.execute(query)
await session.commit()
return 0 return 0
return -1 return -1

View File

@ -370,7 +370,7 @@ class SQLA:
async def update_push_data(self, uid: str, data: dict) -> bool: async def update_push_data(self, uid: str, data: dict) -> bool:
retcode = -1 retcode = -1
if await GsPush.data_exist(GsPush, uid=uid): if await GsPush.data_exist(uid=uid):
retcode = await GsPush.update_data_by_uid( retcode = await GsPush.update_data_by_uid(
uid, self.bot_id, 'sr' if self.is_sr else None, **data 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}) await self.update_push_data(uid, {f'{mode}_is_push': status})
async def select_push_data(self, uid: str) -> Optional[GsPush]: 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: async def push_exists(self, uid: str) -> bool:
return await GsPush.data_exist(GsPush, uid=uid) return await GsPush.data_exist(uid=uid)
##################### #####################
# 杂项部分 # # 杂项部分 #