原神扫码绑定的二维码改为发送图片链接,前提为开启CookieWeb

This commit is contained in:
CMHopeSunshine 2022-12-30 18:23:26 +08:00
parent b614a284d0
commit 1daea6a038

View File

@ -6,15 +6,19 @@ import json
import random import random
import time import time
import uuid import uuid
import base64
from hashlib import md5 from hashlib import md5
from io import BytesIO from io import BytesIO
from string import ascii_letters from string import ascii_letters
from string import digits from string import digits
import qrcode import qrcode
from nonebot import on_command, get_bot from fastapi import FastAPI
from fastapi.responses import StreamingResponse
from nonebot import on_command, get_bot, get_app
from nonebot.adapters.onebot.v11 import Bot, MessageSegment, MessageEvent, GroupMessageEvent from nonebot.adapters.onebot.v11 import Bot, MessageSegment, MessageEvent, GroupMessageEvent
from LittlePaimon.config import config
from LittlePaimon.database.models import PrivateCookie, LastQuery from LittlePaimon.database.models import PrivateCookie, LastQuery
from LittlePaimon.utils import NICKNAME from LittlePaimon.utils import NICKNAME
from LittlePaimon.utils.requests import aiorequests from LittlePaimon.utils.requests import aiorequests
@ -75,7 +79,7 @@ def generate_qrcode(url):
img = qr.make_image(fill_color='black', back_color='white') img = qr.make_image(fill_color='black', back_color='white')
bio = BytesIO() bio = BytesIO()
img.save(bio) img.save(bio)
return MessageSegment.image(bio) return f'base64://{base64.b64encode(bio.getvalue()).decode()}'
async def create_login_data(): async def create_login_data():
@ -124,7 +128,9 @@ async def _(event: MessageEvent): # sourcery skip: use-fstring-for-concatenatio
await qrcode_bind.finish('你已经在绑定中了,请扫描上一次的二维码') await qrcode_bind.finish('你已经在绑定中了,请扫描上一次的二维码')
login_data = await create_login_data() login_data = await create_login_data()
running_login_data[str(event.user_id)] = login_data running_login_data[str(event.user_id)] = login_data
img = generate_qrcode(login_data['url']) img_b64 = generate_qrcode(login_data['url'])
running_login_data[str(event.user_id)]['img_b64'] = img_b64
img = f'二维码链接:{config.CookieWeb_url}/qrcode?user_id={event.user_id}' if config.CookieWeb_enable else MessageSegment.image(img_b64)
msg_data = await qrcode_bind.send( msg_data = await qrcode_bind.send(
img + f'\n请在3分钟内使用米游社扫码并确认进行绑定。\n注意1.扫码即代表你同意将Cookie信息授权给{NICKNAME}\n2.扫码时会提示登录原神,实际不会把你顶掉原神\n3.其他人请不要乱扫否则会将你的账号绑到TA身上', img + f'\n请在3分钟内使用米游社扫码并确认进行绑定。\n注意1.扫码即代表你同意将Cookie信息授权给{NICKNAME}\n2.扫码时会提示登录原神,实际不会把你顶掉原神\n3.其他人请不要乱扫否则会将你的账号绑到TA身上',
at_sender=True) at_sender=True)
@ -190,3 +196,14 @@ async def check_qrcode():
if not running_login_data: if not running_login_data:
break break
await asyncio.sleep(1) await asyncio.sleep(1)
app: FastAPI = get_app()
@app.get('/LittlePaimon/cookie/qrcode')
async def qrcode_img_url(user_id: str):
if user_id not in running_login_data:
return {'status': 'error', 'msg': '二维码不存在'}
img_base64 = running_login_data[user_id]['img_b64'].lstrip('base64://')
return StreamingResponse(BytesIO(base64.b64decode(img_base64)), media_type='image/png')