mirror of
https://github.com/xuthus83/LittlePaimon.git
synced 2024-10-21 16:27:15 +08:00
更正原神日历插件名字,新增云原神相关功能
This commit is contained in:
parent
e4f6c34cc7
commit
5c4b6a3f44
139
Paimon_CloudGenshin/__init__.py
Normal file
139
Paimon_CloudGenshin/__init__.py
Normal file
@ -0,0 +1,139 @@
|
||||
import json
|
||||
import re
|
||||
import uuid
|
||||
from typing import Union
|
||||
from nonebot import on_command, require, get_bot
|
||||
from nonebot.adapters.onebot.v11 import MessageEvent, Message, GroupMessageEvent
|
||||
from nonebot.params import CommandArg
|
||||
from .data_source import get_Info, get_Notification, check_token
|
||||
from LittlePaimon.utils.decorator import exception_handler
|
||||
from LittlePaimon.utils.file_handler import load_json, save_json
|
||||
from LittlePaimon.utils.config import config
|
||||
from LittlePaimon.utils.message_util import get_message_id
|
||||
|
||||
HELP_STR = '''
|
||||
云原神相关功能
|
||||
云原神 绑定/bind : 绑定云原神的token
|
||||
云原神 信息/info: 查询云原神账户信息
|
||||
'''.strip()
|
||||
|
||||
|
||||
cloud_ys = on_command('mhyy', aliases={'云原神', 'mhyy'}, priority=16, block=True)
|
||||
cloud_ys.__paimon_help__ = {
|
||||
"usage": "云原神",
|
||||
"introduce": "查询云原神账户信息, 绑定token进行签到",
|
||||
"priority": 99
|
||||
}
|
||||
scheduler = require('nonebot_plugin_apscheduler').scheduler
|
||||
uuid = str(uuid.uuid4())
|
||||
|
||||
|
||||
async def auto_sign(user_id, data):
|
||||
token = data['token']
|
||||
uuid = data['uuid']
|
||||
|
||||
if await check_token(uuid, token):
|
||||
""" 签到云原神 """
|
||||
d1 = await get_Notification(uuid, token)
|
||||
""" 获取免费时间 """
|
||||
d2 = await get_Info(uuid, token)
|
||||
""" 解析签到返回信息 """
|
||||
signInfo = json.loads(d1['data']['list'][0]['msg'])
|
||||
if d2['data']['free_time']['free_time'] == '600':
|
||||
await get_bot().send_private_msg(user_id=user_id, message='免费签到时长已达上限,无法继续签到')
|
||||
elif not signInfo:
|
||||
await get_bot().send_private_msg(user_id=user_id, message=f'签到成功~ {signInfo["msg"]}: {signInfo["num"]}分钟')
|
||||
await get_bot().send_private_msg(user_id=user_id, message='token已过期,请重新自行抓包并绑定')
|
||||
|
||||
|
||||
@cloud_ys.handle()
|
||||
@exception_handler()
|
||||
async def _(event: Union[GroupMessageEvent, MessageEvent], msg: Message = CommandArg(), uuid=uuid):
|
||||
param = msg.extract_plain_text().strip()
|
||||
user_id = str(event.user_id)
|
||||
data = load_json('user_data.json')
|
||||
|
||||
action = re.search(r'(?P<action>(信息|info)|(绑定|bind))', param)
|
||||
|
||||
if event.message_type == 'guild':
|
||||
await cloud_ys.finish('该功能不支持群组或频道推送哦~', at_sender=True)
|
||||
|
||||
if str(get_message_id(event)) not in config.paimon_cloudys_group:
|
||||
await cloud_ys.finish(f'尚未在群 {str(get_message_id(event))} 开启本功能')
|
||||
|
||||
if not param:
|
||||
await cloud_ys.finish('请输入具体指令或参数!', at_sender=True)
|
||||
else:
|
||||
if action.group('action') in ['绑定', 'bind']:
|
||||
match = re.search(r'oi=\d+', param.split(" ")[1])
|
||||
if match:
|
||||
uid = str(match.group()).split('=')[1]
|
||||
|
||||
data[user_id] = {
|
||||
'uid': uid,
|
||||
'uuid': uuid,
|
||||
'token': param.split(" ")[1]
|
||||
}
|
||||
|
||||
if scheduler.get_job('cloud_genshin_' + user_id):
|
||||
scheduler.remove_job("cloud_genshin_" + user_id)
|
||||
|
||||
""" 保存数据 """
|
||||
save_json(data, 'user_data.json')
|
||||
""" 添加推送任务 """
|
||||
scheduler.add_job(
|
||||
func=auto_sign,
|
||||
trigger='cron',
|
||||
hour=4,
|
||||
id="cloud_genshin_" + user_id,
|
||||
args=(user_id, data[user_id]),
|
||||
misfire_grace_time=10
|
||||
)
|
||||
await cloud_ys.finish(f'[UID:{uid}]已绑定token, 将在每天4点为你自动签到!', at_sender=True)
|
||||
|
||||
elif action.group('action') in ['信息', 'info']:
|
||||
|
||||
token = data[user_id]['token']
|
||||
uid = data[user_id]['uid']
|
||||
uuid = data[user_id]['uuid']
|
||||
|
||||
result = await get_Info(uuid, token)
|
||||
|
||||
""" 米云币 """
|
||||
coins = result['data']['coin']['coin_num']
|
||||
""" 免费时间 """
|
||||
free_time = result['data']['free_time']['free_time']
|
||||
""" 畅玩卡 """
|
||||
card = result['data']['play_card']['short_msg']
|
||||
|
||||
message = '======== UID: {0} ========\n' \
|
||||
'剩余米云币: {1}\n' \
|
||||
'剩余免费时间: {2}分钟\n' \
|
||||
'畅玩卡状态: {3}'.format(uid, coins, free_time, card)
|
||||
await cloud_ys.finish(message)
|
||||
#elif action.group('action') in ['签到', 'sign']:
|
||||
|
||||
# token = data[user_id]['token']
|
||||
# uuid = data[user_id]['uuid']
|
||||
|
||||
# if await check_token(uuid, token):
|
||||
# d1 = await get_Notification(uuid, token)
|
||||
# signInfo = json.loads(d1['data']['list'][0]['msg'])
|
||||
# if not list(d1['data']['list']):
|
||||
# await cloud_ys.finish('今天已签到了哦~', at_sender=True)
|
||||
# elif signInfo:
|
||||
# await cloud_ys.finish(f'签到成功~ {signInfo["msg"]}: {signInfo["num"]}分钟', at_sender=True)
|
||||
|
||||
else:
|
||||
await cloud_ys.finish('参数错误!', at_sender=True)
|
||||
|
||||
|
||||
for user_id, data in load_json('user_data.json').items():
|
||||
scheduler.add_job(
|
||||
func=auto_sign,
|
||||
trigger='cron',
|
||||
hour=4,
|
||||
id="cloud_genshin_" + user_id,
|
||||
args=(user_id, data),
|
||||
misfire_grace_time=10
|
||||
)
|
54
Paimon_CloudGenshin/data_source.py
Normal file
54
Paimon_CloudGenshin/data_source.py
Normal file
@ -0,0 +1,54 @@
|
||||
import json
|
||||
from ..utils.aiorequests import *
|
||||
|
||||
host = 'https://api-cloudgame.mihoyo.com/'
|
||||
|
||||
|
||||
def get_header(uuid: str, token: str):
|
||||
headers = {
|
||||
'x-rpc-combo_token': token,
|
||||
'x-rpc-client_type': '2',
|
||||
'x-rpc-app_version': '2.4.0',
|
||||
'x-rpc-sys_version': '10',
|
||||
'x-rpc-channel': 'mihoyo',
|
||||
'x-rpc-device_id': uuid,
|
||||
'x-rpc-device_name': 'Samsung SM-G988N',
|
||||
'x-rpc-device_model': 'SM-G988N',
|
||||
'x-rpc-app_id': '1953439974',
|
||||
'Referer': 'https://app.mihoyo.com',
|
||||
'Host': 'api-cloudgame.mihoyo.com',
|
||||
'Connection': 'Keep-Alive',
|
||||
'Accept-Encoding': 'gzip',
|
||||
'User-Agent': 'okhttp/4.9.0'
|
||||
}
|
||||
return headers
|
||||
|
||||
|
||||
async def check_token(uuid: str, cookie: str):
|
||||
headers = get_header(uuid, cookie)
|
||||
req = await post(host + 'hk4e_cg_cn/gamer/api/login', headers=headers)
|
||||
data = json.loads(req.text)
|
||||
if data['retcode'] == 0 and data['message'] == 'OK':
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
async def get_Info(uuid: str, cookie: str):
|
||||
headers = get_header(uuid, cookie)
|
||||
req = await get(host + 'hk4e_cg_cn/wallet/wallet/get', headers=headers)
|
||||
return json.loads(req.text)
|
||||
|
||||
|
||||
async def get_Announcement(uuid: str, cookie: str):
|
||||
headers = get_header(uuid, cookie)
|
||||
req = await get(host + 'hk4e_cg_cn/gamer/api/getAnnouncementInfo', headers=headers)
|
||||
return json.loads(req.text)
|
||||
|
||||
|
||||
async def get_Notification(uuid: str, cookie: str):
|
||||
headers = get_header(uuid, cookie)
|
||||
req = await get(
|
||||
host + 'hk4e_cg_cn/gamer/api/listNotifications?status=NotificationStatusUnread&type=NotificationTypePopup'
|
||||
'&is_sort=true',
|
||||
headers=headers)
|
||||
return json.loads(req.text)
|
Loading…
Reference in New Issue
Block a user