mirror of
https://github.com/KimigaiiWuyi/GenshinUID.git
synced 2025-05-31 12:40:38 +08:00
更新后先看更新记录和指令!
This commit is contained in:
parent
00b1aed370
commit
b0b521de32
64
README.md
64
README.md
@ -1,6 +1,6 @@
|
||||
# GenshinUID / 原神UID查询
|
||||
|
||||
一个HoshinoBot插件,用于查询原神UID信息,用于查询树脂/探索派遣状态,推送树脂快满了。
|
||||
一个HoshinoBot插件,用于查询原神UID信息,用于查询树脂/探索派遣状态,推送树脂快满了,每日签到。
|
||||
|
||||
**一定要读更新记录和指令!!**
|
||||
|
||||
@ -46,6 +46,14 @@ $ pip3 install -r requirements.txt
|
||||
|
||||
## 更新记录
|
||||
|
||||
#### 2021-10-24
|
||||
|
||||
**重要:目前Cookies池又采用了新的方式(去除冗余),如果你是上个版本的使用者,请在更新后使用群聊命令:优化Cookies,无损迁移旧版本全部Cookies;(如果你是上上个版本的使用者,更新后使用命令:迁移Cookies)**
|
||||
|
||||
修复:可能会导致的添加cookies问题
|
||||
|
||||
新增:绑定Cookies后可以实现米游社签到,如果开启自动签到之后,可以每天0:30准时签到,具体使用可以前往[指令](#指令)处查阅。
|
||||
|
||||
#### 2021-10-17
|
||||
|
||||
**重要:目前Cookies池采用了新的方式,如果你是之前版本的使用者,请在更新后使用群聊命令:迁移Cookies,无损迁移旧版本全部Cookies**
|
||||
@ -148,29 +156,33 @@ $ pip3 install -r requirements.txt
|
||||
|
||||
(**括号内为可选词缀**,以下所有可以输出图片的,**命令后跟图可自定义背景图片**):
|
||||
|
||||
| 触发前缀 | 触发后缀/备注 | 效果 | 举例 | 备注 |
|
||||
| :--------------------- | ---------------------- | ---------------------------------- | ------------------ | ---------------------------------------- |
|
||||
| uid | | 获取角色信息一览(带武器信息) | uid123456789 | |
|
||||
| uid | (上期)深渊 | 获取角色深渊总览(层数为最后一层) | uid123456789深渊 | |
|
||||
| uid | (上期)深渊9/10/11/12 | 获取角色深渊某一层数据 | uid123456789深渊12 | |
|
||||
| mys | | 角色信息(带武器信息,冒险等级) | mys123456 | 米游社通行证 |
|
||||
| mys | (上期)深渊 | 获取角色深渊总览(层数为最后一层) | mys123456深渊 | 米游社通行证 |
|
||||
| mys | (上期)深渊9/10/11/12 | 获取角色深渊某一层数据 | mys123456深渊12 | 米游社通行证 |
|
||||
| UID | | 获取角色信息一览(不带武器信息) | UID123456789 | 旧版本,比例更和谐 |
|
||||
| 绑定uid | | 当前qq号关联绑定uid | 绑定uid123456789 | 查询前缀前置条件 |
|
||||
| 绑定mys | | 当前qq号关联绑定米游社通行证 | 绑定mys12345678 | 查询前缀前置条件 |
|
||||
| 查询 | | 查询当前绑定角色信息一览 | 查询 | **必须**绑定过mys/uid |
|
||||
| 查询(上期)深渊 | | 查询当前绑定角色深渊总览 | 查询深渊 | **必须**绑定过mys/uid |
|
||||
| 查询(上期)深渊\d | | 查询当前绑定角色深渊某一层数据 | 查询深渊10 | **必须**绑定过mys/uid |
|
||||
| 添加 | | 向cookies池添加cookies | 添加 _ga=balabala | **私聊**bot,注意空格 |
|
||||
| 查询 @人 | | 获取@的群友的角色信息一览 | 查询 @Wuyi | |
|
||||
| 查询(上期)深渊 @人 | | 获取@的群友的深渊信息一览 | 查询深渊 @Wuyi | |
|
||||
| 查询(上期)深渊\d @人 | | 获取@的群友的深渊某一层数据 | 查询深渊10 @Wuyi | |
|
||||
| 当前状态 | | 获取树脂、每日委托、派遣等信息 | 当前状态 | **必须**绑定过CK和uid |
|
||||
| 开启推送 | | 开启推送,超过140树脂提醒旅行者 | 开启推送 | 群聊/私聊都可<br />**必须**绑定过CK和uid |
|
||||
| 关闭推送 | | 关闭树脂快满的提醒 | 关闭推送 | 都可以 |
|
||||
| 校验全部Cookies | | 校验当前池内全部Cookies状态 | 校验全部Cookies | **群聊** |
|
||||
| 迁移Cookies | | 迁移旧版本全部Cookies | 迁移Cookies | **群聊** |
|
||||
| 触发前缀 | 触发后缀/备注 | 效果 | 举例 | 备注 |
|
||||
| :--------------------- | ---------------------- | ----------------------------------- | ------------------ | ---------------------------------------- |
|
||||
| uid | | 获取角色信息一览(带武器信息) | uid123456789 | |
|
||||
| uid | (上期)深渊 | 获取角色深渊总览(层数为最后一层) | uid123456789深渊 | |
|
||||
| uid | (上期)深渊9/10/11/12 | 获取角色深渊某一层数据 | uid123456789深渊12 | |
|
||||
| mys | | 角色信息(带武器信息,冒险等级) | mys123456 | 米游社通行证 |
|
||||
| mys | (上期)深渊 | 获取角色深渊总览(层数为最后一层) | mys123456深渊 | 米游社通行证 |
|
||||
| mys | (上期)深渊9/10/11/12 | 获取角色深渊某一层数据 | mys123456深渊12 | 米游社通行证 |
|
||||
| UID | | 获取角色信息一览(不带武器信息) | UID123456789 | 旧版本,比例更和谐 |
|
||||
| 绑定uid | | 当前qq号关联绑定uid | 绑定uid123456789 | 查询前缀前置条件 |
|
||||
| 绑定mys | | 当前qq号关联绑定米游社通行证 | 绑定mys12345678 | 查询前缀前置条件 |
|
||||
| 查询 | | 查询当前绑定角色信息一览 | 查询 | **必须**绑定过mys/uid |
|
||||
| 查询(上期)深渊 | | 查询当前绑定角色深渊总览 | 查询深渊 | **必须**绑定过mys/uid |
|
||||
| 查询(上期)深渊\d | | 查询当前绑定角色深渊某一层数据 | 查询深渊10 | **必须**绑定过mys/uid |
|
||||
| 添加 | | 向cookies池添加cookies | 添加 _ga=balabala | **私聊**bot,注意空格 |
|
||||
| 查询 @人 | | 获取@的群友的角色信息一览 | 查询 @Wuyi | |
|
||||
| 查询(上期)深渊 @人 | | 获取@的群友的深渊信息一览 | 查询深渊 @Wuyi | |
|
||||
| 查询(上期)深渊\d @人 | | 获取@的群友的深渊某一层数据 | 查询深渊10 @Wuyi | |
|
||||
| 当前状态 | | 获取树脂、每日委托、派遣等信息 | 当前状态 | **必须**绑定过CK和uid |
|
||||
| 开启推送 | | 开启推送,超过140树脂提醒旅行者 | 开启推送 | 群聊/私聊都可<br />**必须**绑定过CK和uid |
|
||||
| 关闭推送 | | 关闭树脂快满的提醒 | 关闭推送 | 都可以 |
|
||||
| 校验全部Cookies | | 校验当前池内全部Cookies状态 | 校验全部Cookies | **群聊** |
|
||||
| 迁移Cookies | | 迁移旧版本(上上个版本)全部Cookies | 迁移Cookies | **群聊** |
|
||||
| 优化Cookies | | 优化上个版本全部Cookies | 优化Cookies | **群聊** |
|
||||
| 签到 | | 米游社签到 | 签到 | **必须**绑定过CK和uid |
|
||||
| 开启自动签到 | | 开启每日米游社签到 | 开启自动签到 | 群聊/私聊都可<br />**必须**绑定过CK和uid |
|
||||
| 关闭自动签到 | | 关闭每日米游社签到 | 关闭自动签到 | 群聊/私聊都可<br />**必须**绑定过CK和uid |
|
||||
|
||||
### 深渊查询:
|
||||
|
||||
@ -180,6 +192,10 @@ $ pip3 install -r requirements.txt
|
||||
|
||||

|
||||
|
||||
### 签到:
|
||||
|
||||

|
||||
|
||||
## 相关仓库
|
||||
|
||||
- [PaimonBot](https://github.com/XiaoMiku01/PaimonBot) - 插件原始代码来自于它
|
||||
|
282
__init__.py
282
__init__.py
@ -1,5 +1,5 @@
|
||||
from .getImg import draw_pic,draw_abyss_pic,draw_abyss0_pic
|
||||
from .getDB import connectDB,selectDB,cookiesDB,cacheDB,deletecache,CheckDB,TransDB,OpenPush,GetMysInfo,GetDaily
|
||||
from .getDB import connectDB,selectDB,cookiesDB,cacheDB,deletecache,CheckDB,TransDB,OpenPush,GetMysInfo,GetDaily,GetSignList,MysSign,GetSignInfo,OpCookies
|
||||
|
||||
from nonebot import *
|
||||
from hoshino import Service,R,priv,util
|
||||
@ -21,63 +21,48 @@ FILE_PATH = os.path.dirname(__file__)
|
||||
FILE2_PATH = os.path.join(FILE_PATH,'mys')
|
||||
Texture_PATH = os.path.join(FILE2_PATH,'texture2d')
|
||||
|
||||
daily_im = '''
|
||||
==============
|
||||
(还剩{}补充满)
|
||||
==============
|
||||
原粹树脂:{}/160
|
||||
每日委托:{}/4
|
||||
探索派遣:{}/{}
|
||||
========
|
||||
{}'''
|
||||
|
||||
@sv.scheduled_job('cron', hour='0')
|
||||
async def delete():
|
||||
deletecache()
|
||||
|
||||
@sv.scheduled_job('interval', minutes=30)
|
||||
async def push():
|
||||
@sv.scheduled_job('cron', hour='0',minute="30")
|
||||
async def dailysign():
|
||||
conn = sqlite3.connect('ID_DATA.db')
|
||||
c = conn.cursor()
|
||||
cursor = c.execute("SELECT * FROM NewCookies WHERE StatusA != ?",("off",))
|
||||
cursor = c.execute("SELECT * FROM NewCookiesTable WHERE StatusB != ?",("off",))
|
||||
c_data = cursor.fetchall()
|
||||
for row in c_data:
|
||||
raw_data = await GetDaily(str(row[1]))
|
||||
dailydata = raw_data["data"]
|
||||
resin_num = dailydata["current_resin"]
|
||||
if resin_num >= row[5]:
|
||||
re_time = dailydata["resin_recovery_time"]
|
||||
m, s = divmod(int(re_time), 60)
|
||||
h, m = divmod(m, 60)
|
||||
time = "%02d小时%02d分钟%02d秒" % (h, m, s)
|
||||
|
||||
im = await sign(str(row[0]))
|
||||
|
||||
task_num = dailydata["finished_task_num"]
|
||||
travel_num = dailydata["current_expedition_num"]
|
||||
max_travel_num = dailydata["max_expedition_num"]
|
||||
travel_data = dailydata["expeditions"]
|
||||
|
||||
travel_str = ''
|
||||
|
||||
for i in travel_data:
|
||||
name = i["avatar_side_icon"].split('/')[-1].split('.')[0].split('_')[-1]
|
||||
statu = i['status']
|
||||
if statu == "Finished":
|
||||
travel_str = travel_str + f"{name} : 完成\n"
|
||||
else:
|
||||
remain_time = i['remained_time']
|
||||
m1, s1 = divmod(int(remain_time), 60)
|
||||
h1, m1 = divmod(m1, 60)
|
||||
remain_time_str = "还剩%02d小时%02d分钟%02d秒" % (h1, m1, s1)
|
||||
travel_str = travel_str + f"{name} : {remain_time_str}\n"
|
||||
im = f'''
|
||||
==============
|
||||
你的树脂快满了!!!
|
||||
(还剩{time}补充满)
|
||||
==============
|
||||
原粹树脂:{resin_num}/160
|
||||
每日委托:{task_num}/4
|
||||
探索派遣:{travel_num}/{max_travel_num}
|
||||
========
|
||||
{travel_str}
|
||||
'''.strip()
|
||||
|
||||
if row[2] == "on":
|
||||
await bot.send_private_msg(user_id = row[4],message = im)
|
||||
else:
|
||||
await bot.send_group_msg(group_id = row[2],message = f"[CQ:at,qq={row[4]}]" + "\n" + im)
|
||||
if row[4] == "on":
|
||||
await bot.send_private_msg(user_id = row[2],message = im)
|
||||
else:
|
||||
pass
|
||||
await bot.send_group_msg(group_id = row[4],message = f"[CQ:at,qq={row[2]}]" + "\n" + im)
|
||||
|
||||
@sv.scheduled_job('interval', minutes=30)
|
||||
async def push():
|
||||
daily_data = await daily()
|
||||
if daily_data != None:
|
||||
for i in daily_data:
|
||||
if i['gid'] == "on":
|
||||
await bot.send_private_msg(user_id = i['qid'],message = i['message'])
|
||||
else:
|
||||
await bot.send_group_msg(group_id = i['gid'],message = f"[CQ:at,qq={i['qid']}]" + "\n" + i['message'])
|
||||
else:
|
||||
pass
|
||||
|
||||
|
||||
|
||||
@bot.on_message('private')
|
||||
async def setting(ctx):
|
||||
@ -88,55 +73,112 @@ async def setting(ctx):
|
||||
if '添加 ' in message:
|
||||
try:
|
||||
mes = message.replace('添加 ','')
|
||||
ltuid = re.search(r"ltuid=(\d*)", mes)
|
||||
mysid_data = ltuid.group(0).split('=')
|
||||
aid = re.search(r"account_id=(\d*)", mes)
|
||||
mysid_data = aid.group(0).split('=')
|
||||
mysid = mysid_data[1]
|
||||
|
||||
mys_data = await GetMysInfo(mysid,mes)
|
||||
cookie = ';'.join(filter(lambda x: x.split('=')[0] in ["cookie_token", "account_id"], [i.strip() for i in mes.split(';')]))
|
||||
mys_data = await GetMysInfo(mysid,cookie)
|
||||
mys_data = mys_data[0]
|
||||
uid = mys_data['data']['list'][0]['game_role_id']
|
||||
|
||||
await cookiesDB(uid,mes)
|
||||
await cookiesDB(uid,cookie,userid)
|
||||
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=f'添加Cookies成功!Cookies属于个人重要信息,如果你是在不知情的情况下添加,请马上修改米游社账户密码,保护个人隐私!')
|
||||
except:
|
||||
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=f'校验失败!')
|
||||
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=f'校验失败!请输入正确的Cookies!')
|
||||
elif '开启推送' in message:
|
||||
try:
|
||||
uid = await selectDB(userid,mode = "uid")
|
||||
im = await OpenPush(int(uid[0]),userid,"on")
|
||||
im = await OpenPush(int(uid[0]),userid,"on","StatusA")
|
||||
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im)
|
||||
except:
|
||||
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。")
|
||||
elif '关闭推送' in message:
|
||||
try:
|
||||
uid = await selectDB(userid,mode = "uid")
|
||||
im = await OpenPush(int(uid[0]),userid,"off")
|
||||
im = await OpenPush(int(uid[0]),userid,"off","StatusA")
|
||||
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im)
|
||||
except:
|
||||
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。")
|
||||
elif '开启自动签到' in message:
|
||||
try:
|
||||
uid = await selectDB(userid,mode = "uid")
|
||||
im = await OpenPush(int(uid[0]),userid,"on","StatusB")
|
||||
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im)
|
||||
except:
|
||||
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。")
|
||||
elif '关闭自动签到' in message:
|
||||
try:
|
||||
uid = await selectDB(userid,mode = "uid")
|
||||
im = await OpenPush(int(uid[0]),userid,"off","StatusA")
|
||||
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message=im)
|
||||
except:
|
||||
await bot.send_msg(self_id=sid, user_id=userid, group_id=gid, message="未找到uid绑定记录。")
|
||||
|
||||
@sv.on_fullmatch('开启推送')
|
||||
@sv.on_prefix('开启')
|
||||
async def _(bot:HoshinoBot, ev: CQEvent):
|
||||
message = ev.message.extract_plain_text()
|
||||
m = ''.join(re.findall('[\u4e00-\u9fa5]',message))
|
||||
if m == "自动签到":
|
||||
try:
|
||||
gid = ev.group_id
|
||||
qid = ev.sender["user_id"]
|
||||
uid = await selectDB(ev.sender['user_id'],mode = "uid")
|
||||
im = await OpenPush(int(uid[0]),ev.sender['user_id'],str(gid),"StatusB")
|
||||
await bot.send(ev,im,at_sender=True)
|
||||
except:
|
||||
await bot.send(ev,"未绑定uid信息!",at_sender=True)
|
||||
elif m == "推送":
|
||||
try:
|
||||
gid = ev.group_id
|
||||
qid = ev.sender["user_id"]
|
||||
uid = await selectDB(ev.sender['user_id'],mode = "uid")
|
||||
im = await OpenPush(int(uid[0]),ev.sender['user_id'],str(gid),"StatusA")
|
||||
await bot.send(ev,im,at_sender=True)
|
||||
except:
|
||||
await bot.send(ev,"未绑定uid信息!",at_sender=True)
|
||||
|
||||
@sv.on_prefix('关闭')
|
||||
async def _(bot:HoshinoBot, ev: CQEvent):
|
||||
message = ev.message.extract_plain_text()
|
||||
m = ''.join(re.findall('[\u4e00-\u9fa5]',message))
|
||||
if m == "自动签到":
|
||||
try:
|
||||
gid = ev.group_id
|
||||
qid = ev.sender["user_id"]
|
||||
uid = await selectDB(ev.sender['user_id'],mode = "uid")
|
||||
im = await OpenPush(int(uid[0]),ev.sender['user_id'],"off","StatusB")
|
||||
await bot.send(ev,im,at_sender=True)
|
||||
except:
|
||||
await bot.send(ev,"未绑定uid信息!",at_sender=True)
|
||||
elif m == "推送":
|
||||
try:
|
||||
gid = ev.group_id
|
||||
qid = ev.sender["user_id"]
|
||||
uid = await selectDB(ev.sender['user_id'],mode = "uid")
|
||||
im = await OpenPush(int(uid[0]),ev.sender['user_id'],"off","StatusA")
|
||||
await bot.send(ev,im,at_sender=True)
|
||||
except:
|
||||
await bot.send(ev,"未绑定uid信息!",at_sender=True)
|
||||
|
||||
@sv.on_fullmatch('签到')
|
||||
async def _(bot:HoshinoBot, ev: CQEvent):
|
||||
try:
|
||||
gid = ev.group_id
|
||||
qid = ev.sender["user_id"]
|
||||
uid = await selectDB(ev.sender['user_id'],mode = "uid")
|
||||
im = await OpenPush(int(uid[0]),ev.sender['user_id'],str(gid))
|
||||
uid = uid[0]
|
||||
im = await sign(uid)
|
||||
await bot.send(ev,im,at_sender=True)
|
||||
except:
|
||||
await bot.send(ev,"未绑定uid信息!",at_sender=True)
|
||||
pass
|
||||
|
||||
@sv.on_fullmatch('关闭推送')
|
||||
@sv.on_fullmatch('优化Cookies')
|
||||
async def _(bot:HoshinoBot, ev: CQEvent):
|
||||
try:
|
||||
gid = ev.group_id
|
||||
qid = ev.sender["user_id"]
|
||||
uid = await selectDB(ev.sender['user_id'],mode = "uid")
|
||||
im = await OpenPush(int(uid[0]),ev.sender['user_id'],"off")
|
||||
im = await OpCookies()
|
||||
await bot.send(ev,im,at_sender=True)
|
||||
except:
|
||||
await bot.send(ev,"未绑定uid信息!",at_sender=True)
|
||||
|
||||
pass
|
||||
|
||||
@sv.on_fullmatch('校验全部Cookies')
|
||||
async def _(bot:HoshinoBot, ev: CQEvent):
|
||||
im = await CheckDB()
|
||||
@ -152,45 +194,8 @@ async def _(bot:HoshinoBot, ev: CQEvent):
|
||||
try:
|
||||
uid = await selectDB(ev.sender['user_id'],mode = "uid")
|
||||
uid = uid[0]
|
||||
raw_data = await GetDaily(uid)
|
||||
dailydata = raw_data["data"]
|
||||
resin_num = dailydata["current_resin"]
|
||||
re_time = dailydata["resin_recovery_time"]
|
||||
m, s = divmod(int(re_time), 60)
|
||||
h, m = divmod(m, 60)
|
||||
time = "%02d小时%02d分钟%02d秒" % (h, m, s)
|
||||
|
||||
task_num = dailydata["finished_task_num"]
|
||||
travel_num = dailydata["current_expedition_num"]
|
||||
max_travel_num = dailydata["max_expedition_num"]
|
||||
travel_data = dailydata["expeditions"]
|
||||
|
||||
travel_str = ''
|
||||
|
||||
for i in travel_data:
|
||||
name = i["avatar_side_icon"].split('/')[-1].split('.')[0].split('_')[-1]
|
||||
statu = i['status']
|
||||
if statu == "Finished":
|
||||
travel_str = travel_str + f"{name} : 完成\n"
|
||||
else:
|
||||
remain_time = i['remained_time']
|
||||
m1, s1 = divmod(int(remain_time), 60)
|
||||
h1, m1 = divmod(m1, 60)
|
||||
remain_time_str = "还剩%02d小时%02d分钟%02d秒" % (h1, m1, s1)
|
||||
travel_str = travel_str + f"{name} : {remain_time_str}\n"
|
||||
|
||||
im = f'''
|
||||
:
|
||||
==============
|
||||
(还剩{time}补充满)
|
||||
==============
|
||||
原粹树脂:{resin_num}/160
|
||||
每日委托:{task_num}/4
|
||||
探索派遣:{travel_num}/{max_travel_num}
|
||||
========
|
||||
{travel_str}
|
||||
'''.strip()
|
||||
|
||||
mes = await daily("ask",uid)
|
||||
im = mes[0]['message']
|
||||
except:
|
||||
im = "没有找到绑定信息。"
|
||||
|
||||
@ -267,7 +272,7 @@ async def _(bot, ev):
|
||||
if len(re.findall(r"\d+", message)) == 1:
|
||||
floor_num = re.findall(r"\d+", message)[0]
|
||||
im = await draw_abyss_pic(uid[0],nickname,floor_num,image,uid[1])
|
||||
await bot.send(ev, im, at_sender=True)
|
||||
await bot.send(ev, im, at_sender=True)
|
||||
else:
|
||||
im = await draw_abyss0_pic(uid[0],nickname,image,uid[1])
|
||||
await bot.send(ev, im, at_sender=True)
|
||||
@ -342,3 +347,68 @@ async def _(bot:HoshinoBot, ev: CQEvent):
|
||||
except:
|
||||
await bot.send(ev,'输入错误!')
|
||||
|
||||
|
||||
|
||||
|
||||
async def sign(uid):
|
||||
sign_data = await MysSign(uid)
|
||||
sign_info = await GetSignInfo(uid)
|
||||
sign_info = sign_info['data']
|
||||
sign_list = await GetSignList()
|
||||
status = sign_data['message']
|
||||
getitem = sign_list['data']['awards'][int(sign_info['total_sign_day'])-1]['name']
|
||||
getnum = sign_list['data']['awards'][int(sign_info['total_sign_day'])-1]['cnt']
|
||||
get_im = f"本次签到获得{getitem}x{getnum}"
|
||||
if status == "OK" and sign_info['is_sign'] == True:
|
||||
mes_im = "签到成功"
|
||||
else:
|
||||
mes_im = status
|
||||
sign_missed = sign_info['sign_cnt_missed']
|
||||
im = "\n" + mes_im +"!" + "\n" + get_im + "\n" + f"本月漏签次数:{sign_missed}"
|
||||
return im
|
||||
|
||||
async def daily(mode = "push",uid = None):
|
||||
temp_list = []
|
||||
conn = sqlite3.connect('ID_DATA.db')
|
||||
c = conn.cursor()
|
||||
if mode == "push":
|
||||
cursor = c.execute("SELECT * FROM NewCookiesTable WHERE StatusA != ?",("off",))
|
||||
c_data = cursor.fetchall()
|
||||
elif mode == "ask":
|
||||
c_data = ([uid,0,0,0,0,0,0],)
|
||||
|
||||
for row in c_data:
|
||||
raw_data = await GetDaily(str(row[0]))
|
||||
dailydata = raw_data["data"]
|
||||
|
||||
resin_num = dailydata["current_resin"]
|
||||
task_num = dailydata["finished_task_num"]
|
||||
travel_num = dailydata["current_expedition_num"]
|
||||
max_travel_num = dailydata["max_expedition_num"]
|
||||
travel_data = dailydata["expeditions"]
|
||||
|
||||
if resin_num >= row[6] :
|
||||
|
||||
re_time = dailydata["resin_recovery_time"]
|
||||
m, s = divmod(int(re_time), 60)
|
||||
h, m = divmod(m, 60)
|
||||
time = "%02d小时%02d分钟%02d秒" % (h, m, s)
|
||||
|
||||
travel_str = ''
|
||||
|
||||
for i in travel_data:
|
||||
name = i["avatar_side_icon"].split('/')[-1].split('.')[0].split('_')[-1]
|
||||
statu = i['status']
|
||||
if statu == "Finished":
|
||||
travel_str = travel_str + f"{name} : 完成\n"
|
||||
else:
|
||||
remain_time = i['remained_time']
|
||||
m1, s1 = divmod(int(remain_time), 60)
|
||||
h1, m1 = divmod(m1, 60)
|
||||
remain_time_str = "还剩%02d小时%02d分钟%02d秒" % (h1, m1, s1)
|
||||
travel_str = travel_str + f"{name} : {remain_time_str}\n"
|
||||
send_mes = daily_im.format(time,resin_num,task_num,travel_num,max_travel_num,travel_str)
|
||||
if row[1] != 0:
|
||||
send_mes = "你的树脂快满了!" + send_mes
|
||||
temp_list.append({"qid":row[2],"gid":row[3],"message":send_mes})
|
||||
return temp_list
|
||||
|
201
getDB.py
201
getDB.py
@ -17,14 +17,14 @@ mhyVersion = "2.11.1"
|
||||
FILE_PATH = os.path.abspath(os.path.join(os.getcwd(), "hoshino"))
|
||||
DATA_PATH = os.path.join(FILE_PATH,'config')
|
||||
|
||||
async def OpenPush(uid,qid,status):
|
||||
async def OpenPush(uid,qid,status,mode):
|
||||
conn = sqlite3.connect('ID_DATA.db')
|
||||
c = conn.cursor()
|
||||
cursor = c.execute("SELECT * from NewCookies WHERE UID = ?",(uid,))
|
||||
cursor = c.execute("SELECT * from NewCookiesTable WHERE UID = ?",(uid,))
|
||||
c_data = cursor.fetchall()
|
||||
if len(c_data) != 0:
|
||||
try:
|
||||
c.execute("UPDATE NewCookies SET StatusA = ?,QID = ? WHERE UID=?",(status,qid,uid))
|
||||
c.execute("UPDATE NewCookiesTable SET {s} = ?,QID = ? WHERE UID=?".format(s = mode),(status,qid,uid))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return "成功!"
|
||||
@ -37,21 +37,21 @@ async def CheckDB():
|
||||
str = ''
|
||||
conn = sqlite3.connect('ID_DATA.db')
|
||||
c = conn.cursor()
|
||||
cursor = c.execute("SELECT Cookies,UID from NewCookies")
|
||||
for row in cursor:
|
||||
cursor = c.execute("SELECT UID,Cookies from NewCookiesTable")
|
||||
c_data = cursor.fetchall()
|
||||
for row in c_data:
|
||||
try:
|
||||
ltuid = re.search(r"ltuid=(\d*)", row[0])
|
||||
mysid_data = ltuid.group(0).split('=')
|
||||
aid = re.search(r"account_id=(\d*)",row[1])
|
||||
mysid_data = aid.group(0).split('=')
|
||||
mysid = mysid_data[1]
|
||||
|
||||
mys_data = await GetMysInfo(mysid,row[0])
|
||||
mys_data = await GetMysInfo(mysid,row[1])
|
||||
mys_data = mys_data[0]
|
||||
uid = mys_data['data']['list'][0]['game_role_id']
|
||||
|
||||
str = str + f"uid{row[1]}/mysid{mysid}的Cookies是正常的!\n"
|
||||
str = str + f"uid{row[0]}/mysid{mysid}的Cookies是正常的!\n"
|
||||
except:
|
||||
str = str + f"uid{row[1]}/mysid{mysid}的Cookies是异常的!已删除该条Cookies!\n"
|
||||
c.execute("DELETE from NewCookies where UID=?",(row[1],))
|
||||
str = str + f"uid{row[0]}的Cookies是异常的!已删除该条Cookies!\n"
|
||||
c.execute("DELETE from NewCookiesTable where UID=?",(row[0],))
|
||||
c.execute("DELETE from CookiesCache where Cookies=?",(row[1],))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return str
|
||||
@ -66,26 +66,28 @@ async def TransDB():
|
||||
conn.close()
|
||||
return "你没有需要迁移的数据库。"
|
||||
else:
|
||||
c.execute('''CREATE TABLE IF NOT EXISTS NewCookies
|
||||
(Cookies TEXT PRIMARY KEY NOT NULL,
|
||||
UID INT,
|
||||
c.execute('''CREATE TABLE IF NOT EXISTS NewCookiesTable
|
||||
(UID INT PRIMARY KEY NOT NULL,
|
||||
Cookies TEXT,
|
||||
QID INT,
|
||||
StatusA TEXT,
|
||||
StatusB TEXT,
|
||||
QID INT,
|
||||
StatusC TEXT,
|
||||
NUM INT,
|
||||
Extra TEXT);''')
|
||||
cursor = c.execute("SELECT * from CookiesTable")
|
||||
c_data = cursor.fetchall()
|
||||
for row in c_data:
|
||||
try:
|
||||
ltuid = re.search(r"ltuid=(\d*)", row[0])
|
||||
mysid_data = ltuid.group(0).split('=')
|
||||
newcookies = ';'.join(filter(lambda x: x.split('=')[0] in ["cookie_token", "account_id"], [i.strip() for i in row[0].split(';')]))
|
||||
aid = re.search(r"account_id=(\d*)", row[0])
|
||||
mysid_data = aid.group(0).split('=')
|
||||
mysid = mysid_data[1]
|
||||
mys_data = await GetMysInfo(mysid,row[0])
|
||||
mys_data = mys_data[0]
|
||||
uid = mys_data['data']['list'][0]['game_role_id']
|
||||
c.execute("INSERT OR IGNORE INTO NewCookies (Cookies,UID,StatusA,StatusB,NUM) \
|
||||
VALUES (?, ?,?,?,?)",(row[0],uid,"off","off",140))
|
||||
c.execute("INSERT OR IGNORE INTO NewCookiesTable (Cookies,UID,StatusA,StatusB,StatusC,NUM) \
|
||||
VALUES (?, ?,?,?,?,?)",(newcookies,uid,"off","off","off",140))
|
||||
str = str + f"uid{uid}/mysid{mysid}的Cookies已转移成功!\n"
|
||||
except:
|
||||
str = str + f"uid{uid}/mysid{mysid}的Cookies是异常的!已删除该条Cookies!\n"
|
||||
@ -160,15 +162,15 @@ async def cacheDB(uid,mode = 1,mys = None):
|
||||
c_data = cursor.fetchall()
|
||||
|
||||
if len(c_data)==0:
|
||||
cookiesrow = c.execute("SELECT * FROM NewCookies ORDER BY RANDOM() limit 1")
|
||||
cookiesrow = c.execute("SELECT * FROM NewCookiesTable ORDER BY RANDOM() limit 1")
|
||||
for row2 in cookiesrow:
|
||||
if mode == 1:
|
||||
c.execute("INSERT OR IGNORE INTO CookiesCache (Cookies,UID) \
|
||||
VALUES (?, ?)",(row2[0],uid))
|
||||
VALUES (?, ?)",(row2[1],uid))
|
||||
if mode == 2:
|
||||
c.execute("INSERT OR IGNORE INTO CookiesCache (Cookies,MYSID) \
|
||||
VALUES (?, ?)",(row2[0],uid))
|
||||
use = row2[0]
|
||||
VALUES (?, ?)",(row2[1],uid))
|
||||
use = row2[1]
|
||||
else:
|
||||
use = c_data[0][2]
|
||||
if mys:
|
||||
@ -181,33 +183,78 @@ async def cacheDB(uid,mode = 1,mys = None):
|
||||
conn.close()
|
||||
return use
|
||||
|
||||
async def cookiesDB(uid,Cookies):
|
||||
async def cookiesDB(uid,Cookies,qid):
|
||||
conn = sqlite3.connect('ID_DATA.db')
|
||||
c = conn.cursor()
|
||||
|
||||
c.execute('''CREATE TABLE IF NOT EXISTS NewCookies
|
||||
(Cookies TEXT PRIMARY KEY NOT NULL,
|
||||
UID INT,
|
||||
c.execute('''CREATE TABLE IF NOT EXISTS NewCookiesTable
|
||||
(UID INT PRIMARY KEY NOT NULL,
|
||||
Cookies TEXT,
|
||||
QID INT,
|
||||
StatusA TEXT,
|
||||
StatusB TEXT,
|
||||
QID INT,
|
||||
StatusC TEXT,
|
||||
NUM INT,
|
||||
Extra TEXT);''')
|
||||
|
||||
c.execute("INSERT OR IGNORE INTO NewCookies (Cookies,UID,StatusA,StatusB,NUM) \
|
||||
VALUES (?, ?,?,?,?)",(Cookies,uid,"off","off",140))
|
||||
|
||||
cursor = c.execute("SELECT * from NewCookiesTable WHERE UID = ?",(uid,))
|
||||
c_data = cursor.fetchall()
|
||||
if len(c_data) == 0 :
|
||||
c.execute("INSERT OR IGNORE INTO NewCookiesTable (Cookies,UID,StatusA,StatusB,StatusC,NUM,QID) \
|
||||
VALUES (?, ?,?,?,?,?,?)",(Cookies,uid,"off","off","off",140,qid))
|
||||
else:
|
||||
c.execute("UPDATE NewCookiesTable SET Cookies = ? WHERE UID=?",(Cookies,uid))
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
async def OpCookies():
|
||||
str = ""
|
||||
conn = sqlite3.connect('ID_DATA.db')
|
||||
c = conn.cursor()
|
||||
test = c.execute("SELECT count(*) FROM sqlite_master WHERE type='table' AND name = 'NewCookies'")
|
||||
if test == 0:
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return "你没有需要优化的数据库。"
|
||||
else:
|
||||
c.execute('''CREATE TABLE IF NOT EXISTS NewCookiesTable
|
||||
(UID INT PRIMARY KEY NOT NULL,
|
||||
Cookies TEXT,
|
||||
QID INT,
|
||||
StatusA TEXT,
|
||||
StatusB TEXT,
|
||||
StatusC TEXT,
|
||||
NUM INT,
|
||||
Extra TEXT);''')
|
||||
cursor = c.execute("SELECT * from NewCookies")
|
||||
c_data = cursor.fetchall()
|
||||
for row in c_data:
|
||||
try:
|
||||
newcookies = ';'.join(filter(lambda x: x.split('=')[0] in ["cookie_token", "account_id"], [i.strip() for i in row[0].split(';')]))
|
||||
aid = re.search(r"account_id=(\d*)", row[0])
|
||||
mysid_data = aid.group(0).split('=')
|
||||
mysid = mysid_data[1]
|
||||
mys_data = await GetMysInfo(mysid,row[0])
|
||||
mys_data = mys_data[0]
|
||||
uid = mys_data['data']['list'][0]['game_role_id']
|
||||
c.execute("INSERT OR IGNORE INTO NewCookiesTable (Cookies,UID,StatusA,StatusB,StatusC,QID,NUM) \
|
||||
VALUES (?, ?,?,?,?,?,?)",(newcookies,row[1],row[2],row[3],"off",row[4],row[5]))
|
||||
str = str + f"uid{row[1]}的Cookies已转移成功!\n"
|
||||
except:
|
||||
str = str + f"uid{row[1]}的Cookies是异常的!已删除该条Cookies!\n"
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return str
|
||||
|
||||
|
||||
async def OwnerCookies(uid):
|
||||
conn = sqlite3.connect('ID_DATA.db')
|
||||
c = conn.cursor()
|
||||
|
||||
try:
|
||||
cursor = c.execute("SELECT * FROM NewCookies WHERE UID = ?",(uid,))
|
||||
cursor = c.execute("SELECT * FROM NewCookiesTable WHERE UID = ?",(uid,))
|
||||
c_data = cursor.fetchall()
|
||||
cookies = c_data[0][0]
|
||||
cookies = c_data[0][1]
|
||||
except:
|
||||
return
|
||||
|
||||
@ -222,13 +269,24 @@ async def OwnerCookies(uid):
|
||||
|
||||
|
||||
|
||||
|
||||
def random_hex(length):
|
||||
result = hex(random.randint(0,16**length)).replace('0x','').upper()
|
||||
if len(result)<length:
|
||||
result = "0"*(length-len(result))+result
|
||||
return result
|
||||
|
||||
def md5(text):
|
||||
md5 = hashlib.md5()
|
||||
md5.update(text.encode())
|
||||
return md5.hexdigest()
|
||||
|
||||
def oldDSGet():
|
||||
n = "h8w582wxwgqvahcdkpvdhbh2w9casgfl"
|
||||
i = str(int(time.time()))
|
||||
r = ''.join(random.sample(string.ascii_lowercase + string.digits, 6))
|
||||
c = md5("salt=" + n + "&t=" + i + "&r=" + r)
|
||||
return (i + "," + r + "," + c)
|
||||
|
||||
def DSGet(q = "",b = None):
|
||||
if b:
|
||||
br = json.dumps(b)
|
||||
@ -259,6 +317,65 @@ async def GetDaily(Uid,ServerID="cn_gf01"):
|
||||
except:
|
||||
print("访问失败,请重试!")
|
||||
sys.exit(1)
|
||||
|
||||
async def GetSignList():
|
||||
try:
|
||||
async with AsyncClient() as client:
|
||||
req = await client.get(
|
||||
url="https://api-takumi.mihoyo.com/event/bbs_sign_reward/home?act_id=e202009291139501",
|
||||
headers={
|
||||
'x-rpc-app_version': mhyVersion,
|
||||
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) miHoYoBBS/2.11.1',
|
||||
'x-rpc-client_type': '5',
|
||||
'Referer': 'https://webstatic.mihoyo.com/'})
|
||||
data = json.loads(req.text)
|
||||
return data
|
||||
except:
|
||||
print("访问失败,请重试!")
|
||||
|
||||
async def GetSignInfo(Uid,ServerID="cn_gf01"):
|
||||
if Uid[0] == '5':
|
||||
ServerID = "cn_qd01"
|
||||
try:
|
||||
async with AsyncClient() as client:
|
||||
req = await client.get(
|
||||
url="https://api-takumi.mihoyo.com/event/bbs_sign_reward/info?act_id=e202009291139501®ion=" + ServerID + "&uid=" + Uid,
|
||||
headers={
|
||||
'x-rpc-app_version': mhyVersion,
|
||||
"Cookie": await OwnerCookies(Uid),
|
||||
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) miHoYoBBS/2.11.1',
|
||||
'x-rpc-client_type': '5',
|
||||
'Referer': 'https://webstatic.mihoyo.com/'})
|
||||
data = json.loads(req.text)
|
||||
f=open("/root/hoshino/HoshinoBot/hoshino/modules/GenshinUID/mys/chars/info.txt",'w')
|
||||
f.write(str(data))
|
||||
return data
|
||||
except:
|
||||
print("访问失败,请重试!")
|
||||
|
||||
async def MysSign(Uid,ServerID="cn_gf01"):
|
||||
if Uid[0] == '5':
|
||||
ServerID = "cn_qd01"
|
||||
try:
|
||||
req = requests.post(
|
||||
url = "https://api-takumi.mihoyo.com/event/bbs_sign_reward/sign",
|
||||
headers={
|
||||
'User_Agent': 'Mozilla/5.0 (Linux; Android 10; MIX 2 Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.101 Mobile Safari/537.36 miHoYoBBS/2.3.0',
|
||||
"Cookie": await OwnerCookies(Uid),
|
||||
"x-rpc-device_id":random_hex(32),
|
||||
'Origin': 'https://webstatic.mihoyo.com',
|
||||
'X_Requested_With': 'com.mihoyo.hyperion',
|
||||
'DS': oldDSGet(),
|
||||
'x-rpc-client_type': '5',
|
||||
'Referer': 'https://webstatic.mihoyo.com/bbs/event/signin-ys/index.html?bbs_auth_required=true&act_id=e202009291139501&utm_source=bbs&utm_medium=mys&utm_campaign=icon',
|
||||
'x-rpc-app_version': '2.3.0'
|
||||
},
|
||||
json = {"act_id": "e202009291139501" ,"uid": Uid ,"region": ServerID}
|
||||
)
|
||||
data2 = json.loads(req.text)
|
||||
return data2
|
||||
except:
|
||||
print("访问失败,请重试!")
|
||||
|
||||
async def GetInfo(Uid,ServerID="cn_gf01",Schedule_type="1",mysid = None):
|
||||
if Uid[0] == '5':
|
||||
@ -278,7 +395,6 @@ async def GetInfo(Uid,ServerID="cn_gf01",Schedule_type="1",mysid = None):
|
||||
return data
|
||||
except:
|
||||
print("访问失败,请重试!")
|
||||
sys.exit(1)
|
||||
|
||||
async def GetSpiralAbyssInfo(Uid, ServerID="cn_gf01",Schedule_type="1",mysid = None):
|
||||
if Uid[0] == '5':
|
||||
@ -300,8 +416,7 @@ async def GetSpiralAbyssInfo(Uid, ServerID="cn_gf01",Schedule_type="1",mysid = N
|
||||
data = json.loads(req.text)
|
||||
return data
|
||||
except:
|
||||
print("1访问失败,请重试!")
|
||||
sys.exit(1)
|
||||
print("访问失败,请重试!")
|
||||
|
||||
|
||||
async def GetCharacter(Uid,Character_ids, ServerID="cn_gf01",mysid = None):
|
||||
@ -325,7 +440,6 @@ async def GetCharacter(Uid,Character_ids, ServerID="cn_gf01",mysid = None):
|
||||
return data2
|
||||
except:
|
||||
print("访问失败,请重试!")
|
||||
sys.exit(1)
|
||||
|
||||
async def GetMysInfo(mysid,cookies = None):
|
||||
if cookies:
|
||||
@ -346,6 +460,5 @@ async def GetMysInfo(mysid,cookies = None):
|
||||
data = json.loads(req.text)
|
||||
return [data,mysid]
|
||||
except:
|
||||
print ("访问失败,请重试!")
|
||||
#sys.exit (1)
|
||||
return
|
||||
im = "err"
|
||||
return im
|
BIN
readme/4.PNG
Normal file
BIN
readme/4.PNG
Normal file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
Loading…
x
Reference in New Issue
Block a user