更新后先看更新记录和指令!

This commit is contained in:
KimigaiiWuyi 2021-10-24 01:38:57 +08:00
parent 00b1aed370
commit b0b521de32
4 changed files with 373 additions and 174 deletions

View File

@ -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
![3](https://raw.githubusercontent.com/KimigaiiWuyi/GenshinUID/main/readme/3.png)
### 签到:
![3](https://raw.githubusercontent.com/KimigaiiWuyi/GenshinUID/main/readme/4.png)
## 相关仓库
- [PaimonBot](https://github.com/XiaoMiku01/PaimonBot) - 插件原始代码来自于它

View File

@ -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
View File

@ -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&region=" + 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB