2021-12-16 11:16:28 +08:00
from nonebot import on_command
2022-02-19 18:20:19 +08:00
from nonebot . adapters . onebot . v11 import MessageEvent , GroupMessageEvent , Message
from utils . utils import is_number
from . . _models import Genshin
2021-12-16 11:16:28 +08:00
from services . log import logger
2022-02-19 18:20:19 +08:00
from nonebot . params import CommandArg , Command
from typing import Tuple
2022-08-21 13:37:03 +08:00
from utils . http_utils import AsyncHttpx
import json
2021-12-16 11:16:28 +08:00
__zx_plugin_name__ = " 原神绑定 "
__plugin_usage__ = """
usage :
绑定原神uid等数据 , cookie极为重要 , 请谨慎绑定
* * 如果对拥有者不熟悉 , 并不建议添加cookie * *
该项目只会对cookie用于 ” 米游社签到 “ , “ 原神玩家查询 ” , “ 原神便笺查询 ”
指令 :
原神绑定uid [ uid ]
原神绑定米游社id [ mys_id ]
原神绑定cookie [ cookie ] # 该绑定请私聊
2021-12-26 22:14:01 +08:00
原神解绑
2021-12-16 11:16:28 +08:00
示例 : 原神绑定uid 92342233
如果不明白怎么获取cookie请输入 “ 原神绑定cookie ” 。
""" .strip()
__plugin_des__ = " 绑定自己的原神uid等 "
__plugin_cmd__ = [ " 原神绑定uid [uid] " , " 原神绑定米游社id [mys_id] " , " 原神绑定cookie [cookie] " , " 原神解绑 " ]
__plugin_type__ = ( " 原神相关 " , )
__plugin_version__ = 0.1
__plugin_author__ = " HibiKier "
__plugin_settings__ = {
" level " : 5 ,
" default_status " : True ,
" limit_superuser " : False ,
" cmd " : [ " 原神绑定 " ] ,
}
bind = on_command (
" 原神绑定uid " , aliases = { " 原神绑定米游社id " , " 原神绑定cookie " } , priority = 5 , block = True
)
unbind = on_command ( " 原神解绑 " , priority = 5 , block = True )
2022-08-21 13:37:03 +08:00
web_Api = " https://api-takumi.mihoyo.com "
bbs_Cookie_url = " https://webapi.account.mihoyo.com/Api/cookie_accountinfo_by_loginticket?login_ticket= {} "
bbs_Cookie_url2 = web_Api + " /auth/api/getMultiTokenByLoginTicket?login_ticket= {} &token_types=3&uid= {} "
2021-12-16 11:16:28 +08:00
@bind.handle ( )
2022-02-19 18:20:19 +08:00
async def _ ( event : MessageEvent , cmd : Tuple [ str , . . . ] = Command ( ) , arg : Message = CommandArg ( ) ) :
cmd = cmd [ 0 ]
msg = arg . extract_plain_text ( ) . strip ( )
if cmd in [ " 原神绑定uid " , " 原神绑定米游社id " ] :
2021-12-16 11:16:28 +08:00
if not is_number ( msg ) :
await bind . finish ( " uid/id必须为纯数字! " , at_senders = True )
msg = int ( msg )
2022-02-19 18:20:19 +08:00
if cmd == " 原神绑定uid " :
2021-12-16 11:16:28 +08:00
uid = await Genshin . get_user_uid ( event . user_id )
if uid :
await bind . finish ( f " 您已绑定过uid: { uid } , 如果希望更换uid, 请先发送原神解绑" )
flag = await Genshin . add_uid ( event . user_id , msg )
if not flag :
await bind . finish ( " 添加失败, 该uid可能已存在... " )
_x = f " 已成功添加原神uid: { msg } "
2022-02-19 18:20:19 +08:00
elif cmd == " 原神绑定米游社id " :
2021-12-16 11:16:28 +08:00
uid = await Genshin . get_user_uid ( event . user_id )
if not uid :
await bind . finish ( " 请先绑定原神uid.. " )
await Genshin . set_mys_id ( uid , msg )
_x = f " 已成功为uid: { uid } 设置米游社id: { msg } "
else :
if not msg :
2022-08-05 22:32:15 +08:00
await bind . finish ( """ 私聊发送!!
1. 以无痕模式打开浏览器 ( Edge请新建InPrivate窗口 )
2. 打开http : / / bbs . mihoyo . com / ys / 并登陆
3. 登陆后打开http : / / user . mihoyo . com / 进行登陆
4. 按下F12 , 打开控制台 , 输入以下命令 :
var cookie = document . cookie ; var ask = confirm ( ' Cookie: ' + cookie + ' \\ n \\ nDo you want to copy the cookie to the clipboard? ' ) ; if ( ask == true ) { copy ( cookie ) ; msg = cookie } else { msg = ' Cancel ' }
5. 私聊发送 : 原神绑定cookie 刚刚复制的cookie """ )
2021-12-16 11:16:28 +08:00
if isinstance ( event , GroupMessageEvent ) :
await bind . finish ( " 请立即撤回你的消息并私聊发送! " )
uid = await Genshin . get_user_uid ( event . user_id )
if not uid :
await bind . finish ( " 请先绑定原神uid.. " )
2022-02-09 20:05:49 +08:00
if msg . startswith ( ' " ' ) or msg . startswith ( " ' " ) :
2021-12-16 11:16:28 +08:00
msg = msg [ 1 : ]
2022-02-09 20:05:49 +08:00
if msg . endswith ( ' " ' ) or msg . endswith ( " ' " ) :
2021-12-16 11:16:28 +08:00
msg = msg [ : - 1 ]
await Genshin . set_cookie ( uid , msg )
2022-08-21 13:37:03 +08:00
cookie = msg
# 用: 代替=, ,代替;
cookie = ' { " ' + cookie . replace ( ' = ' , ' " : " ' ) . replace ( " ; " , ' " , " ' ) + ' " } '
print ( cookie )
cookie_json = json . loads ( cookie )
print ( cookie_json )
2022-08-22 00:40:51 +08:00
if ' login_ticket ' not in cookie_json :
2022-08-22 20:39:03 +08:00
await bind . finish ( " 请发送正确完整的cookie! " )
2022-08-21 13:37:03 +08:00
login_ticket = cookie_json [ ' login_ticket ' ]
# try:
res = await AsyncHttpx . get ( url = bbs_Cookie_url . format ( login_ticket ) )
res . encoding = " utf-8 "
data = json . loads ( res . text )
print ( data )
if " 成功 " in data [ " data " ] [ " msg " ] :
stuid = str ( data [ " data " ] [ " cookie_info " ] [ " account_id " ] )
res = await AsyncHttpx . get ( url = bbs_Cookie_url2 . format (
login_ticket , stuid ) )
res . encoding = " utf-8 "
data = json . loads ( res . text )
stoken = data [ " data " ] [ " list " ] [ 0 ] [ " token " ]
# await Genshin.set_cookie(uid, cookie)
await Genshin . set_stoken ( uid , stoken )
await Genshin . set_stuid ( uid , stuid )
await Genshin . set_login_ticket ( uid , login_ticket )
# except Exception as e:
# await bind.finish("获取登陆信息失败, 请检查cookie是否正确或更新cookie")
elif data [ " data " ] [ " msg " ] == " 登录信息已失效,请重新登录 " :
await bind . finish ( " 登录信息失效, 请重新获取最新cookie进行绑定 " )
2021-12-16 11:16:28 +08:00
_x = f " 已成功为uid: { uid } 设置cookie "
2022-02-19 18:20:19 +08:00
if isinstance ( event , GroupMessageEvent ) :
await Genshin . set_bind_group ( uid , event . group_id )
2021-12-16 11:16:28 +08:00
await bind . send ( _x )
logger . info (
f " (USER { event . user_id } , "
f " GROUP { event . group_id if isinstance ( event , GroupMessageEvent ) else ' private ' } ) "
2022-02-19 18:20:19 +08:00
f " { cmd } : { msg } "
2021-12-16 11:16:28 +08:00
)
@unbind.handle ( )
2022-02-19 18:20:19 +08:00
async def _ ( event : MessageEvent ) :
2021-12-16 11:16:28 +08:00
if await Genshin . delete_user ( event . user_id ) :
await unbind . send ( " 用户数据删除成功... " )
logger . info (
f " (USER { event . user_id } , GROUP "
f " { event . group_id if isinstance ( event , GroupMessageEvent ) else ' private ' } ) "
f " 原神解绑 "
)
else :
await unbind . send ( " 该用户数据不存在.. " )