mirror of
https://github.com/ikunshare/Onekey.git
synced 2026-01-13 00:27:32 +08:00
rm: 搜索游戏自动获取App ID
This commit is contained in:
90
main.py
90
main.py
@@ -9,7 +9,6 @@ import logging
|
||||
import ujson as json
|
||||
import time
|
||||
import sys
|
||||
import psutil
|
||||
import asyncio
|
||||
from aiohttp import ClientSession, ClientError
|
||||
from pathlib import Path
|
||||
@@ -22,8 +21,7 @@ def init_log():
|
||||
stream_handler.setLevel(logging.DEBUG)
|
||||
fmt_string = '%(log_color)s[%(name)s][%(levelname)s]%(message)s'
|
||||
log_colors = {
|
||||
'DEBUG': 'cyan',
|
||||
'INFO': 'green',
|
||||
'INFO': 'cyan',
|
||||
'WARNING': 'yellow',
|
||||
'ERROR': 'red',
|
||||
'CRITICAL': 'purple'
|
||||
@@ -35,34 +33,34 @@ def init_log():
|
||||
|
||||
|
||||
# 生成配置文件
|
||||
def gen_config_file():
|
||||
async def gen_config_file():
|
||||
default_config ={
|
||||
"Github_Personal_Token": "",
|
||||
"Custom_Steam_Path": "",
|
||||
"QA1": "温馨提示:Github_Personal_Token可在Github设置的最底下开发者选项找到,详情看教程",
|
||||
"教程": "https://lyvx-my.sharepoint.com/:w:/g/personal/ikun_ikunshare_com/EWqIqyCElLNLo_CKfLbqix0BWU_O03HLzEHQKHdJYrUz-Q?e=79MZjw"
|
||||
}
|
||||
with open("./config.json", "w", encoding="utf-8") as f:
|
||||
f.write(json.dumps(default_config, indent=2, ensure_ascii=False,
|
||||
async with aiofiles.open("./config.json", mode="w", encoding="utf-8") as f:
|
||||
await f.write(json.dumps(default_config, indent=2, ensure_ascii=False,
|
||||
escape_forward_slashes=False))
|
||||
f.close()
|
||||
await f.close()
|
||||
log.info(' 🖱️ 程序可能为第一次启动,请填写配置文件后重新启动程序')
|
||||
|
||||
|
||||
# 加载配置文件
|
||||
def load_config():
|
||||
async def load_config():
|
||||
if not os.path.exists('./config.json'):
|
||||
gen_config_file()
|
||||
await gen_config_file()
|
||||
os.system('pause')
|
||||
sys.exit()
|
||||
else:
|
||||
with open("./config.json", "r", encoding="utf-8") as f:
|
||||
config = json.loads(f.read())
|
||||
async with aiofiles.open("./config.json", mode="r", encoding="utf-8") as f:
|
||||
config = json.loads(await f.read())
|
||||
return config
|
||||
|
||||
|
||||
log = init_log()
|
||||
config = load_config()
|
||||
config = asyncio.run(load_config())
|
||||
lock = asyncio.Lock()
|
||||
|
||||
|
||||
@@ -74,9 +72,9 @@ print('\033[1;32;40m | |_| | | | \\ | | |___ | | \\ \\ | |___ / /' + '\033
|
||||
print('\033[1;32;40m \\_____/ |_| \\_| |_____| |_| \\_\\ |_____| /_/' + '\033[0m')
|
||||
log.info('作者ikun0014')
|
||||
log.info('本项目基于wxy1343/ManifestAutoUpdate进行修改,采用GPL V3许可证')
|
||||
log.info('版本:1.1.4')
|
||||
log.info('版本:1.1.5')
|
||||
log.info('项目仓库:https://github.com/ikunshare/Onekey')
|
||||
log.debug('官网:ikunshare.com')
|
||||
log.info('官网:ikunshare.com')
|
||||
log.warning('本项目完全开源免费,如果你在淘宝,QQ群内通过购买方式获得,赶紧回去骂商家死全家\n交流群组:\n点击链接加入群聊【𝗶𝗸𝘂𝗻分享】:https://qm.qq.com/q/d7sWovfAGI\nhttps://t.me/ikunshare_group')
|
||||
|
||||
|
||||
@@ -102,42 +100,6 @@ def stack_error(exception):
|
||||
return ''.join(stack_trace)
|
||||
|
||||
|
||||
# 从Steam API直接搜索游戏信息
|
||||
async def search_game_info(search_term):
|
||||
async with ClientSession() as session:
|
||||
url = f'https://steamui.com/loadGames.php?search={search_term}'
|
||||
async with session.get(url) as r:
|
||||
if r.status == 200:
|
||||
data = await r.json()
|
||||
games = data.get('games', [])
|
||||
return games
|
||||
else:
|
||||
log.error("⚠ 获取游戏信息失败")
|
||||
return []
|
||||
|
||||
|
||||
# 通过游戏名查找appid
|
||||
async def find_appid_by_name(game_name):
|
||||
games = await search_game_info(game_name)
|
||||
|
||||
if games:
|
||||
log.info("🔍 找到以下匹配的游戏:")
|
||||
for idx, game in enumerate(games, 1):
|
||||
gamename = game['schinese_name'] if game['schinese_name'] else game['name']
|
||||
log.info(f"{idx}. {gamename} (AppID: {game['appid']})")
|
||||
|
||||
while True:
|
||||
choice = input("请选择游戏编号:")
|
||||
if choice.isdigit() and 1 <= int(choice) <= len(games):
|
||||
selected_game = games[int(choice) - 1]
|
||||
log.info(f"✅ 选择的游戏: {selected_game['schinese_name']} (AppID: {selected_game['appid']})")
|
||||
return selected_game['appid'], selected_game['schinese_name']
|
||||
else:
|
||||
log.error(f"⚠ 错误的编号:{choice},请重新输入。")
|
||||
|
||||
return None, None
|
||||
|
||||
|
||||
# 下载清单
|
||||
async def get(sha, path, repo, session):
|
||||
url_list = [
|
||||
@@ -200,7 +162,7 @@ async def depotkey_merge(config_path, depots_config):
|
||||
async with lock:
|
||||
log.error(' 👋 Steam默认配置不存在,可能是没有登录账号')
|
||||
return
|
||||
with open(config_path, encoding='utf-8') as f:
|
||||
async with aiofiles.open(config_path, encoding='utf-8') as f:
|
||||
config = vdf.load(f)
|
||||
software = config['InstallConfigStore']['Software']
|
||||
valve = software.get('Valve') or software.get('valve')
|
||||
@@ -208,7 +170,7 @@ async def depotkey_merge(config_path, depots_config):
|
||||
if 'depots' not in steam:
|
||||
steam['depots'] = {}
|
||||
steam['depots'].update(depots_config['depots'])
|
||||
with open(config_path, 'w', encoding='utf-8') as f:
|
||||
async with aiofiles.open(config_path, mode='w', encoding='utf-8') as f:
|
||||
vdf.dump(config, f, pretty=True)
|
||||
return True
|
||||
|
||||
@@ -220,10 +182,10 @@ async def stool_add(depot_data, app_id):
|
||||
|
||||
async with lock:
|
||||
log.info(f' ✅ SteamTools解锁文件生成: {lua_filepath}')
|
||||
with open(lua_filepath, "w", encoding="utf-8") as lua_file:
|
||||
lua_file.write(f'addappid({app_id}, 1, "None")\n')
|
||||
async with aiofiles.open(lua_filepath, mode="w", encoding="utf-8") as lua_file:
|
||||
await lua_file.write(f'addappid({app_id}, 1, "None")\n')
|
||||
for depot_id, depot_key in depot_data:
|
||||
lua_file.write(f'addappid({depot_id}, 1, "{depot_key}")\n')
|
||||
await lua_file.write(f'addappid({depot_id}, 1, "{depot_key}")\n')
|
||||
|
||||
luapacka_path = steam_path / "config" / "stplug-in" / "luapacka.exe"
|
||||
subprocess.run([str(luapacka_path), str(lua_filepath)])
|
||||
@@ -284,7 +246,7 @@ async def check_github_api_rate_limit(headers, session):
|
||||
|
||||
|
||||
# 主函数
|
||||
async def main(app_id, game_name):
|
||||
async def main(app_id):
|
||||
app_id_list = list(filter(str.isdecimal, app_id.strip().split('-')))
|
||||
app_id = app_id_list[0]
|
||||
|
||||
@@ -336,10 +298,10 @@ async def main(app_id, game_name):
|
||||
if await greenluma_add([int(i) for i in depot_config['depots'] if i.isdecimal()]):
|
||||
log.info(' ✅ 找到GreenLuma,已添加解锁文件')
|
||||
log.info(f' ✅ 清单最后更新时间:{date}')
|
||||
log.info(f' ✅ 入库成功: {app_id}:{game_name}')
|
||||
log.info(f' ✅ 入库成功: {app_id}')
|
||||
os.system('pause')
|
||||
return True
|
||||
log.error(f' ⚠ 清单下载或生成失败: {app_id}:{game_name}')
|
||||
log.error(f' ⚠ 清单下载或生成失败: {app_id}')
|
||||
os.system('pause')
|
||||
return False
|
||||
|
||||
@@ -352,17 +314,11 @@ repos = [
|
||||
]
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
log.debug('App ID可以在SteamDB或Steam商店链接页面查看')
|
||||
user_input = input("请输入游戏AppID或名称:").strip()
|
||||
appid, game_name = asyncio.run(find_appid_by_name(user_input))
|
||||
if not appid:
|
||||
log.error(' ⚠ 未找到匹配的游戏,请尝试其他名称。')
|
||||
else:
|
||||
asyncio.run(main(appid, game_name))
|
||||
log.info('App ID可以在SteamDB或Steam商店链接页面查看')
|
||||
app_id = input("请输入游戏AppID或名称:").strip()
|
||||
asyncio.run(main(app_id))
|
||||
except KeyboardInterrupt:
|
||||
exit()
|
||||
except Exception as e:
|
||||
log.error(f' ⚠ 发生错误: {stack_error(e)}')
|
||||
traceback.print_exc()
|
||||
if not user_input:
|
||||
os.system('pause')
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
aiofiles==24.1.0
|
||||
aiohttp==3.9.5
|
||||
colorlog==6.8.2
|
||||
psutil==6.0.0
|
||||
ujson==5.10.0
|
||||
vdf==3.4
|
||||
nuitka==2.4.8
|
||||
|
||||
Reference in New Issue
Block a user