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 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"',
|
||||
|
@ -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
|
||||
|
@ -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(
|
||||
|
@ -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)
|
||||
|
@ -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(
|
||||
|
@ -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):
|
||||
|
Loading…
x
Reference in New Issue
Block a user