# 解小黑屋实现 # 未完工 from Config import * from API_TitleServer import * from GetPreview import apiGetUserPreview from HelperLogInOut import apiLogout import json from loguru import logger import time from datetime import datetime import asyncio def isUserLoggedIn(userId): isLogin = json.loads(apiGetUserPreview(userId, True))['isLogin'] logger.debug(f"用户 {userId} 是否登录: {isLogin}") return isLogin def getHumanReadableTime(unixTime): '''将 Unix 时间戳转换为人类可读的时间''' # 减一个小时,因为舞萌貌似是 UTC+9 timestamp = int(unixTime) - 3600 return datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S') def getMaimaiUNIXTime(mmddhhmmss, year=2025): """ 解析用户输入的 MMDDHHMMSS 格式的时间,返回 Unix 时间戳 时间会被推后一个小时,因为舞萌貌似是 UTC+9 """ #date_time_str = f"{year}{mmddhhmmss}" # 舞萌需要把小时按往后推一个小时来计算,加上一个小时 date_time_str = f"{year}{mmddhhmmss[:4]}{int(mmddhhmmss[4:6])+1:02}{mmddhhmmss[6:]}" date_time_obj = datetime.strptime(date_time_str, '%Y%m%d%H%M%S') # 将 datetime 对象转换为 Unix 时间戳 unix_timestamp = int(time.mktime(date_time_obj.timetuple())) logger.info(f"转换出了时间戳: {unix_timestamp}") return unix_timestamp def logOut(userId, Timestamp): """极其简单的登出实现,成功返回 True,失败返回 False 注意:不会检查用户是否真的登出了,只会尝试登出""" try: if apiLogout(Timestamp, userId, True)['returnCode'] == 1: # 成功送出了登出请求 logger.debug(f"已成功尝试登出用户 {userId}") return True except: logger.error(f"登出用户 {userId} 的时候发生了错误") return False def isCorrectTimestamp(timestamp, userId): ''' 动作:给定一个时间戳,用它尝试登出用户,然后检查用户是否成功登出。 如果用户成功登出,返回 True;否则返回 False。 ''' if not logOut(userId, timestamp): logger.error(f"用时间戳 {timestamp} 登出用户 {userId} 的时候发生了错误") return False isLoggedOut = not isUserLoggedIn(userId) logger.debug(f"时间戳 {timestamp} 是否正确: {isLoggedOut}") return isLoggedOut def findCorrectTimestamp(timestamp, userId, max_attempts=600): # 初始化偏移量 offset = 1 attempts = 0 while attempts < max_attempts: # 尝试当前时间戳 currentTryTimestamp = timestamp if isCorrectTimestamp(currentTryTimestamp, userId): logger.info(f"正确的时间戳: {currentTryTimestamp}") return currentTryTimestamp # 增加偏移量尝试 currentTryTimestamp = timestamp + offset if isCorrectTimestamp(currentTryTimestamp, userId): logger.info(f"正确的时间戳(在给定时间以后): {currentTryTimestamp}") return currentTryTimestamp # 减少偏移量尝试 currentTryTimestamp = timestamp - offset if isCorrectTimestamp(currentTryTimestamp, userId): logger.info(f"正确的时间戳(在给定时间以前): {currentTryTimestamp}") return currentTryTimestamp # 增加尝试次数和偏移量 attempts += 2 offset += 1 logger.error(f"无法找到正确的时间戳,尝试次数超过了 {max_attempts}") return None if __name__ == "__main__": human_time = "0207155500" beginTimestamp = getMaimaiUNIXTime(human_time) print(f"我们将开始用这个时间戳开始尝试: {beginTimestamp}") correctTimestamp = findCorrectTimestamp(beginTimestamp, testUid2)