mirror of
https://github.com/Genshin-bots/gsuid_core.git
synced 2025-05-12 06:55:49 +08:00
🐛 修复个别平台登录图片发送 (#21)
This commit is contained in:
parent
c58cb7f32e
commit
c4e259892c
@ -1,5 +1,6 @@
|
|||||||
import io
|
import io
|
||||||
import json
|
import json
|
||||||
|
import base64
|
||||||
import asyncio
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from http.cookies import SimpleCookie
|
from http.cookies import SimpleCookie
|
||||||
@ -17,13 +18,6 @@ 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.api import DBSqla
|
from gsuid_core.utils.database.api import DBSqla
|
||||||
|
|
||||||
disnote = '''免责声明:您将通过扫码完成获取米游社sk以及ck。
|
|
||||||
本Bot将不会保存您的登录状态。
|
|
||||||
我方仅提供米游社查询及相关游戏内容服务
|
|
||||||
若您的账号封禁、被盗等处罚与我方无关。
|
|
||||||
害怕风险请勿扫码!
|
|
||||||
'''
|
|
||||||
|
|
||||||
get_sqla = DBSqla().get_sqla
|
get_sqla = DBSqla().get_sqla
|
||||||
|
|
||||||
|
|
||||||
@ -51,6 +45,12 @@ async def get_qrcode_base64(url: str, path: Path, bot_id: str) -> bytes:
|
|||||||
)
|
)
|
||||||
async with aiofiles.open(path, 'rb') as fp:
|
async with aiofiles.open(path, 'rb') as fp:
|
||||||
img = await fp.read()
|
img = await fp.read()
|
||||||
|
if bot_id == 'onebot_v12':
|
||||||
|
img_byte = io.BytesIO()
|
||||||
|
img.save(img_byte, format='PNG') # type: ignore
|
||||||
|
img_byte = img_byte.getvalue()
|
||||||
|
img = f'base64://{base64.b64encode(img_byte).decode()}'
|
||||||
|
return img # type: ignore
|
||||||
else:
|
else:
|
||||||
img_byte = io.BytesIO()
|
img_byte = io.BytesIO()
|
||||||
img.save(img_byte, format='PNG') # type: ignore
|
img.save(img_byte, format='PNG') # type: ignore
|
||||||
@ -69,15 +69,15 @@ async def refresh(
|
|||||||
code_data['app_id'], code_data['ticket'], code_data['device']
|
code_data['app_id'], code_data['ticket'], code_data['device']
|
||||||
)
|
)
|
||||||
if isinstance(status_data, int):
|
if isinstance(status_data, int):
|
||||||
logger.warning('二维码已过期')
|
logger.warning('[登录]二维码已过期')
|
||||||
return False, None
|
return False, None
|
||||||
if status_data['stat'] == 'Scanned':
|
if status_data['stat'] == 'Scanned':
|
||||||
if not scanned:
|
if not scanned:
|
||||||
logger.info('二维码已扫描')
|
logger.info('[登录]二维码已扫描')
|
||||||
scanned = True
|
scanned = True
|
||||||
continue
|
continue
|
||||||
if status_data['stat'] == 'Confirmed':
|
if status_data['stat'] == 'Confirmed':
|
||||||
logger.info('二维码已确认')
|
logger.info('[登录]二维码已确认')
|
||||||
break
|
break
|
||||||
return True, json.loads(status_data['payload']['raw'])
|
return True, json.loads(status_data['payload']['raw'])
|
||||||
|
|
||||||
@ -91,7 +91,7 @@ async def qrcode_login(bot: Bot, ev: Event, user_id: str) -> str:
|
|||||||
|
|
||||||
code_data = await mys_api.create_qrcode_url()
|
code_data = await mys_api.create_qrcode_url()
|
||||||
if isinstance(code_data, int):
|
if isinstance(code_data, int):
|
||||||
return await send_msg('链接创建失败...')
|
return await send_msg('[登录]链接创建失败...')
|
||||||
|
|
||||||
path = Path(__file__).parent / f'{user_id}.gif'
|
path = Path(__file__).parent / f'{user_id}.gif'
|
||||||
|
|
||||||
@ -105,13 +105,12 @@ async def qrcode_login(bot: Bot, ev: Event, user_id: str) -> str:
|
|||||||
im.append(
|
im.append(
|
||||||
MessageSegment.text(
|
MessageSegment.text(
|
||||||
'免责声明:您将通过扫码完成获取米游社sk以及ck。\n'
|
'免责声明:您将通过扫码完成获取米游社sk以及ck。\n'
|
||||||
'本Bot将不会保存您的登录状态。\n'
|
|
||||||
'我方仅提供米游社查询及相关游戏内容服务,\n'
|
'我方仅提供米游社查询及相关游戏内容服务,\n'
|
||||||
'若您的账号封禁、被盗等处罚与我方无关。\n'
|
'若您的账号封禁、被盗等处罚与我方无关。\n'
|
||||||
'害怕风险请勿扫码~'
|
'害怕风险请勿扫码~'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
await bot.send(im)
|
await bot.send(MessageSegment.node(im))
|
||||||
|
|
||||||
if path.exists():
|
if path.exists():
|
||||||
path.unlink()
|
path.unlink()
|
||||||
@ -119,14 +118,14 @@ async def qrcode_login(bot: Bot, ev: Event, user_id: str) -> str:
|
|||||||
status, game_token_data = await refresh(code_data)
|
status, game_token_data = await refresh(code_data)
|
||||||
if status:
|
if status:
|
||||||
assert game_token_data is not None # 骗过 pyright
|
assert game_token_data is not None # 骗过 pyright
|
||||||
logger.info('game_token获取成功')
|
logger.info('[登录]game_token获取成功')
|
||||||
cookie_token = await mys_api.get_cookie_token(**game_token_data)
|
cookie_token = await mys_api.get_cookie_token(**game_token_data)
|
||||||
stoken_data = await mys_api.get_stoken_by_game_token(
|
stoken_data = await mys_api.get_stoken_by_game_token(
|
||||||
account_id=int(game_token_data['uid']),
|
account_id=int(game_token_data['uid']),
|
||||||
game_token=game_token_data['token'],
|
game_token=game_token_data['token'],
|
||||||
)
|
)
|
||||||
if isinstance(stoken_data, int):
|
if isinstance(stoken_data, int):
|
||||||
return await send_msg('获取SK失败...')
|
return await send_msg('[登录]获取SK失败...')
|
||||||
account_id = game_token_data['uid']
|
account_id = game_token_data['uid']
|
||||||
stoken = stoken_data['token']['token']
|
stoken = stoken_data['token']['token']
|
||||||
mid = stoken_data['user_info']['mid']
|
mid = stoken_data['user_info']['mid']
|
||||||
@ -135,7 +134,7 @@ async def qrcode_login(bot: Bot, ev: Event, user_id: str) -> str:
|
|||||||
stoken, account_id, app_cookie
|
stoken, account_id, app_cookie
|
||||||
)
|
)
|
||||||
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}'
|
cookie_check = f'account_id={account_id};cookie_token={ck}'
|
||||||
get_uid = await mys_api.get_mihoyo_bbs_info(account_id, cookie_check)
|
get_uid = await mys_api.get_mihoyo_bbs_info(account_id, cookie_check)
|
||||||
@ -152,21 +151,21 @@ async def qrcode_login(bot: Bot, ev: Event, user_id: str) -> str:
|
|||||||
if uid_check or sruid_check:
|
if uid_check or sruid_check:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
im = f'你的米游社账号{account_id}尚未绑定原神账号,请前往米游社操作!'
|
im = f'[登录]你的米游社账号{account_id}尚未绑定原神账号,请前往米游社操作!'
|
||||||
return await send_msg(im)
|
return await send_msg(im)
|
||||||
else:
|
else:
|
||||||
im = '请求失败, 请稍后再试...'
|
im = '[登录]请求失败, 请稍后再试...'
|
||||||
return await send_msg(im)
|
return await send_msg(im)
|
||||||
|
|
||||||
uid_bind_list = await sqla.get_bind_uid_list(user_id)
|
uid_bind_list = await sqla.get_bind_uid_list(user_id)
|
||||||
sruid_bind_list = await sqla.get_bind_sruid_list(user_id)
|
sruid_bind_list = await sqla.get_bind_sruid_list(user_id)
|
||||||
# 没有在gsuid绑定uid的情况
|
# 没有在gsuid绑定uid的情况
|
||||||
if not (uid_bind_list or sruid_bind_list):
|
if not (uid_bind_list or sruid_bind_list):
|
||||||
logger.warning('game_token获取失败')
|
logger.warning('[登录]game_token获取失败')
|
||||||
im = '你还没有绑定uid, 请输入[绑定uid123456]绑定你的uid, 再发送[扫码登录]进行绑定'
|
im = '你还没有绑定uid, 请输入[绑定uid123456]绑定你的uid, 再发送[扫码登录]进行绑定'
|
||||||
return await send_msg(im)
|
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
|
# 比对gsuid数据库和扫码登陆获取到的uid
|
||||||
if (
|
if (
|
||||||
uid_check in uid_bind_list
|
uid_check in uid_bind_list
|
||||||
@ -182,12 +181,12 @@ async def qrcode_login(bot: Bot, ev: Event, user_id: str) -> str:
|
|||||||
}
|
}
|
||||||
).output(header='', sep=';')
|
).output(header='', sep=';')
|
||||||
else:
|
else:
|
||||||
logger.warning('game_token获取失败')
|
logger.warning('[登录]game_token获取失败')
|
||||||
im = (
|
im = (
|
||||||
f'检测到扫码登录UID{uid_check}与绑定UID不同, '
|
f'检测到扫码登录UID{uid_check}与绑定UID不同, '
|
||||||
'gametoken获取失败, 请重新发送[扫码登录]进行登录!'
|
'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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user