From c4e259892cb7b6abb191ef9738fd7d093ddc29b7 Mon Sep 17 00:00:00 2001 From: wuchangjun233 <34960661+wuchangjun233@users.noreply.github.com> Date: Sat, 8 Jul 2023 21:43:59 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D=E4=B8=AA?= =?UTF-8?q?=E5=88=AB=E5=B9=B3=E5=8F=B0=E7=99=BB=E5=BD=95=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E5=8F=91=E9=80=81=20(#21)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gsuid_core/utils/cookie_manager/qrlogin.py | 45 +++++++++++----------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/gsuid_core/utils/cookie_manager/qrlogin.py b/gsuid_core/utils/cookie_manager/qrlogin.py index 2f68c60..20250fb 100644 --- a/gsuid_core/utils/cookie_manager/qrlogin.py +++ b/gsuid_core/utils/cookie_manager/qrlogin.py @@ -1,5 +1,6 @@ import io import json +import base64 import asyncio from pathlib import Path 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.database.api import DBSqla -disnote = '''免责声明:您将通过扫码完成获取米游社sk以及ck。 -本Bot将不会保存您的登录状态。 -我方仅提供米游社查询及相关游戏内容服务 -若您的账号封禁、被盗等处罚与我方无关。 -害怕风险请勿扫码! -''' - 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: 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: img_byte = io.BytesIO() 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'] ) if isinstance(status_data, int): - logger.warning('二维码已过期') + logger.warning('[登录]二维码已过期') return False, None if status_data['stat'] == 'Scanned': if not scanned: - logger.info('二维码已扫描') + logger.info('[登录]二维码已扫描') scanned = True continue if status_data['stat'] == 'Confirmed': - logger.info('二维码已确认') + logger.info('[登录]二维码已确认') break 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() if isinstance(code_data, int): - return await send_msg('链接创建失败...') + return await send_msg('[登录]链接创建失败...') 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( MessageSegment.text( '免责声明:您将通过扫码完成获取米游社sk以及ck。\n' - '本Bot将不会保存您的登录状态。\n' '我方仅提供米游社查询及相关游戏内容服务,\n' '若您的账号封禁、被盗等处罚与我方无关。\n' '害怕风险请勿扫码~' ) ) - await bot.send(im) + await bot.send(MessageSegment.node(im)) if path.exists(): 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) if status: 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) stoken_data = await mys_api.get_stoken_by_game_token( account_id=int(game_token_data['uid']), game_token=game_token_data['token'], ) if isinstance(stoken_data, int): - return await send_msg('获取SK失败...') + return await send_msg('[登录]获取SK失败...') account_id = game_token_data['uid'] stoken = stoken_data['token']['token'] 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 ) if isinstance(ck, int): - return await send_msg('获取CK失败...') + 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) @@ -152,21 +151,21 @@ async def qrcode_login(bot: Bot, ev: Event, user_id: str) -> str: if uid_check or sruid_check: pass else: - im = f'你的米游社账号{account_id}尚未绑定原神账号,请前往米游社操作!' + im = f'[登录]你的米游社账号{account_id}尚未绑定原神账号,请前往米游社操作!' return await send_msg(im) else: - im = '请求失败, 请稍后再试...' + im = '[登录]请求失败, 请稍后再试...' return await send_msg(im) uid_bind_list = await sqla.get_bind_uid_list(user_id) sruid_bind_list = await sqla.get_bind_sruid_list(user_id) # 没有在gsuid绑定uid的情况 if not (uid_bind_list or sruid_bind_list): - logger.warning('game_token获取失败') + logger.warning('[登录]game_token获取失败') im = '你还没有绑定uid, 请输入[绑定uid123456]绑定你的uid, 再发送[扫码登录]进行绑定' return await send_msg(im) if isinstance(cookie_token, int): - return await send_msg('获取CK失败...') + return await send_msg('[登录]获取CK失败...') # 比对gsuid数据库和扫码登陆获取到的uid if ( 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=';') else: - logger.warning('game_token获取失败') + logger.warning('[登录]game_token获取失败') im = ( f'检测到扫码登录UID{uid_check}与绑定UID不同, ' 'gametoken获取失败, 请重新发送[扫码登录]进行登录!' ) else: - logger.warning('game_token获取失败') - im = 'game_token获取失败: 二维码已过期' + logger.warning('[登录]game_token获取失败') + im = '[登录]game_token获取失败: 二维码已过期' return await send_msg(im)