🔥 Remove qlogin

This commit is contained in:
xtaodada 2023-11-08 22:44:35 +08:00
parent 44a01bffd1
commit e146ca5c16
Signed by: xtaodada
GPG Key ID: 4CBB3F4FA8C85659

View File

@ -1,16 +1,11 @@
import asyncio
from datetime import datetime
from io import BytesIO
from typing import Dict, Optional
import qrcode
from arkowrapper import ArkoWrapper
from qrcode.image.pure import PyPNGImage
from simnet import GenshinClient, Region
from simnet.errors import DataNotPublic, InvalidCookies, BadRequest as SimnetBadRequest
from simnet.models.lab.record import Account
from telegram import ReplyKeyboardMarkup, ReplyKeyboardRemove, TelegramObject, Update
from telegram.constants import ParseMode
from telegram.ext import CallbackContext, ConversationHandler, filters
from telegram.helpers import escape_markdown
@ -134,59 +129,6 @@ class AccountCookiesPlugin(Plugin.Conversation):
await message.reply_markdown_v2(text, reply_markup=ReplyKeyboardMarkup(reply_keyboard, one_time_keyboard=True))
return CHECK_SERVER
@staticmethod
def generate_qrcode(url: str) -> bytes:
qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4)
qr.add_data(url)
qr.make(fit=True)
img = qr.make_image(image_factory=PyPNGImage, fill_color="black", back_color="white")
bio = BytesIO()
img.save(bio)
return bio.getvalue()
@conversation.entry_point
@handler.command("qlogin", filters=filters.ChatType.PRIVATE, block=False)
async def qrcode_login(self, update: Update, context: CallbackContext):
user = update.effective_user
message = update.effective_message
logger.info("用户 %s[%s] 绑定账号命令请求", user.full_name, user.id)
account_cookies_plugin_data: AccountCookiesPluginData = context.chat_data.get("account_cookies_plugin_data")
if account_cookies_plugin_data is None:
account_cookies_plugin_data = AccountCookiesPluginData()
context.chat_data["account_cookies_plugin_data"] = account_cookies_plugin_data
else:
account_cookies_plugin_data.reset()
account_cookies_plugin_data.region = RegionEnum.HYPERION
async with GenshinClient(region=Region.CHINESE) as client:
url, ticket = await client.gen_login_qrcode()
data = self.generate_qrcode(url)
text = f"你好 {user.mention_html()} 该绑定方法仅支持国服请在3分钟内使用米游社扫码并确认进行绑定。"
await message.reply_photo(data, caption=text, parse_mode=ParseMode.HTML)
for _ in range(20):
await asyncio.sleep(10)
try:
if game_token := await client.check_login_qrcode(ticket):
stoken_v2, mid = await client.get_stoken_v2_and_mid_by_game_token(game_token)
cookie_token = await client.get_cookie_token_by_stoken()
ltoken = await client.get_ltoken_by_stoken()
cookies = {
"stuid": str(client.account_id),
"ltuid": str(client.account_id),
"account_id": str(client.account_id),
"stoken": stoken_v2,
"mid": mid,
"cookie_token": cookie_token,
"ltoken": ltoken,
}
account_cookies_plugin_data.cookies = cookies
return await self.check_cookies(update, context)
except SimnetBadRequest as e:
if e.ret_code == -106:
break
raise e
await message.reply_text("可能是验证码已过期或者你没有同意授权,请重新发送命令进行绑定。")
return ConversationHandler.END
@conversation.state(state=CHECK_SERVER)
@handler.message(filters=filters.TEXT & ~filters.COMMAND, block=False)
async def check_server(self, update: Update, context: CallbackContext) -> int: