diff --git a/genshinuid.py b/genshinuid.py index f1e92e70..3fcc48f0 100644 --- a/genshinuid.py +++ b/genshinuid.py @@ -813,6 +813,27 @@ async def check_cookies(bot: HoshinoBot, ev: CQEvent): logger.exception('Cookie校验错误') +# 群聊内 校验Stoken 是否正常的功能,不正常自动删掉 +@sv.on_fullmatch('校验全部Stoken') +async def check_stoken(bot: HoshinoBot, ev: CQEvent): + try: + raw_mes = await check_stoken_db() + im = raw_mes[0] + await bot.send(ev, im) + for i in raw_mes[1]: + await bot.send_private_msg(user_id=i[0], + message='您绑定的Stoken(uid{})已失效,以下功能将会受到影响:\n' + 'gs开启自动米游币,开始获取米游币。\n' + '重新添加后需要重新开启自动米游币。'.format(i[1])) + await asyncio.sleep(3 + random.randint(1, 3)) + except ActionFailed as e: + await bot.send(ev, '机器人发送消息失败:{}'.format(e)) + logger.exception('发送Cookie校验信息失败') + except Exception as e: + await bot.send(ev, '发生错误 {},请检查后台输出。'.format(e)) + logger.exception('Cookie校验错误') + + # 群聊内 查询当前树脂状态以及派遣状态 的命令 @sv.on_fullmatch('当前状态') async def send_daily_data(bot: HoshinoBot, ev: CQEvent): diff --git a/mihoyo_libs/get_data.py b/mihoyo_libs/get_data.py index ca859004..dc4d4f28 100644 --- a/mihoyo_libs/get_data.py +++ b/mihoyo_libs/get_data.py @@ -17,6 +17,7 @@ from nonebot import logger mhyVersion = '2.11.1' o_url = 'https://api-takumi.mihoyo.com' n_url = 'https://api-takumi-record.mihoyo.com' +bbs_Taskslist = 'https://bbs-api.mihoyo.com/apihub/sapi/getUserMissionsState' BASE_PATH = os.path.dirname(__file__) BASE2_PATH = os.path.join(BASE_PATH, 'mihoyo_bbs') @@ -125,6 +126,7 @@ async def check_db(): mys_data['data']['list'].remove(i) return_str = return_str + f'uid{row[0]}/mys{mihoyo_id}的Cookies是正常的!\n' normal_num += 1 + logger.info(f'uid{row[0]}/mys{mihoyo_id}的Cookies是正常的!') except: invalid_str = invalid_str + f'uid{row[0]}的Cookies是异常的!已删除该条Cookies!\n' return_str = return_str + f'uid{row[0]}的Cookies是异常的!已删除该条Cookies!\n' @@ -134,11 +136,67 @@ async def check_db(): c.execute('DELETE from CookiesCache where Cookies=?', (row[1],)) except: pass + logger.info(f'uid{row[0]}的Cookies是异常的!已删除该条Cookies!') if len(c_data) > 9: return_str = '正常Cookies数量:{}\n{}'.format(str(normal_num), - '失效cookies:\n' + invalid_str if invalid_str else '无失效Cookies') + '失效cookies:\n' + invalid_str if invalid_str else '无失效Cookies') conn.commit() conn.close() + logger.info('已完成Cookies检查!') + logger.info(f'正常Cookies数量:{str(normal_num)}') + logger.info(f'失效cookies:\n' + invalid_str if invalid_str else '无失效Cookies') + return [return_str, invalid_list] + + +async def check_stoken_db(): + def random_text(num: int) -> str: + return ''.join(random.sample(string.ascii_lowercase + string.digits, num)) + return_str = str() + normal_num = 0 + invalid_str = '' + invalid_list = [] + conn = sqlite3.connect('ID_DATA.db') + c = conn.cursor() + cursor = c.execute('SELECT UID,Stoken,QID from NewCookiesTable') + c_data = cursor.fetchall() + for row in c_data: + if row[1] is None: + continue + async with AsyncClient() as client: + req = await client.get(url=bbs_Taskslist, + headers = { + 'DS' : old_version_get_ds_token(True), + 'cookie' : row[1], + 'x-rpc-client_type' : '2', + 'x-rpc-app_version' : '2.7.0', + 'x-rpc-sys_version' : '6.0.1', + 'x-rpc-channel' : 'mihoyo', + 'x-rpc-device_id' : random_hex(32), + 'x-rpc-device_name' : random_text(random.randint(1, 10)), + 'x-rpc-device_model': 'Mi 10', + 'Referer' : 'https://app.mihoyo.com', + 'Host' : 'bbs-api.mihoyo.com', + 'User-Agent' : 'okhttp/4.8.0' + }) + data = req.json() + if 'err' in data['message'] or data['retcode'] == -100: + invalid_str = invalid_str + f'uid{row[0]}的Stoken是异常的!已删除该条Stoken!\n' + return_str = return_str + f'uid{row[0]}的Stoken是异常的!已删除该条Stoken!\n' + invalid_list.append([row[2], row[0]]) + c.execute('UPDATE NewCookiesTable SET Stoken = ? WHERE UID=?', (None, row[0])) + logger.info(f'uid{row[0]}的Stoken是异常的!已删除该条Stoken!') + else: + return_str = return_str + f'uid{row[0]}的Stoken是正常的!\n' + logger.info(f'uid{row[0]}的Stoken是正常的!') + normal_num += 1 + if len(c_data) > 9: + return_str = '正常Stoken数量:{}\n{}'.format(str(normal_num), + '失效Stoken:\n' + invalid_str if invalid_str else '无失效Stoken') + conn.commit() + conn.close() + logger.info('已完成Stoken检查!') + logger.info(f'正常Stoken数量:{normal_num}') + logger.info(f'失效Stoken:\n' + invalid_str if invalid_str else '无失效Stoken') return [return_str, invalid_list]