diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 05e4240..061b943 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,14 +14,12 @@ jobs: - name: Check out git repository uses: actions/checkout@v4 - # Push tag to GitHub if package.json version's tag is not tagged - name: Get package version shell: powershell run: | $version = (Get-Content package.json | ConvertFrom-Json).version echo "PACKAGE_VERSION=$version" >> $env:GITHUB_ENV - - name: Set up Python 3.11 uses: actions/setup-python@v3 with: @@ -65,14 +63,17 @@ jobs: - name: Release uses: softprops/action-gh-release@v2 with: + tag_name: v${{ env.PACKAGE_VERSION }} + files: build/Onekey---v${{ env.PACKAGE_VERSION }}.exe prerelease: false draft: false - tag_name: v${{ env.PACKAGE_VERSION }} - files: | - build/Onekey---v${{ env.PACKAGE_VERSION }}.exe env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - + - name: Upload to Telegram Channel run: | - curl -F chat_id=${{ secrets.TELEGRAM_TO }} \ -F document=@build/Onekey---v${{ env.PACKAGE_VERSION }}.exe \ -F caption="Onekey 's New Update ${{ env.PACKAGE_VERSION }}" \ -F parse_mode=Markdown \ https://api.telegram.org/bot${{ secrets.TELEGRAM_TOKEN }}/sendDocument + & curl -F "chat_id=${{ secrets.TELEGRAM_TO }}" ` + -F "document=@build/Onekey---v${{ env.PACKAGE_VERSION }}.exe" ` + -F "caption=Onekey's New Update ${{ env.PACKAGE_VERSION }}" ` + -F "parse_mode=Markdown" ` + "https://api.telegram.org/bot${{ secrets.TELEGRAM_TOKEN }}/sendDocument" diff --git a/.gitignore b/.gitignore index 1008384..8c43d45 100644 --- a/.gitignore +++ b/.gitignore @@ -170,3 +170,5 @@ config.json *.exe *.dll /main.dist +/.vscode +/.vs diff --git a/common/check.py b/common/check.py index 1084b36..d94146e 100644 --- a/common/check.py +++ b/common/check.py @@ -20,11 +20,11 @@ async def check_github_api_rate_limit(headers, session): log.info(f' 🔄 剩余请求次数: {remaining_requests}') if remaining_requests == 0: - log.warning(f'⚠ GitHub API 请求数已用尽,将在 {reset_time_formatted} 重置,建议生成一个填在配置文件里') + log.warning(f'⚠ GitHub API 请求数已用尽,将在 {reset_time_formatted} 重置,建议生成一个填在配置文件里') else: - log.error('⚠ Github请求数检查失败,网络错误') + log.error('⚠ Github请求数检查失败,网络错误') except ClientError as e: - log.error(f'⚠ 检查Github API 请求数失败,{stack_error(e)}') + log.error(f'⚠ 检查Github API 请求数失败,{stack_error(e)}') except Exception as e: log.error(f'⚠ 发生错误: {stack_error(e)}') diff --git a/common/config.py b/common/config.py index c0e5ccf..d69acd9 100644 --- a/common/config.py +++ b/common/config.py @@ -13,22 +13,14 @@ DEFAULT_CONFIG = { "教程": "https://ikunshare.com/Onekey_tutorial" } -def validate_config(config): - # 检查配置文件的有效性 - required_keys = DEFAULT_CONFIG.keys() - for key in required_keys: - if key not in config: - return False - return True - async def gen_config_file(): try: 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)) - log.info('🖱️ 程序可能为第一次启动或配置重置,请填写配置文件后重新启动程序') + log.info('🖱️ 程序可能为第一次启动或配置重置,请填写配置文件后重新启动程序') except Exception as e: - log.error(f'❌ 配置文件生成失败,{stack_error(e)}') + log.error(f'❌ 配置文件生成失败,{stack_error(e)}') async def load_config(): if not os.path.exists('./config.json'): @@ -39,16 +31,9 @@ async def load_config(): try: async with aiofiles.open("./config.json", mode="r", encoding="utf-8") as f: config = json.loads(await f.read()) - - if not validate_config(config): - log.error("配置文件格式无效,正在重置为默认配置...") - await gen_config_file() - os.system('pause') - sys.exit() - return config except Exception as e: - log.error(f"配置文件加载失败,原因: {stack_error(e)}") + log.error(f"配置文件加载失败,原因: {stack_error(e)},重置配置文件中...") os.remove("./config.json") await gen_config_file() os.system('pause') diff --git a/common/dkey_merge.py b/common/dkey_merge.py index 1fee7e4..b4214a9 100644 --- a/common/dkey_merge.py +++ b/common/dkey_merge.py @@ -9,7 +9,7 @@ lock = asyncio.Lock() async def depotkey_merge(config_path: Path, depots_config: dict) -> bool: if not config_path.exists(): async with lock: - log.error('👋 Steam默认配置不存在,可能是没有登录账号') + log.error('👋 Steam默认配置不存在,可能是没有登录账号') return False try: @@ -21,7 +21,7 @@ async def depotkey_merge(config_path: Path, depots_config: dict) -> bool: config.get('InstallConfigStore', {}).get('Software', {}).get('valve') if steam is None: - log.error('⚠ 找不到Steam配置,请检查配置文件') + log.error('⚠ 找不到Steam配置,请检查配置文件') return False depots = steam.setdefault('depots', {}) @@ -36,5 +36,5 @@ async def depotkey_merge(config_path: Path, depots_config: dict) -> bool: except Exception as e: async with lock: - log.error(f'❌ 合并失败,原因: {e}') + log.error(f'❌ 合并失败,原因: {e}') return False diff --git a/common/init_text.py b/common/init_text.py index 943e195..5dc42e6 100644 --- a/common/init_text.py +++ b/common/init_text.py @@ -16,9 +16,10 @@ def init(): for line in banner_lines: print(line) - log.info('作者:ikun0014') + log.info('作者:ikun0014') log.info('本项目采用GNU General Public License v3开源许可证') - log.info('版本:1.2.5') - log.info('项目仓库:https://github.com/ikunshare/Onekey') - log.info('官网:ikunshare.com') - log.warning('本项目完全开源免费,如果你在淘宝,QQ群内通过购买方式获得,赶紧回去骂商家死全家\n交流群组:\nhttps://qm.qq.com/q/d7sWovfAGI\nhttps://t.me/ikunshare_qun') + log.info('版本:1.2.6') + log.info('项目仓库:https://github.com/ikunshare/Onekey') + log.info('官网:ikunshare.com') + log.warning('本项目完全开源免费,如果你在淘宝,QQ群内通过购买方式获得,赶紧回去骂商家死全家\n交流群组:\nhttps://qm.qq.com/q/d7sWovfAGI\nhttps://t.me/ikunshare_qun') + log.warning('如果本项目中的Emoji(即表情包)无法正常显示,请使用支持Emoji的终端(例如Windows Terminal)') diff --git a/common/main_func.py b/common/main_func.py index 2b96716..051587b 100644 --- a/common/main_func.py +++ b/common/main_func.py @@ -53,7 +53,7 @@ async def main(app_id: str, repos: list) -> bool: selected_repo, latest_date = await get_latest_repo_info(session, repos, app_id, headers) if selected_repo: - log.info(f'🔄 选择清单仓库:{selected_repo}') + log.info(f'🔄 选择清单仓库:{selected_repo}') url = f'https://api.github.com/repos/{selected_repo}/branches/{app_id}' r_json = await fetch_branch_info(session, url, headers) @@ -72,7 +72,7 @@ async def main(app_id: str, repos: list) -> bool: if isSteamTools: await migrate(st_use=True, session=session) await stool_add(collected_depots, app_id) - log.info('✅ 找到SteamTools,已添加解锁文件') + log.info('✅ 找到SteamTools,已添加解锁文件') if isGreenLuma: await migrate(st_use=False, session=session) @@ -80,9 +80,9 @@ async def main(app_id: str, repos: list) -> bool: depot_config = {'depots': {depot_id: {'DecryptionKey': depot_key} for depot_id, depot_key in collected_depots}} await depotkey_merge(steam_path / 'config' / 'config.vdf', depot_config) if await greenluma_add([int(i) for i in depot_config['depots'] if i.isdecimal()]): - log.info('✅ 找到GreenLuma,已添加解锁文件') + log.info('✅ 找到GreenLuma,已添加解锁文件') - log.info(f'✅ 清单最后更新时间:{latest_date}') + log.info(f'✅ 清单最后更新时间:{latest_date}') log.info(f'✅ 入库成功: {app_id}') os.system('pause') return True diff --git a/common/migration.py b/common/migration.py index f9f1043..13a134e 100644 --- a/common/migration.py +++ b/common/migration.py @@ -33,7 +33,7 @@ async def download_setup_file(session) -> None: async def migrate(st_use: bool, session) -> None: if st_use: - log.info('🔄 检测到你正在使用 SteamTools,尝试迁移旧文件') + log.info('🔄 检测到你正在使用 SteamTools,尝试迁移旧文件') if directory.exists(): for file in directory.iterdir(): @@ -46,7 +46,7 @@ async def migrate(st_use: bool, session) -> None: except Exception as e: log.error(f'⚠ 重命名失败 {file.name} -> {new_filename}: {e}') else: - log.error('⚠ 故障,正在重新安装 SteamTools') + log.error('⚠ 故障,正在重新安装 SteamTools') temp_path.mkdir(parents=True, exist_ok=True) await download_setup_file(session) @@ -56,4 +56,4 @@ async def migrate(st_use: bool, session) -> None: file.unlink() temp_path.rmdir() else: - log.info('✅ 未使用 SteamTools,停止迁移') + log.info('✅ 未使用 SteamTools,停止迁移') diff --git a/main.py b/main.py index 9a2721f..5cb8514 100644 --- a/main.py +++ b/main.py @@ -25,26 +25,28 @@ def check_system_msg(): os_type = platform.system() try: if os_type != 'Windows': - log.error(f'❌ 不用Windows你想上天?{os_type}') - sys.quit() + log.error(f'❌ 请使用Windows系统!当前系统:{os_type}') + sys.exit() except Exception as e: - log.error(f'❌ 获取系统类型失败:{stack_error(e)}') - sys.quit() - os_version = sys.getwindowsversion().major + log.error(f'❌ 获取系统类型失败:{stack_error(e)}') + sys.exit() + try: - if os_version < 10: - log.error(f'❌ 低于Windows10就别用了买台新电脑吧!当前版本:Windows {os_version}') - sys.quit() + os_version = platform.version().split('.')[0] + if int(os_version) < 10: + log.error(f'❌ 请使用Windows 10或更高版本!当前版本:Windows {os_version}') + sys.exit() except Exception as e: log.error(f'❌ 获取系统版本失败:{stack_error(e)}') - sys.quit() + sys.exit() def prompt_app_id(): - app_id = input(f"{Fore.CYAN}{Back.BLACK}{Style.BRIGHT}🤔 请输入游戏AppID:{Style.RESET_ALL}").strip() + while True: + app_id = input(f"{Fore.CYAN}{Back.BLACK}{Style.BRIGHT}🤔 请输入游戏AppID:{Style.RESET_ALL}").strip() if re.match(r'^\d+$', app_id): return app_id else: - print(f"{Fore.RED}⚠ 无效的AppID,请输入数字!{Style.RESET_ALL}") + print(f"{Fore.RED}⚠ 无效的AppID,请输入数字!{Style.RESET_ALL}") async def main_loop(): while True: @@ -61,10 +63,8 @@ async def run(): except KeyboardInterrupt: log.info("👋 程序已退出") except Exception as e: - log.error(f' ⚠ 发生错误: {stack_error(e)},将在5秒后退出') + log.error(f' ⚠ 发生错误: {stack_error(e)},将在5秒后退出') await asyncio.sleep(5) - finally: - asyncio.get_event_loop().stop() if __name__ == '__main__': try: diff --git a/package.json b/package.json index bf9610f..d04c2fb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "onekey", - "version": "1.2.5", + "version": "1.2.6", "description": "一个Steam仓库清单下载器", "main": "index.js", "scripts": {