import sqlite3 import sys from httpx import AsyncClient from nonebot import * import requests,random,os,json,re import hoshino import asyncio import time import string import hashlib import base64 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,mode): conn = sqlite3.connect('ID_DATA.db') c = conn.cursor() cursor = c.execute("SELECT * from NewCookiesTable WHERE UID = ?",(uid,)) c_data = cursor.fetchall() if len(c_data) != 0: try: c.execute("UPDATE NewCookiesTable SET {s} = ?,QID = ? WHERE UID=?".format(s = mode),(status,qid,uid)) conn.commit() conn.close() return "成功!" except: return "未找到Ck绑定记录。" else: return "未找到Ck绑定记录。" async def CheckDB(): str = '' conn = sqlite3.connect('ID_DATA.db') c = conn.cursor() cursor = c.execute("SELECT UID,Cookies from NewCookiesTable") c_data = cursor.fetchall() for row in c_data: try: 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[1]) mys_data = mys_data[0] uid = mys_data['data']['list'][0]['game_role_id'] str = str + f"uid{row[0]}/mysid{mysid}的Cookies是正常的!\n" except: str = str + f"uid{row[0]}的Cookies是异常的!已删除该条Cookies!\n" c.execute("DELETE from NewCookiesTable where UID=?",(row[0],)) test = c.execute("SELECT count(*) FROM sqlite_master WHERE type='table' AND name = 'CookiesCache'") if test == 0: pass else: c.execute("DELETE from CookiesCache where Cookies=?",(row[1],)) conn.commit() conn.close() return str async def TransDB(): str = '' conn = sqlite3.connect('ID_DATA.db') c = conn.cursor() test = c.execute("SELECT count(*) FROM sqlite_master WHERE type='table' AND name = 'CookiesTable'") 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 CookiesTable") 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,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" conn.commit() conn.close() return str async def connectDB(userid,uid = None,mys = None): conn = sqlite3.connect('ID_DATA.db') c = conn.cursor() c.execute('''CREATE TABLE IF NOT EXISTS UIDDATA (USERID INT PRIMARY KEY NOT NULL, UID TEXT, MYSID TEXT);''') c.execute("INSERT OR IGNORE INTO UIDDATA (USERID,UID,MYSID) \ VALUES (?, ?,?)",(userid,uid,mys)) if uid: c.execute("UPDATE UIDDATA SET UID = ? WHERE USERID=?",(uid,userid)) if mys: c.execute("UPDATE UIDDATA SET MYSID = ? WHERE USERID=?",(mys,userid)) conn.commit() conn.close() async def selectDB(userid,mode = "auto"): conn = sqlite3.connect('ID_DATA.db') c = conn.cursor() cursor = c.execute("SELECT * FROM UIDDATA WHERE USERID = ?",(userid,)) for row in cursor: if mode == "auto": if row[0]: if row[2]: return [row[2],3] elif row[1]: return [row[1],2] else: return None else: return None elif mode == "uid": return [row[1],2] elif mode == "mys": return [row[2],3] def deletecache(): conn = sqlite3.connect('ID_DATA.db') c = conn.cursor() c.execute("DROP TABLE CookiesCache") conn.commit() conn.close() async def cacheDB(uid,mode = 1,mys = None): use = '' conn = sqlite3.connect('ID_DATA.db') c = conn.cursor() c.execute('''CREATE TABLE IF NOT EXISTS CookiesCache (UID TEXT PRIMARY KEY, MYSID TEXT, Cookies TEXT);''') if mode == 1: if mys: cursor = c.execute("SELECT * FROM CookiesCache WHERE MYSID = ?",(mys,)) c_data = cursor.fetchall() else: cursor = c.execute("SELECT * FROM CookiesCache WHERE UID = ?",(uid,)) c_data = cursor.fetchall() elif mode == 2: cursor = c.execute("SELECT * FROM CookiesCache WHERE MYSID = ?",(uid,)) c_data = cursor.fetchall() if len(c_data)==0: 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[1],uid)) if mode == 2: c.execute("INSERT OR IGNORE INTO CookiesCache (Cookies,MYSID) \ VALUES (?, ?)",(row2[1],uid)) use = row2[1] else: use = c_data[0][2] if mys: try: c.execute("UPDATE CookiesCache SET UID = ? WHERE MYSID=?",(uid,mys)) except: c.execute("UPDATE CookiesCache SET MYSID = ? WHERE UID=?",(mys,uid)) conn.commit() conn.close() return use async def cookiesDB(uid,Cookies,qid): conn = sqlite3.connect('ID_DATA.db') c = conn.cursor() 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 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 NewCookiesTable WHERE UID = ?",(uid,)) c_data = cursor.fetchall() cookies = c_data[0][1] except: return return cookies def random_hex(length): result = hex(random.randint(0,16**length)).replace('0x','').upper() if len(result)