mirror of
https://github.com/Genshin-bots/gsuid_core.git
synced 2025-05-12 06:55:49 +08:00
✨ 为数据库模型加入更多游戏UID列
This commit is contained in:
parent
80622adf01
commit
f277cecf0a
@ -50,6 +50,15 @@ exec_list.extend(
|
|||||||
'ALTER TABLE GsUser ADD COLUMN sr_region TEXT',
|
'ALTER TABLE GsUser ADD COLUMN sr_region TEXT',
|
||||||
'ALTER TABLE GsUser ADD COLUMN fp TEXT',
|
'ALTER TABLE GsUser ADD COLUMN fp TEXT',
|
||||||
'ALTER TABLE GsUser ADD COLUMN device_id 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_sign_switch TEXT DEFAULT "off"',
|
||||||
'ALTER TABLE GsUser ADD COLUMN sr_push_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"',
|
'ALTER TABLE GsUser ADD COLUMN draw_switch TEXT DEFAULT "off"',
|
||||||
|
@ -161,7 +161,7 @@ class BaseMysApi:
|
|||||||
self, uid: str, seed_id: str, seed_time: str, model_name: str
|
self, uid: str, seed_id: str, seed_time: str, model_name: str
|
||||||
) -> str:
|
) -> str:
|
||||||
device_id = await self.get_user_device_id(uid)
|
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 = {
|
body = {
|
||||||
'device_id': self.generate_seed(16),
|
'device_id': self.generate_seed(16),
|
||||||
'seed_id': seed_id, # uuid4
|
'seed_id': seed_id, # uuid4
|
||||||
|
@ -116,7 +116,9 @@ async def _deal_ck(bot_id: str, mes: str, user_id: str) -> str:
|
|||||||
simp_dict = SimpleCookie(mes)
|
simp_dict = SimpleCookie(mes)
|
||||||
uid = await GsBind.get_uid_by_game(user_id, bot_id)
|
uid = await GsBind.get_uid_by_game(user_id, bot_id)
|
||||||
sr_uid = await GsBind.get_uid_by_game(user_id, bot_id, 'sr')
|
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 and sr_uid is None:
|
||||||
if 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']
|
uid_bind = i['game_role_id']
|
||||||
elif i['game_id'] == 6:
|
elif i['game_id'] == 6:
|
||||||
sr_uid_bind = i['game_role_id']
|
sr_uid_bind = i['game_role_id']
|
||||||
if uid_bind and sr_uid_bind:
|
elif i['game_id'] == 8:
|
||||||
break
|
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:
|
else:
|
||||||
if not (uid_bind or sr_uid_bind):
|
if not (
|
||||||
return f'你的米游社账号{account_id}尚未绑定原神/星铁账号,请前往米游社操作!'
|
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:
|
except Exception:
|
||||||
pass
|
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)
|
nd = await mys_api.ck_in_new_device(uid, app_cookie)
|
||||||
|
|
||||||
# 往数据库添加内容
|
if await GsUser.data_exist(mys_id=account_id):
|
||||||
if uid_bind and await GsUser.user_exists(uid_bind):
|
await GsUser.update_data_by_xx(
|
||||||
await GsUser.update_data_by_uid(
|
{'mys_id': account_id},
|
||||||
uid_bind,
|
bot_id=bot_id,
|
||||||
bot_id,
|
|
||||||
cookie=account_cookie,
|
cookie=account_cookie,
|
||||||
status=None,
|
status=None,
|
||||||
stoken=app_cookie,
|
stoken=app_cookie,
|
||||||
sr_uid=sr_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,
|
||||||
fp=nd[0],
|
fp=nd[0],
|
||||||
device_id=nd[1],
|
device_id=nd[1],
|
||||||
)
|
OAID=None,
|
||||||
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],
|
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
await GsUser.insert_data(
|
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,
|
bot_id=bot_id,
|
||||||
uid=uid_bind,
|
uid=uid_bind,
|
||||||
sr_uid=sr_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,
|
mys_id=account_id,
|
||||||
cookie=account_cookie,
|
cookie=account_cookie,
|
||||||
stoken=app_cookie if app_cookie else None,
|
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],
|
device_id=nd[1],
|
||||||
sr_push_switch='off',
|
sr_push_switch='off',
|
||||||
sr_sign_switch='off',
|
sr_sign_switch='off',
|
||||||
|
OAID=None,
|
||||||
)
|
)
|
||||||
|
|
||||||
im_list.append(
|
im_list.append(
|
||||||
|
@ -4,7 +4,7 @@ import base64
|
|||||||
import asyncio
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from http.cookies import SimpleCookie
|
from http.cookies import SimpleCookie
|
||||||
from typing import Any, List, Tuple, Union, Literal
|
from typing import Any, Tuple, Union, Literal
|
||||||
|
|
||||||
import qrcode
|
import qrcode
|
||||||
import aiofiles
|
import aiofiles
|
||||||
@ -16,7 +16,6 @@ from gsuid_core.models import Event
|
|||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.segment import MessageSegment
|
from gsuid_core.segment import MessageSegment
|
||||||
from gsuid_core.utils.api.mys_api import mys_api
|
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:
|
async def get_qrcode_base64(url: str, path: Path, bot_id: str) -> bytes:
|
||||||
@ -132,46 +131,10 @@ async def qrcode_login(bot: Bot, ev: Event, user_id: str) -> str:
|
|||||||
if isinstance(ck, int):
|
if isinstance(ck, int):
|
||||||
return await send_msg('[登录]获取CK失败...')
|
return await send_msg('[登录]获取CK失败...')
|
||||||
ck = ck['cookie_token']
|
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):
|
if isinstance(cookie_token, int):
|
||||||
return await send_msg('[登录]获取CK失败...')
|
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(
|
return SimpleCookie(
|
||||||
{
|
{
|
||||||
'stoken_v2': stoken_data['token']['token'],
|
'stoken_v2': stoken_data['token']['token'],
|
||||||
@ -180,13 +143,8 @@ async def qrcode_login(bot: Bot, ev: Event, user_id: str) -> str:
|
|||||||
'cookie_token': cookie_token['cookie_token'],
|
'cookie_token': cookie_token['cookie_token'],
|
||||||
}
|
}
|
||||||
).output(header='', sep=';')
|
).output(header='', sep=';')
|
||||||
else:
|
|
||||||
logger.warning('[登录]game_token获取失败')
|
|
||||||
im = (
|
|
||||||
f'检测到扫码登录UID{uid_check}与绑定UID不同, '
|
|
||||||
'gametoken获取失败, 请重新发送[扫码登录]进行登录!'
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
logger.warning('[登录]game_token获取失败')
|
logger.warning('[登录]game_token获取失败')
|
||||||
im = '[登录]game_token获取失败: 二维码已过期'
|
im = '[登录]game_token获取失败: 二维码已过期'
|
||||||
|
|
||||||
return await send_msg(im)
|
return await send_msg(im)
|
||||||
|
@ -185,6 +185,45 @@ class BaseBotIDModel(BaseIDModel):
|
|||||||
return 0
|
return 0
|
||||||
return -1
|
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
|
@classmethod
|
||||||
@with_session
|
@with_session
|
||||||
async def update_data_by_uid(
|
async def update_data_by_uid(
|
||||||
|
@ -10,6 +10,10 @@ class GsBind(Bind, table=True):
|
|||||||
|
|
||||||
uid: Optional[str] = Field(default=None, title='原神UID')
|
uid: Optional[str] = Field(default=None, title='原神UID')
|
||||||
sr_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='米游社通行证')
|
mys_id: Optional[str] = Field(default=None, title='米游社通行证')
|
||||||
|
|
||||||
|
|
||||||
@ -17,6 +21,10 @@ class GsUser(User, table=True):
|
|||||||
__table_args__ = {'extend_existing': True}
|
__table_args__ = {'extend_existing': True}
|
||||||
uid: Optional[str] = Field(default=None, title='原神UID')
|
uid: Optional[str] = Field(default=None, title='原神UID')
|
||||||
sr_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='米游社通行证')
|
mys_id: Optional[str] = Field(default=None, title='米游社通行证')
|
||||||
region: Optional[str] = Field(default=None, title='原神地区')
|
region: Optional[str] = Field(default=None, title='原神地区')
|
||||||
sr_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='星铁自动签到')
|
sr_sign_switch: str = Field(default='off', title='星铁自动签到')
|
||||||
fp: Optional[str] = Field(default=None, title='Fingerprint')
|
fp: Optional[str] = Field(default=None, title='Fingerprint')
|
||||||
device_id: Optional[str] = Field(default=None, title='设备ID')
|
device_id: Optional[str] = Field(default=None, title='设备ID')
|
||||||
|
OAID: Optional[str] = Field(default=None, title='设备匿名标识符')
|
||||||
|
|
||||||
|
|
||||||
class GsCache(Cache, table=True):
|
class GsCache(Cache, table=True):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user