为数据库模型加入更多游戏UID列

This commit is contained in:
KimigaiiWuyi 2023-11-09 05:17:19 +08:00
parent 80622adf01
commit f277cecf0a
6 changed files with 103 additions and 75 deletions

View File

@ -50,6 +50,15 @@ exec_list.extend(
'ALTER TABLE GsUser ADD COLUMN sr_region TEXT',
'ALTER TABLE GsUser ADD COLUMN fp TEXT',
'ALTER TABLE GsUser ADD COLUMN device_id TEXT',
'ALTER TABLE GsUser ADD COLUMN bb_uid TEXT',
'ALTER TABLE GsUser ADD COLUMN bbb_uid TEXT',
'ALTER TABLE GsUser ADD COLUMN zzz_uid TEXT',
'ALTER TABLE GsUser ADD COLUMN wd_uid TEXT',
'ALTER TABLE GsBind ADD COLUMN bb_uid TEXT',
'ALTER TABLE GsBind ADD COLUMN bbb_uid TEXT',
'ALTER TABLE GsBind ADD COLUMN zzz_uid TEXT',
'ALTER TABLE GsBind ADD COLUMN wd_uid TEXT',
'ALTER TABLE GsUser ADD COLUMN OAID TEXT',
'ALTER TABLE GsUser ADD COLUMN sr_sign_switch TEXT DEFAULT "off"',
'ALTER TABLE GsUser ADD COLUMN sr_push_switch TEXT DEFAULT "off"',
'ALTER TABLE GsUser ADD COLUMN draw_switch TEXT DEFAULT "off"',

View File

@ -161,7 +161,7 @@ class BaseMysApi:
self, uid: str, seed_id: str, seed_time: str, model_name: str
) -> str:
device_id = await self.get_user_device_id(uid)
ext_fields = f'''{{\"cpuType\":\"arm64-v8a\",\"romCapacity\":\"512\",\"productName\":\"{model_name}\",\"romRemain\":\"422\",\"manufacturer\":\"XiaoMi\",\"appMemory\":\"512\",\"hostname\":\"dg02-pool03-kvm87\",\"screenSize\":\"1240x2662\",\"osVersion\":\"13\",\"aaid\":\"{self.generate_ID()}\",\"vendor\":\"中国联通\",\"accelerometer\":\"1.4883357x7.1712894x6.2847486\",\"buildTags\":\"release-keys\",\"model\":\"{model_name}\",\"brand\":\"XiaoMi\",\"oaid\":\"6C47BC55BBC443F49B603129AFCD621E6f70bfc8a663a364e224fe59c248b471\",\"hardware\":\"qcom\",\"deviceType\":\"OP5913L1\",\"devId\":\"REL\",\"serialNumber\":\"unknown\",\"buildTime\":\"1687848011000\",\"buildUser\":\"root\",\"ramCapacity\":\"469679\",\"magnetometer\":\"20.081251x-27.487501x2.1937501\",\"display\":\"{model_name}_13.1.0.181(CN01)\",\"ramRemain\":\"215344\",\"deviceInfo\":\"XiaoMi\\\/{model_name}\\\/OP5913L1:13\\\/SKQ1.221119.001\\\/T.118e6c7-5aa23-73911:user\\\/release-keys\",\"gyroscope\":\"0.030226856x0.014647375x0.010652636\",\"vaid\":\"{self.generate_ID()}\",\"buildType\":\"user\",\"sdkVersion\":\"33\",\"board\":\"taro\"}}''' # noqa
ext_fields = f'''{{\"cpuType\":\"arm64-v8a\",\"romCapacity\":\"512\",\"productName\":\"{model_name}\",\"romRemain\":\"422\",\"manufacturer\":\"XiaoMi\",\"appMemory\":\"512\",\"hostname\":\"dg02-pool03-kvm87\",\"screenSize\":\"1240x2662\",\"osVersion\":\"13\",\"aaid\":\"{self.generate_ID()}\",\"vendor\":\"中国联通\",\"accelerometer\":\"1.4883357x7.1712894x6.2847486\",\"buildTags\":\"release-keys\",\"model\":\"{model_name}\",\"brand\":\"XiaoMi\",\"oaid\":\"DD8D6ADFC74F4725BBD548BF23D708E46f70bfc8a663a364da14b74c490eb0c5\",\"hardware\":\"qcom\",\"deviceType\":\"OP5913L1\",\"devId\":\"REL\",\"serialNumber\":\"unknown\",\"buildTime\":\"1687848011000\",\"buildUser\":\"root\",\"ramCapacity\":\"469679\",\"magnetometer\":\"20.081251x-27.487501x2.1937501\",\"display\":\"{model_name}_13.1.0.181(CN01)\",\"ramRemain\":\"215344\",\"deviceInfo\":\"XiaoMi\\\/{model_name}\\\/OP5913L1:13\\\/SKQ1.221119.001\\\/T.118e6c7-5aa23-73911:user\\\/release-keys\",\"gyroscope\":\"0.030226856x0.014647375x0.010652636\",\"vaid\":\"{self.generate_ID()}\",\"buildType\":\"user\",\"sdkVersion\":\"33\",\"board\":\"taro\"}}''' # noqa
body = {
'device_id': self.generate_seed(16),
'seed_id': seed_id, # uuid4

View File

@ -116,7 +116,9 @@ async def _deal_ck(bot_id: str, mes: str, user_id: str) -> str:
simp_dict = SimpleCookie(mes)
uid = await GsBind.get_uid_by_game(user_id, bot_id)
sr_uid = await GsBind.get_uid_by_game(user_id, bot_id, 'sr')
uid_bind = sr_uid_bind = None
uid_bind = sr_uid_bind = zzz_uid_bind = None
wd_uid_bind = bb_uid_bind = bbb_uid_bind = None
if uid is None and sr_uid is None:
if uid is None:
@ -214,11 +216,24 @@ async def _deal_ck(bot_id: str, mes: str, user_id: str) -> str:
uid_bind = i['game_role_id']
elif i['game_id'] == 6:
sr_uid_bind = i['game_role_id']
if uid_bind and sr_uid_bind:
break
elif i['game_id'] == 8:
zzz_uid_bind = i['game_role_id']
elif i['game_id'] == 4:
wd_uid_bind = i['game_role_id']
elif i['game_id'] == 3:
bb_uid_bind = i['game_role_id']
elif i['game_id'] == 1:
bbb_uid_bind = i['game_role_id']
else:
if not (uid_bind or sr_uid_bind):
return f'你的米游社账号{account_id}尚未绑定原神/星铁账号,请前往米游社操作!'
if not (
uid_bind
or sr_uid_bind
or zzz_uid_bind
or wd_uid_bind
or bb_uid_bind
or bbb_uid_bind
):
return f'你的米游社账号{account_id}尚未绑定游戏账号,请前往米游社操作!'
except Exception:
pass
@ -235,28 +250,21 @@ async def _deal_ck(bot_id: str, mes: str, user_id: str) -> str:
nd = await mys_api.ck_in_new_device(uid, app_cookie)
# 往数据库添加内容
if uid_bind and await GsUser.user_exists(uid_bind):
await GsUser.update_data_by_uid(
uid_bind,
bot_id,
if await GsUser.data_exist(mys_id=account_id):
await GsUser.update_data_by_xx(
{'mys_id': account_id},
bot_id=bot_id,
cookie=account_cookie,
status=None,
stoken=app_cookie,
sr_uid=sr_uid_bind,
bb_uid=bb_uid_bind,
bbb_uid=bbb_uid_bind,
zzz_uid=zzz_uid_bind,
wd_uid=wd_uid_bind,
fp=nd[0],
device_id=nd[1],
)
elif sr_uid_bind and await GsUser.user_exists(sr_uid_bind, 'sr'):
await GsUser.update_data_by_uid(
sr_uid_bind,
bot_id,
'sr',
cookie=account_cookie,
status=None,
stoken=app_cookie,
fp=nd[0],
device_id=nd[1],
OAID=None,
)
else:
await GsUser.insert_data(
@ -264,6 +272,10 @@ async def _deal_ck(bot_id: str, mes: str, user_id: str) -> str:
bot_id=bot_id,
uid=uid_bind,
sr_uid=sr_uid_bind,
bb_uid=bb_uid_bind,
bbb_uid=bbb_uid_bind,
zzz_uid=zzz_uid_bind,
wd_uid=wd_uid_bind,
mys_id=account_id,
cookie=account_cookie,
stoken=app_cookie if app_cookie else None,
@ -279,6 +291,7 @@ async def _deal_ck(bot_id: str, mes: str, user_id: str) -> str:
device_id=nd[1],
sr_push_switch='off',
sr_sign_switch='off',
OAID=None,
)
im_list.append(

View File

@ -4,7 +4,7 @@ import base64
import asyncio
from pathlib import Path
from http.cookies import SimpleCookie
from typing import Any, List, Tuple, Union, Literal
from typing import Any, Tuple, Union, Literal
import qrcode
import aiofiles
@ -16,7 +16,6 @@ from gsuid_core.models import Event
from gsuid_core.logger import logger
from gsuid_core.segment import MessageSegment
from gsuid_core.utils.api.mys_api import mys_api
from gsuid_core.utils.database.models import GsBind
async def get_qrcode_base64(url: str, path: Path, bot_id: str) -> bytes:
@ -132,61 +131,20 @@ async def qrcode_login(bot: Bot, ev: Event, user_id: str) -> str:
if isinstance(ck, int):
return await send_msg('[登录]获取CK失败...')
ck = ck['cookie_token']
cookie_check = f'account_id={account_id};cookie_token={ck}'
get_uid = await mys_api.get_mihoyo_bbs_info(account_id, cookie_check)
# 剔除除了原神/星铁之外的其他游戏
im = None
uid_check = sruid_check = None
if isinstance(get_uid, List):
for i in get_uid:
if i['game_id'] == 2:
uid_check = i['game_role_id']
elif i['game_id'] == 6:
sruid_check = i['game_role_id']
else:
if uid_check or sruid_check:
pass
else:
im = f'[登录]你的米游社账号{account_id}尚未绑定原神账号,请前往米游社操作!'
return await send_msg(im)
else:
im = '[登录]请求失败, 请稍后再试...'
return await send_msg(im)
uid_bind_list = (
await GsBind.get_uid_list_by_game(user_id, ev.bot_id) or []
)
sruid_bind_list = (
await GsBind.get_uid_list_by_game(user_id, ev.bot_id, 'sr') or []
)
# 没有在gsuid绑定uid的情况
if not (uid_bind_list or sruid_bind_list):
logger.warning('[登录]game_token获取失败')
im = '你还没有绑定uid, 请输入[绑定uid123456]绑定你的uid, 再发送[扫码登录]进行绑定'
return await send_msg(im)
if isinstance(cookie_token, int):
return await send_msg('[登录]获取CK失败...')
# 比对gsuid数据库和扫码登陆获取到的uid
if (
uid_check in uid_bind_list
or sruid_check in sruid_bind_list
or account_id in uid_bind_list
):
return SimpleCookie(
{
'stoken_v2': stoken_data['token']['token'],
'stuid': stoken_data['user_info']['aid'],
'mid': stoken_data['user_info']['mid'],
'cookie_token': cookie_token['cookie_token'],
}
).output(header='', sep=';')
else:
logger.warning('[登录]game_token获取失败')
im = (
f'检测到扫码登录UID{uid_check}与绑定UID不同, '
'gametoken获取失败, 请重新发送[扫码登录]进行登录!'
)
return SimpleCookie(
{
'stoken_v2': stoken_data['token']['token'],
'stuid': stoken_data['user_info']['aid'],
'mid': stoken_data['user_info']['mid'],
'cookie_token': cookie_token['cookie_token'],
}
).output(header='', sep=';')
else:
logger.warning('[登录]game_token获取失败')
im = '[登录]game_token获取失败: 二维码已过期'
return await send_msg(im)

View File

@ -185,6 +185,45 @@ class BaseBotIDModel(BaseIDModel):
return 0
return -1
@classmethod
@with_session
async def update_data_by_xx(
cls,
session: AsyncSession,
by: Dict[str, Any],
**data,
) -> int:
'''📝简单介绍:
基类方法通过传入`by``**data`查找并更新数据
🌱参数:
🔹by (`Dict[str, Any]`)
根据该入参寻找相应数据
🔹**data
根据该入参修改数据
🚀使用范例:
`await GsUser.update_data_by_xx({'uid': '233'}, cookie=ck)`
返回值:
🔸`int`: 成功为`0`, 失败为`-1`
'''
sql = update(cls)
for i in by:
sql = sql.where(getattr(cls, i) == by[i])
if data is not None:
query = sql.values(**data)
query.execution_options(synchronize_session='fetch')
await session.execute(query)
await session.commit()
return 0
return -1
@classmethod
@with_session
async def update_data_by_uid(

View File

@ -10,6 +10,10 @@ class GsBind(Bind, table=True):
uid: Optional[str] = Field(default=None, title='原神UID')
sr_uid: Optional[str] = Field(default=None, title='星铁UID')
bb_uid: Optional[str] = Field(default=None, title='崩坏二UID')
bbb_uid: Optional[str] = Field(default=None, title='崩坏三UID')
zzz_uid: Optional[str] = Field(default=None, title='绝区零UID')
wd_uid: Optional[str] = Field(default=None, title='未定UID')
mys_id: Optional[str] = Field(default=None, title='米游社通行证')
@ -17,6 +21,10 @@ class GsUser(User, table=True):
__table_args__ = {'extend_existing': True}
uid: Optional[str] = Field(default=None, title='原神UID')
sr_uid: Optional[str] = Field(default=None, title='星铁UID')
bb_uid: Optional[str] = Field(default=None, title='崩坏二UID')
bbb_uid: Optional[str] = Field(default=None, title='崩坏三UID')
zzz_uid: Optional[str] = Field(default=None, title='绝区零UID')
wd_uid: Optional[str] = Field(default=None, title='未定UID')
mys_id: Optional[str] = Field(default=None, title='米游社通行证')
region: Optional[str] = Field(default=None, title='原神地区')
sr_region: Optional[str] = Field(default=None, title='星铁地区')
@ -26,6 +34,7 @@ class GsUser(User, table=True):
sr_sign_switch: str = Field(default='off', title='星铁自动签到')
fp: Optional[str] = Field(default=None, title='Fingerprint')
device_id: Optional[str] = Field(default=None, title='设备ID')
OAID: Optional[str] = Field(default=None, title='设备匿名标识符')
class GsCache(Cache, table=True):