diff --git a/README.md b/README.md
index c79f8e61..ae14ed9d 100644
--- a/README.md
+++ b/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树脂提醒旅行者 | 开启推送 | 群聊/私聊都可
**必须**绑定过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树脂提醒旅行者 | 开启推送 | 群聊/私聊都可
**必须**绑定过CK和uid |
+| 关闭推送 | | 关闭树脂快满的提醒 | 关闭推送 | 都可以 |
+| 校验全部Cookies | | 校验当前池内全部Cookies状态 | 校验全部Cookies | **群聊** |
+| 迁移Cookies | | 迁移旧版本(上上个版本)全部Cookies | 迁移Cookies | **群聊** |
+| 优化Cookies | | 优化上个版本全部Cookies | 优化Cookies | **群聊** |
+| 签到 | | 米游社签到 | 签到 | **必须**绑定过CK和uid |
+| 开启自动签到 | | 开启每日米游社签到 | 开启自动签到 | 群聊/私聊都可
**必须**绑定过CK和uid |
+| 关闭自动签到 | | 关闭每日米游社签到 | 关闭自动签到 | 群聊/私聊都可
**必须**绑定过CK和uid |
### 深渊查询:
@@ -180,6 +192,10 @@ $ pip3 install -r requirements.txt

+### 签到:
+
+
+
## 相关仓库
- [PaimonBot](https://github.com/XiaoMiku01/PaimonBot) - 插件原始代码来自于它
diff --git a/__init__.py b/__init__.py
index b2b0b34f..46b774f2 100644
--- a/__init__.py
+++ b/__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
diff --git a/getDB.py b/getDB.py
index 64e5180e..e2923422 100644
--- a/getDB.py
+++ b/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)