Compare commits

...

154 Commits

Author SHA1 Message Date
ikun0014
fd6df047dc 更新 sync.yml 2024-11-11 23:34:34 +08:00
ikun0014
df2fd4a10a 1.3.3 2024-11-11 23:33:08 +08:00
ikun0014
72bb4a7e97 更新 release.yml 2024-11-11 23:33:06 +08:00
ikun0014
6b37034360 feat: 尝试增加Gitee 2024-11-11 23:32:27 +08:00
ikun0014
8ca12ea7b0 version: Update to 1.3.2 2024-11-10 18:31:01 +08:00
ikun0014
b89c38721f 1.3.2 2024-11-10 18:30:33 +08:00
ikun0014
76d3d2caeb rm: CI Build 2024-11-10 18:30:17 +08:00
ikun0014
38462bf6cd chore: 代码优化 && 更换进度条模块 2024-11-10 17:51:25 +08:00
ikun0014
3d028a0e0c 搞错了 2024-10-27 14:38:44 +08:00
ikun0014
acfad07a07 [release]切Python版本 2024-10-27 14:35:52 +08:00
ikun0014
479661a8a3 [release]切换Nuitka版本 2024-10-27 14:30:38 +08:00
ikun0014
a5d100078b [release]build: 更新Python版本 2024-10-27 14:18:44 +08:00
ikun0014
0647419bdf 1.3.1 2024-10-27 14:13:56 +08:00
ikun0014
e9b466f6df [release]version: 1.3.1 2024-10-27 14:13:48 +08:00
ikun0014
7e72bea8a1 fix: 尝试修复ImportError 2024-10-27 14:12:34 +08:00
ikun0014
bb789d8cf7 build: ci 2024-10-19 11:37:50 +08:00
ikun0014
3178303b0a [release]ui: 移除所有Emoji;修改日志格式看起来更Print 2024-10-19 11:34:20 +08:00
ikun0014
738e0eb617 1.3.0 2024-10-19 11:19:29 +08:00
ikun0014
fb0806aea7 [release] 在main分支版本下删除所有Emoji 2024-10-19 11:19:27 +08:00
ikun0014
2a02d07e8d rm: all emoji 2024-10-19 11:18:18 +08:00
ikun0014
df4342957f revert: ui 2024-10-19 11:15:21 +08:00
ikun0014
e2f2120b0c fix: retrying 2024-10-18 21:42:27 +08:00
ikun0014
580cd44247 fix: trying 2024-10-18 21:34:11 +08:00
ikun0014
0e57caefd1 chore: 你CI个集贸 2024-10-18 21:28:04 +08:00
ikun0014
062e58ea57 ui: 为了拖慢各位的时间我加了一个逆天效果 2024-10-18 21:22:21 +08:00
ikun0014
651d9f79b2 1.2.9 2024-10-17 21:32:49 +08:00
ikun0014
8f8aaf81a1 ui: 随便修改一下 2024-10-17 21:32:21 +08:00
ikun0014
e8dd606db4 Merge pull request #45 from muwenyan521/main
feat:优化代码&更清晰的图标
2024-10-13 22:13:23 +08:00
WangXianming
b50183e723 feat:优化代码&更清晰的图标 2024-10-13 21:54:28 +08:00
ikun0014
74c5464bb4 1.2.8 2024-10-13 17:30:18 +08:00
ikun0014
7f087983d3 feat: 对港澳台或境外用户更加友好 2024-10-13 17:30:06 +08:00
ikun0014
9a3668a2f4 Update README.md 2024-10-13 15:55:26 +08:00
ikun0014
15d2d46dda Create FUNDING.yml 2024-10-13 15:54:36 +08:00
ikun0014
c03df383a0 1.2.7 2024-10-13 15:46:21 +08:00
ikun0014
5893e07901 feat: 增加Github CDN 2024-10-13 15:45:44 +08:00
ikun0014
bf6024e4c1 feat: 加多点try防止出事 2024-10-13 15:45:22 +08:00
ikun0014
39d426d806 Merge pull request #43 from muwenyan521/main
chore:改点东西
2024-10-12 20:48:19 +08:00
WangXianming
26fbb82357 Update build.yml 2024-10-12 20:28:29 +08:00
WangXianming
6fc06a681a 1.2.6 2024-10-12 20:19:00 +08:00
WangXianming
600a8679f3 chore:改点东西 2024-10-12 20:06:27 +08:00
WangXianming
3fa925c161 Merge branch 'main' of https://github.com/muwenyan521/Onekey 2024-10-12 19:23:41 +08:00
ikun0014
3642dbde30 chore: 修改一下 2024-10-12 16:31:34 +08:00
ikun0014
cec2d0fedb fix: 再修一次 2024-10-12 16:19:11 +08:00
ikun0014
59bcd7bcdc chore: 再加点料 2024-10-12 15:58:06 +08:00
ikun0014
57f285af37 fix: 这次总能用了吧 2024-10-12 15:57:10 +08:00
ikun0014
afdcc5d51e fix 2024-10-11 21:48:18 +08:00
ikun0014
f8bc9ace69 chore: 让我微调一下() 2024-10-11 21:21:25 +08:00
ikun0014
7135e13fd7 更新 build.yml 2024-10-11 20:12:30 +08:00
ikun0014
b87867088b 1.2.5 2024-10-11 20:05:01 +08:00
ikun0014
fc03979107 chore: 丝滑刷版本号测试 2024-10-11 20:04:42 +08:00
WangXianming
d36678f53c 更新 .gitignore 2024-10-05 17:51:55 +08:00
WangXianming
0418dbb685 Merge branch 'ikunshare:main' into main 2024-10-02 21:46:52 +08:00
WangXianming
0c783b3a7b 更新 .gitignore 2024-10-02 18:34:03 +08:00
dependabot[bot]
eb1501a43a Merge pull request #42 from ikunshare/dependabot/pip/aiohttp-3.10.2 2024-10-01 14:10:32 +00:00
ikun0014
22df5426d8 Merge pull request #41 from muwenyan521/main
feat:尝试解决配置问题&优化代码
2024-10-01 14:02:08 +00:00
dependabot[bot]
ea3b682eb7 build(deps): bump aiohttp from 3.9.5 to 3.10.2
Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.9.5 to 3.10.2.
- [Release notes](https://github.com/aio-libs/aiohttp/releases)
- [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/aiohttp/compare/v3.9.5...v3.10.2)

---
updated-dependencies:
- dependency-name: aiohttp
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-01 13:57:35 +00:00
WangXianming
cf0d508237 内容更新 2024-10-01 21:19:29 +08:00
WangXianming
5886b1e4b5 feat:尝试解决配置问题&优化代码 2024-10-01 11:54:32 +08:00
WangXianming
a1cde89971 1.2.4 2024-09-28 14:20:51 +08:00
WangXianming
697a3769ec feat:优化代码 2024-09-28 14:14:14 +08:00
ikun
b1b7e720c0 test: 未知问题 2024-09-27 18:17:33 +08:00
ikun
0eb0fb3c7e add: dev 2024-09-27 16:20:28 +08:00
ikun
59d5852d11 fix? 2024-09-27 13:34:08 +08:00
ikun
5ac9f8f28a 1.2.3 2024-09-27 13:21:09 +08:00
ikun
b8d76f98da fix: 尝试修复下载速度过慢导致Timeout 2024-09-27 13:20:49 +08:00
ikun
1e5f0b6774 rm: PyPI 2024-09-22 17:18:39 +08:00
ikun
5357ed5fe7 Merge pull request #36 from muwenyan521/main
镜像源
2024-09-22 15:45:13 +08:00
WangXianming
5cd5e89ed7 feat:镜像源 2024-09-22 15:39:35 +08:00
ikun
e34cad1889 fix: 少个参数 2024-09-20 21:35:00 +08:00
ikun
4aa1c22c25 feat: 优化 2024-09-20 20:02:21 +08:00
ikun
8ee7765bb0 Revert 2024-09-19 20:41:47 +08:00
ikun
4bd1362317 Revert "Merge branch 'main' of https://github.com/ikunshare/Onekey"
This reverts commit 5356947022, reversing
changes made to 6a9fed2e39.
2024-09-19 20:40:35 +08:00
ikun
3c0f2ecd6f Update README.md 2024-09-17 15:28:58 +08:00
ikun
7590f3f791 Merge pull request #28 from muwenyan521/main
[WIP] 代码美化与优化
2024-09-17 15:10:58 +08:00
ikun
7adcf004e5 Merge branch 'main' into main 2024-09-17 15:10:50 +08:00
ikun
9ff08d0f91 up: sync 2024-09-17 15:08:53 +08:00
ikun
5356947022 Merge branch 'main' of https://github.com/ikunshare/Onekey 2024-09-17 14:54:08 +08:00
ikun
6a9fed2e39 1.2.2 2024-09-17 14:54:03 +08:00
ikun
8cefcae6a7 feat: 花里胡哨 2024-09-17 14:53:08 +08:00
WangXianming
0a3ee59d45 ReadMe更新 2024-09-16 19:30:43 +08:00
WangXianming
194e6a41d2 Merge pull request #3 from muwenyan521/Manage
版本变更
2024-09-16 18:53:11 +08:00
WangXianming
07079a6d58 版本变更 2024-09-16 18:49:27 +08:00
WangXianming
4ed51987ba Merge pull request #2 from muwenyan521/Manage
进度条美化
2024-09-16 17:37:23 +08:00
WangXianming
28db8b15db 进度条美化 2024-09-16 17:32:14 +08:00
WangXianming
c33b871188 Merge pull request #1 from muwenyan521/Manage
Manage
2024-09-16 17:14:19 +08:00
WangXianming
9bd6cc5a60 代码优化 2024-09-16 17:13:08 +08:00
ikun
87594e0bf0 Update python-publish.yml 2024-09-16 15:13:38 +08:00
WangXianming
6f4dac876f 优化代码 2024-09-16 15:06:13 +08:00
ikun
2073fbdd9a Create python-publish.yml 2024-09-16 14:39:33 +08:00
ikun
a821938f01 fix: requirements 2024-09-16 14:37:49 +08:00
ikun
8bc6095dcf 1.2.1 2024-09-16 13:45:37 +08:00
ikun
b1b0fe9517 feat: 进度条 2024-09-16 13:45:21 +08:00
ikun
5964b5fb4e Update README.md 2024-09-16 10:13:22 +08:00
ikun
aa27e11cd7 Merge branch 'main' of https://github.com/ikunshare/Onekey 2024-09-15 22:22:47 +08:00
ikun
ecc454de61 chore: 代码优化 2024-09-15 22:22:33 +08:00
ikun
1cdb19b3df Update README.md 2024-09-15 19:17:11 +08:00
ikun
53b76aea64 chore: 忘了点东西 2024-09-15 19:14:03 +08:00
ikun
7e3e06ac00 fix: 手滑把依赖删了 2024-09-15 18:50:09 +08:00
ikun
cfe9c5c8d6 Update build.yml 2024-09-15 18:32:25 +08:00
ikun
b8f0b5caf4 Update build.yml 2024-09-15 18:23:49 +08:00
ikun
c866f19967 Update build.yml 2024-09-15 18:10:50 +08:00
ikun
d68a49cdd1 Update build.yml 2024-09-15 17:57:50 +08:00
ikun
3fd5590530 Update build.yml 2024-09-15 17:56:47 +08:00
ikun
213f089c1e Update build.yml 2024-09-15 17:33:53 +08:00
ikun
069ac110e3 Update build.yml 2024-09-15 17:30:15 +08:00
ikun
8296f03f70 Update build.yml 2024-09-15 17:29:22 +08:00
ikun
2041403c87 Update build.yml 2024-09-15 17:23:39 +08:00
ikun
7411c95c05 Update build.yml 2024-09-15 17:20:01 +08:00
ikun
c7251233c3 Update build.yml 2024-09-15 17:18:23 +08:00
ikun
be1ec3e132 Update build.yml 2024-09-15 17:15:44 +08:00
ikun
15f2f655fc ... 2024-09-15 17:11:20 +08:00
ikun
8106624ed4 Update build.yml 2024-09-15 17:06:50 +08:00
ikun
6c76dd374d fix 2024-09-15 17:02:26 +08:00
ikun
3eec80b45f fix: Build 2024-09-15 16:54:05 +08:00
ikun
04c07c5036 再来 2024-09-15 16:49:03 +08:00
ikun
6e6b933e1a ??? 2024-09-15 16:46:35 +08:00
ikun
bd86a05fad 2024-09-15 16:43:41 +08:00
ikun
cedd86740e fix: byd怎么回事 2024-09-15 16:39:04 +08:00
ikun
f92ced9e80 Update build.yml 2024-09-15 16:33:44 +08:00
ikun
d8d0eb1156 rm: pylint 2024-09-15 16:21:50 +08:00
ikun
63391cb048 代码优化 2024-09-15 16:18:21 +08:00
ikun
98ce0c091a feat: Actions自动编译&&代码工整性 2024-09-15 16:10:41 +08:00
ikun
7c75628966 Delete LICENSE.md 2024-09-15 16:06:20 +08:00
ikun
d5b4aded3e Create LICENSE 2024-09-15 16:06:10 +08:00
ikun
63ce0244b0 Update pylint.yml 2024-09-15 15:21:14 +08:00
ikun
ce41fcb908 Create pylint.yml 2024-09-15 15:19:49 +08:00
ikun
f07fc6447e 更新 requirements.txt 2024-09-12 22:47:07 +08:00
ikun
3e89c58348 更新 README.md 2024-09-12 22:46:42 +08:00
ikun
4ced52a87f feat:治疗傻逼的病 2024-09-11 21:39:44 +08:00
ikun
7352f20eb4 fix:尝试修复大部分人遇到的闪退问题 2024-09-07 18:40:13 +08:00
ikun
6ec83c4196 fix:意外 2024-09-05 21:27:36 +08:00
ikun
a7ce46aa52 fix:兼容问题 2024-09-05 20:54:34 +08:00
ikun
b4ea1edb53 chore: 优化代码工整性 2024-09-01 14:00:20 +08:00
ikun
f555f0273d rm: 搜索游戏自动获取App ID 2024-08-29 17:22:04 +08:00
ikun
3ba8b67f0e fix: bug 2024-08-27 09:48:20 +08:00
ikun
73c92e550e feat: 加入搜索游戏名入库功能
Co-Authored-By: Tibbar <49330075+tibbar213@users.noreply.github.com>
2024-08-26 19:06:05 +08:00
ikun
a2fa038324 feat&&fix: bug!bug!bug! 2024-08-22 22:40:50 +08:00
ikun
ea3aedbab3 fix: 史 2024-08-22 21:48:04 +08:00
ikun
51ccc579f4 feat:配置文件修改 2024-08-22 14:10:30 +08:00
ikun
17e654a68e feat:没什么用懒得发Release 2024-08-21 17:27:50 +08:00
ikun
c4f4fb9e92 feat: 增加一个清单库 2024-08-16 15:11:31 +08:00
ikun
e38af1675c fix: 修改QQ群链接 2024-08-15 19:53:41 +08:00
ikun
50194cf7de 更新 main.py 2024-08-14 19:00:27 +08:00
ikun
7063f2f5dc rm: 移除jsdelivr的CDN服务 2024-08-13 10:25:28 +08:00
ikun
2c6b3bebe1 fix: Github API请求数量为0时不返回错误
史中史代码,看不懂与我无关
2024-08-12 19:18:56 +08:00
ikun
5c74940702 feat: 加了几个加速镜像 2024-08-12 15:08:54 +08:00
ikun
dc64d2a9be feat:死妈倒狗给我坐下 2024-08-11 21:49:37 +08:00
ikun
e31e1c40dc chore: 优化清单下载速度;优化界面
## 优化

清单下载速度
日志
2024-08-06 22:56:43 +08:00
ikun
630f825294 fix:关闭SSL验证以支持Watt ToolKit 2024-07-20 20:20:27 +08:00
ikun
6a4222985a Update README.md 2024-07-19 23:28:07 +08:00
ikun
61ce83ce9c Update LICENSE.md 2024-07-19 23:27:33 +08:00
ikun
658fabd37b 重开吧!!! 2024-07-19 23:19:42 +08:00
ikun
7331920348 删除开源许可证 2024-07-11 19:07:56 +08:00
ikun
e978c6581b 更新 README.md 2024-07-11 10:15:45 +08:00
26 changed files with 1087 additions and 1 deletions

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
# Auto detect text files and perform LF normalization
* text=auto

15
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,15 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: ['https://afdian.com/a/ikun0014']

99
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,99 @@
name: Build
on:
push:
branches:
- main
jobs:
build:
permissions:
contents: write
runs-on: windows-latest
steps:
- name: Check out git repository
uses: actions/checkout@v4
- 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.12
uses: actions/setup-python@v3
with:
python-version: 3.12
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install imageio
pip install -r requirements.txt
- name: Build
uses: Nuitka/Nuitka-Action@main
with:
nuitka-version: main
script-name: main.py
standalone: true
onefile: true
show-memory: true
windows-uac-admin: true
windows-icon-from-ico: icon.jpg
company-name: ikunshare
product-name: Onekey
file-version: ${{ env.PACKAGE_VERSION }}
product-version: ${{ env.PACKAGE_VERSION }}
file-description: 一个Steam仓库清单下载器
copyright: Copyright © 2024 ikun0014
output-file: Onekey---v${{ env.PACKAGE_VERSION }}.exe
assume-yes-for-downloads: true
output-dir: build
- name: Create git tag
uses: pkgdeps/git-tag-action@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
github_repo: ${{ github.repository }}
version: ${{ env.PACKAGE_VERSION }}
git_commit_sha: ${{ github.sha }}
git_tag_prefix: "v"
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: Onekey_v${{ env.PACKAGE_VERSION }}.exe
path: build/Onekey_v${{ env.PACKAGE_VERSION }}.exe
- 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
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Gitee Release
uses: nicennnnnnnlee/action-gitee-release@v1.0.5
with:
gitee_owner: ikun0014
gitee_repo: Onekey
gitee_token: ${{ secrets.GITEE_TOKEN }}
gitee_tag_name: v${{ env.PACKAGE_VERSION }}
gitee_release_name: v${{ env.PACKAGE_VERSION }}
gitee_release_body: I don't know
gitee_target_commitish: main
gitee_upload_retry_times: 3
gitee_file_name: Onekey---v${{ env.PACKAGE_VERSION }}.exe
gitee_file_path: build/Onekey---v${{ env.PACKAGE_VERSION }}.exe
- 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"

25
.github/workflows/sync.yml vendored Normal file
View File

@@ -0,0 +1,25 @@
name: Sync to Gitee
on:
push:
branches:
- main
jobs:
sync:
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- name: Sync to Gitee
uses: Yikun/hub-mirror-action@master
with:
src: github/ikunshare
dst: gitee/ikun0014
dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
dst_token: ${{ secrets.GITEE_TOKEN }}
src_account_type: org
dst_account_type: user
white_list: "Onekey"
force_update: true
debug: true

174
.gitignore vendored Normal file
View File

@@ -0,0 +1,174 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Nuitka
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
dist/
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/#use-with-ide
.pdm.toml
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
config.json
/output
*.bat
*.xml
*.exe
*.dll
/main.dist
/.vscode
/.vs

3
.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,3 @@
# 默认忽略的文件
/shelf/
/workspace.xml

10
.idea/Onekey.iml generated Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@@ -1,2 +1,70 @@
# Onekey
<div align="center">
![Onekey](https://socialify.git.ci/ikunshare/Onekey/image?description=1&font=Inter&forks=1&issues=1&language=1&name=1&owner=1&pulls=1&stargazers=1&theme=Auto)
![GitHub Repo Size](https://img.shields.io/github/repo-size/ikunshare/Onekey?style=for-the-badge)
[![GitHub Release (with filter)](https://img.shields.io/github/v/release/ikunshare/Onekey?style=for-the-badge)](https://github.com/ikunshare/Onekey/releases/latest)
[![GitHub All Releases](https://img.shields.io/github/downloads/ikunshare/Onekey/total?style=for-the-badge&color=violet)](https://github.com/ikunshare/Onekey/releases)
[![GitHub License](https://img.shields.io/github/license/ikunshare/Onekey?style=for-the-badge)](https://github.com/ikunshare/Onekey/blob/main/LICENSE)
</div>
## Onekey
Onekey Steam Depot Manifest Downloader
## 使用方法
去Releases处下载最新的发布并且安装好SteamTools或者GreenLuma
然后打开Onekey输入App ID即可使用
## 开发
本程序使用Python编程语言开发
要求环境:
1.Python 3.10及以上
2.Windows 10及以上
3.使用Git进行版本管理
1.克隆项目到本地
```
git clone https://github.com/ikunshare/Onekey
```
2.安装依赖
```
pip install -r requirements.txt
```
## 项目协议
本项目基于 GPL-3.0 许可证发行,以下协议是对于 GPL-3.0 原协议的补充,如有冲突,以以下协议为准。
词语约定: “使用者”指签署本协议的使用者;“版权数据”指包括但不限于图像、音频、名字等在内的他人拥有所属版权的数据。
本项目的数据来源原理是从Steam官方的CDN服务器中拉取游戏清单数据经过对数据简单地筛选与合并后进行展示因此本项目不对数据的准确性负责。
使用本项目的过程中可能会产生版权数据对于这些版权数据本项目不拥有它们的所有权为了避免造成侵权使用者务必在24 小时内清除使用本项目的过程中所产生的版权数据。
由于使用本项目产生的包括由于本协议或由于使用或无法使用本项目而引起的任何性质的任何直接、间接、特殊、偶然或结果性损害(包括但不限于因商誉损失、停工、计算机故障或故障引起的损害赔偿,或任何及所有其他商业损害或损失)由使用者负责。
本项目完全免费,且开源发布于 GitHub 面向全世界人用作对技术的学习交流,本项目不对项目内的技术可能存在违反当地法律法规的行为作保证,禁止在违反当地法律法规的情况下使用本项目,对于使用者在明知或不知当地法律法规不允许的情况下使用本项目所造成的任何违法违规行为由使用者承担,本项目不承担由此造成的任何直接、间接、特殊、偶然或结果性责任。
而且,本项目已禁止使用于商业用途,以及不得进行未经允许的二次修改,否则必须同时发布源代码。
若你使用了本项目,将代表你接受以上协议。
Steam正版平台不易请尊重版权支持正版。
本项目仅用于对技术可行性的探索及研究,不接受任何商业(包括但不限于广告等)合作。
## Star 趋势图
[![Stargazers over time](https://starchart.cc/ikunshare/Onekey.svg)](https://starchart.cc/ikunshare/Onekey)
## 贡献者
<a href="https://github.com/ikunshare/Onekey/graphs/contributors">
<img src="https://contrib.rocks/image?repo=ikunshare/Onekey" />
</a>
## 常见问题解答FAQ
查看 [FAQ](https://ikunshare.com/d/49) 获取常见问题的解答。
## 社区和支持
加入我们的社区,参与讨论和支持:
- [GitHub Discussions](https://github.com/ikunshare/Onekey/discussions)
- [Telegram](https://t.me/ikunshare_qun)

0
common/__init__.py Normal file
View File

37
common/check.py Normal file
View File

@@ -0,0 +1,37 @@
import time
import ujson as json
from aiohttp import ClientError, ConnectionTimeoutError
from .log import log
from .stack_error import stack_error
async def check_github_api_rate_limit(headers, session):
url = 'https://api.github.com/rate_limit'
try:
async with session.get(url, headers=headers, ssl=False) as r:
r_json = json.loads(await r.read())
if r.status == 200:
rate_limit = r_json.get('rate', {})
remaining_requests = rate_limit.get('remaining', 0)
reset_time = rate_limit.get('reset', 0)
reset_time_formatted = time.strftime(
'%Y-%m-%d %H:%M:%S', time.localtime(reset_time))
log.info(f'剩余请求次数: {remaining_requests}')
if remaining_requests == 0:
log.warning(f'GitHub API 请求数已用尽, 将在 {
reset_time_formatted} 重置,建议生成一个填在配置文件里')
else:
log.error('Github请求数检查失败, 网络错误')
except KeyboardInterrupt:
log.info("程序已退出")
except ClientError as e:
log.error(f'检查Github API 请求数失败, {stack_error(e)}')
except ConnectionTimeoutError as e:
log.error(f'检查Github API 请求数超时: {stack_error(e)}')
except Exception as e:
log.error(f'发生错误: {stack_error(e)}')

28
common/checkcn.py Normal file
View File

@@ -0,0 +1,28 @@
import os
import aiohttp
import ujson as json
from .log import log
from .stack_error import stack_error
async def checkcn(client) -> bool:
try:
req = await client.get('https://mips.kugou.com/check/iscn?&format=json')
body = json.loads(await req.read())
scn = bool(body['flag'])
if not scn:
log.info(
f"您在非中国大陆地区({body['country']})上使用了项目, 已自动切换回Github官方下载CDN")
os.environ['IS_CN'] = 'no'
return False
else:
os.environ['IS_CN'] = 'yes'
return True
except KeyboardInterrupt:
log.info("程序已退出")
except aiohttp.ClientError as e:
os.environ['IS_CN'] = 'yes'
log.warning('检查服务器位置失败,已忽略,自动认为你在中国大陆')
log.warning(stack_error(e))
return False

48
common/config.py Normal file
View File

@@ -0,0 +1,48 @@
import os
import sys
import asyncio
import ujson as json
import aiofiles
from .stack_error import stack_error
from .log import log
DEFAULT_CONFIG = {
"Github_Personal_Token": "",
"Custom_Steam_Path": "",
"QA1": "温馨提示: Github_Personal_Token可在Github设置的最底下开发者选项找到详情看教程",
"教程": "https://ikunshare.com/Onekey_tutorial"
}
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('程序可能为第一次启动或配置重置,请填写配置文件后重新启动程序')
except KeyboardInterrupt:
log.info("程序已退出")
except Exception as e:
log.error(f'配置文件生成失败,{stack_error(e)}')
async def load_config():
if not os.path.exists('./config.json'):
await gen_config_file()
os.system('pause')
sys.exit()
try:
async with aiofiles.open("./config.json", mode="r", encoding="utf-8") as f:
config = json.loads(await f.read())
return config
except KeyboardInterrupt:
log.info("程序已退出")
except Exception as e:
log.error(f"配置文件加载失败,原因: {stack_error(e)},重置配置文件中...")
os.remove("./config.json")
await gen_config_file()
os.system('pause')
sys.exit()
config = asyncio.run(load_config())

44
common/dkey_merge.py Normal file
View File

@@ -0,0 +1,44 @@
import asyncio
import aiofiles
import vdf
from pathlib import Path
from .log import log
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默认配置不存在, 可能是没有登录账号')
return False
try:
async with aiofiles.open(config_path, encoding='utf-8') as f:
content = await f.read()
config = vdf.loads(content)
steam = config.get('InstallConfigStore', {}).get('Software', {}).get('Valve') or \
config.get('InstallConfigStore', {}).get(
'Software', {}).get('valve')
if steam is None:
log.error('找不到Steam配置, 请检查配置文件')
return False
depots = steam.setdefault('depots', {})
depots.update(depots_config.get('depots', {}))
async with aiofiles.open(config_path, mode='w', encoding='utf-8') as f:
new_context = vdf.dumps(config, pretty=True)
await f.write(new_context)
log.info('成功合并')
return True
except KeyboardInterrupt:
log.info("程序已退出")
except Exception as e:
async with lock:
log.error(f'合并失败, 原因: {e}')
return False

54
common/dl.py Normal file
View File

@@ -0,0 +1,54 @@
import os
from aiohttp import ClientError, ConnectionTimeoutError
from rich.progress import Progress, BarColumn, TextColumn, TimeElapsedColumn
from .log import log
async def get(sha: str, path: str, repo: str, session, chunk_size: int = 1024) -> bytearray:
if os.environ.get('IS_CN') == 'yes':
url_list = [
f'https://jsdelivr.pai233.top/gh/{repo}@{sha}/{path}',
f'https://cdn.jsdmirror.com/gh/{repo}@{sha}/{path}',
f'https://raw.gitmirror.com/{repo}/{sha}/{path}',
f'https://raw.dgithub.xyz/{repo}/{sha}/{path}',
f'https://gh.akass.cn/{repo}/{sha}/{path}'
]
else:
url_list = [
f'https://raw.githubusercontent.com/{repo}/{sha}/{path}'
]
retry = 3
while retry > 0:
for url in url_list:
try:
async with session.get(url, ssl=False) as response:
if response.status == 200:
total_size = int(response.headers.get('Content-Length', 0))
content = bytearray()
with Progress(
TextColumn("[progress.description]{task.description}", style="#66CCFF"),
BarColumn(style="#66CCFF", complete_style="#4CE49F", finished_style="#2FE9D9"),
TextColumn("[progress.percentage]{task.percentage:>3.0f}%", style="#66CCFF"),
TimeElapsedColumn(),
) as progress:
task = progress.add_task(f"下载{path}中...", total=total_size)
async for chunk in response.content.iter_chunked(chunk_size):
content.extend(chunk)
progress.update(task, advance=len(chunk))
return content
else:
log.error(f'获取失败: {path} - 状态码: {response.status}')
except KeyboardInterrupt:
log.info("程序已退出")
except ClientError as e:
log.error(f'获取失败: {path} - 连接错误: {str(e)}')
except ConnectionTimeoutError as e:
log.error(f'连接超时: {url} - 错误: {str(e)}')
retry -= 1
log.warning(f'重试剩余次数: {retry} - {path}')
log.error(f'超过最大重试次数: {path}')
raise Exception(f'无法下载: {path}')

View File

@@ -0,0 +1,45 @@
from pathlib import Path
import aiofiles
import vdf
from .log import log
from .dl import get
from .stack_error import stack_error
async def get_manifest(sha: str, path: str, steam_path: Path, repo: str, session) -> list:
collected_depots = []
depot_cache_path = steam_path / 'depotcache'
try:
depot_cache_path.mkdir(exist_ok=True)
if path.endswith('.manifest'):
save_path = depot_cache_path / path
if save_path.exists():
log.warning(f'已存在清单: {save_path}')
return collected_depots
content = await get(sha, path, repo, session)
log.info(f'清单下载成功: {path}')
async with aiofiles.open(save_path, 'wb') as f:
await f.write(content)
elif path == 'Key.vdf':
content = await get(sha, path, repo, session)
log.info(f'密钥下载成功: {path}')
depots_config = vdf.loads(content.decode('utf-8'))
collected_depots = [
(depot_id, depot_info['DecryptionKey'])
for depot_id, depot_info in depots_config['depots'].items()
]
except KeyboardInterrupt:
log.info("程序已退出")
except Exception as e:
log.error(f'处理失败: {path} - {stack_error(e)}')
raise
return collected_depots

24
common/get_steam_path.py Normal file
View File

@@ -0,0 +1,24 @@
import os
import winreg
from pathlib import Path
from .log import log
from .config import config
from .stack_error import stack_error
def get_steam_path() -> Path:
try:
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Valve\Steam')
steam_path = Path(winreg.QueryValueEx(key, 'SteamPath')[0])
custom_steam_path = config.get("Custom_Steam_Path", "").strip()
return Path(custom_steam_path) if custom_steam_path else steam_path
except KeyboardInterrupt:
log.info("程序已退出")
except Exception as e:
log.error(f'Steam路径获取失败, {stack_error(e)}, 请检查是否正确安装Steam')
os.system('pause')
return Path()
steam_path = get_steam_path()

21
common/init_text.py Normal file
View File

@@ -0,0 +1,21 @@
from .log import log
def init():
banner_lines = [
f" _____ __ _ _____ _ _ _____ __ __ ",
f" / _ \\ | \\ | | | ____| | | / / | ____| \\ \\ / /",
f" | | | | | \\| | | |__ | |/ / | |__ \\ \\/ /",
f" | | | | | |\\ | | __| | |\\ \\ | __| \\ / ",
f" | |_| | | | \\ | | |___ | | \\ \\ | |___ / /",
f" \\_____/ |_| \\_| |_____| |_| \\_\\ |_____| /_/",
]
for line in banner_lines:
log.info(line)
log.info(f'作者: ikun0014')
log.warning(f'本项目采用GNU General Public License v3开源许可证请勿用于商业用途')
log.info(f'版本: 1.3.3')
log.info(f'项目Github仓库: https://github.com/ikunshare/Onekey \n Gitee: https://gitee.com/ikun0014/Onekey')
log.info(f'官网: ikunshare.com')
log.warning(
f'本项目完全开源免费, 如果你在淘宝, QQ群内通过购买方式获得, 赶紧回去骂商家死全家\n 交流群组:\n https://t.me/ikunshare_qun')

30
common/log.py Normal file
View File

@@ -0,0 +1,30 @@
import logging
import colorlog
LOG_FORMAT = '%(log_color)s%(message)s'
LOG_COLORS = {
'INFO': 'cyan',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'purple',
}
def init_log(level=logging.DEBUG) -> logging.Logger:
logger = logging.getLogger('Onekey')
logger.setLevel(level)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(level)
fmt = colorlog.ColoredFormatter(LOG_FORMAT, log_colors=LOG_COLORS)
stream_handler.setFormatter(fmt)
# 避免重复添加处理器
if not logger.handlers:
logger.addHandler(stream_handler)
return logger
log = init_log()

109
common/main_func.py Normal file
View File

@@ -0,0 +1,109 @@
import os
from typing import Any
from aiohttp import ClientSession, ConnectionTimeoutError
from common.checkcn import checkcn
from common.config import config
from common.dkey_merge import depotkey_merge
from common.migration import migrate
from common.unlock import stool_add, greenluma_add
from common.get_manifest_info import get_manifest
from common.check import check_github_api_rate_limit
from common.log import log
from common.get_steam_path import steam_path
from common.stack_error import stack_error
isGreenLuma = any((steam_path / dll).exists()
for dll in ['GreenLuma_2024_x86.dll', 'GreenLuma_2024_x64.dll', 'User32.dll'])
isSteamTools = (steam_path / 'config' / 'stUI').is_dir()
async def fetch_branch_info(session, url, headers) -> str | None:
try:
async with session.get(url, headers=headers, ssl=False) as response:
return await response.json()
except KeyboardInterrupt:
log.info("程序已退出")
except Exception as e:
log.error(f'获取信息失败: {stack_error(e)}')
return None
except ConnectionTimeoutError as e:
log.error(f'获取信息时超时: {stack_error(e)}')
return None
async def get_latest_repo_info(session, repos, app_id, headers) -> Any | None:
latest_date = None
selected_repo = None
for repo in repos:
url = f'https://api.github.com/repos/{repo}/branches/{app_id}'
r_json = await fetch_branch_info(session, url, headers)
if r_json and 'commit' in r_json:
date = r_json['commit']['commit']['author']['date']
if latest_date is None or date > latest_date:
latest_date = date
selected_repo = repo
return selected_repo, latest_date
async def main(app_id: str, repos: list) -> bool:
app_id_list = list(filter(str.isdecimal, app_id.strip().split('-')))
if not app_id_list:
log.error(f'App ID无效')
return False
app_id = app_id_list[0]
async with ClientSession() as session:
github_token = config.get("Github_Personal_Token", "")
headers = {'Authorization': f'Bearer {
github_token}'} if github_token else None
await checkcn(session)
await check_github_api_rate_limit(headers, session)
selected_repo, latest_date = await get_latest_repo_info(session, repos, app_id, headers)
if 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)
if r_json and 'commit' in r_json:
sha = r_json['commit']['sha']
url = r_json['commit']['commit']['tree']['url']
r2_json = await fetch_branch_info(session, url, headers)
if r2_json and 'tree' in r2_json:
collected_depots = []
for item in r2_json['tree']:
result = await get_manifest(sha, item['path'], steam_path, selected_repo, session)
collected_depots.extend(result)
if collected_depots:
if isSteamTools:
await migrate(st_use=True, session=session)
await stool_add(collected_depots, app_id)
log.info('找到SteamTools, 已添加解锁文件')
if isGreenLuma:
await migrate(st_use=False, session=session)
await greenluma_add([app_id])
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(f'清单最后更新时间: {latest_date}')
log.info(f'入库成功: {app_id}')
os.system('pause')
return True
log.error(f'清单下载或生成失败: {app_id}')
os.system('pause')
return False

73
common/migration.py Normal file
View File

@@ -0,0 +1,73 @@
import subprocess
import aiofiles
from aiohttp import ConnectionTimeoutError
from pathlib import Path
from rich.progress import Progress, BarColumn, TextColumn, TimeElapsedColumn
from .log import log
from .get_steam_path import steam_path
directory = Path(steam_path) / "config" / "stplug-in"
temp_path = Path('./temp')
setup_url = 'https://steamtools.net/res/SteamtoolsSetup.exe'
setup_file = temp_path / 'SteamtoolsSetup.exe'
async def download_setup_file(session) -> None:
log.info('开始下载 SteamTools 安装程序...')
try:
async with session.get(setup_url, stream=True) as r:
if r.status == 200:
total_size = int(r.headers.get('Content-Length', 0))
chunk_size = 8192
with Progress(
TextColumn("[progress.description]{task.description}", style="#66CCFF"),
BarColumn(style="#66CCFF", complete_style="#4CE49F", finished_style="#2FE9D9"),
TextColumn("[progress.percentage]{task.percentage:>3.0f}%", style="#66CCFF"),
TimeElapsedColumn(),
) as progress:
task = progress.add_task(f"下载安装程序中...", total=total_size)
async with aiofiles.open(setup_file, mode='wb') as f:
async for chunk in r.content.iter_chunked(chunk_size):
await f.write(chunk)
progress.update(task, advance=len(chunk))
progress.close()
log.info('安装程序下载完成')
else:
log.error('网络错误,无法下载安装程序')
except KeyboardInterrupt:
log.info("程序已退出")
except Exception as e:
log.error(f'下载失败: {e}')
except ConnectionTimeoutError as e:
log.error(f'下载时超时: {e}')
async def migrate(st_use: bool, session) -> None:
if st_use:
log.info('检测到你正在使用 SteamTools,尝试迁移旧文件')
if directory.exists():
for file in directory.iterdir():
if file.is_file() and file.name.startswith("Onekey_unlock_"):
new_filename = file.name[len("Onekey_unlock_"):]
try:
file.rename(directory / new_filename)
log.info(f'Renamed: {file.name} -> {new_filename}')
except Exception as e:
log.error(f'重命名失败 {file.name} -> {new_filename}: {e}')
else:
log.error('故障,正在重新安装 SteamTools')
temp_path.mkdir(parents=True, exist_ok=True)
await download_setup_file(session)
subprocess.run(str(setup_file), check=True)
for file in temp_path.iterdir():
file.unlink()
temp_path.rmdir()
else:
log.info('未使用 SteamTools,停止迁移')

7
common/stack_error.py Normal file
View File

@@ -0,0 +1,7 @@
import traceback
def stack_error(exception: Exception) -> str:
stack_trace = traceback.format_exception(
type(exception), exception, exception.__traceback__)
return ''.join(stack_trace)

76
common/unlock.py Normal file
View File

@@ -0,0 +1,76 @@
import os
import asyncio
import subprocess
import aiofiles
from .get_steam_path import steam_path
from .log import log
lock = asyncio.Lock()
async def stool_add(depot_data: list, app_id: str) -> bool:
lua_filename = f"{app_id}.lua"
lua_filepath = steam_path / "config" / "stplug-in" / lua_filename
async with lock:
log.info(f'SteamTools 解锁文件生成: {lua_filepath}')
try:
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:
await lua_file.write(f'addappid({depot_id}, 1, "{depot_key}")\n')
luapacka_path = steam_path / "config" / "stplug-in" / "luapacka.exe"
log.info(f'正在处理文件: {lua_filepath}')
result = subprocess.run(
[str(luapacka_path), str(lua_filepath)],
capture_output=True
)
if result.returncode != 0:
log.error(f'调用失败: {result.stderr.decode()}')
return False
log.info('处理完成')
except KeyboardInterrupt:
log.info("程序已退出")
except Exception as e:
log.error(f'处理过程出现错误: {e}')
return False
finally:
if lua_filepath.exists():
os.remove(lua_filepath)
log.info(f'删除临时文件: {lua_filepath}')
return True
async def greenluma_add(depot_id_list: list) -> bool:
app_list_path = steam_path / 'AppList'
try:
app_list_path.mkdir(parents=True, exist_ok=True)
for file in app_list_path.glob('*.txt'):
file.unlink(missing_ok=True)
depot_dict = {
int(i.stem): int(i.read_text(encoding='utf-8').strip())
for i in app_list_path.iterdir() if i.is_file() and i.stem.isdecimal() and i.suffix == '.txt'
}
for depot_id in map(int, depot_id_list):
if depot_id not in depot_dict.values():
index = max(depot_dict.keys(), default=-1) + 1
while index in depot_dict:
index += 1
(app_list_path /
f'{index}.txt').write_text(str(depot_id), encoding='utf-8')
depot_dict[index] = depot_id
return True
except Exception as e:
print(f'处理时出错: {e}')
return False

BIN
icon.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

65
main.py Normal file
View File

@@ -0,0 +1,65 @@
import sys
import os
import asyncio
import re
from colorama import Fore, Back, Style
from colorama import init as cinit
from common.log import log
from common.stack_error import stack_error
from common.init_text import init
from common.main_func import main
# 摘自https://github.com/MeoProject/lx-music-api-server
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
lock = asyncio.Lock()
init()
cinit()
repos = [
'ikun0014/ManifestHub',
'Auiowu/ManifestAutoUpdate',
'tymolu233/ManifestAutoUpdate',
]
def prompt_app_id():
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}")
async def main_loop():
while True:
try:
app_id = prompt_app_id()
await main(app_id, repos)
except KeyboardInterrupt:
log.info("程序已退出")
except EOFError:
break
async def run():
try:
log.info('App ID可以在SteamDB或Steam商店链接页面查看')
await main_loop()
except KeyboardInterrupt:
log.info("程序已退出")
except Exception as e:
log.error(f'发生错误: {stack_error(e)}, 将在5秒后退出')
await asyncio.sleep(5)
if __name__ == '__main__':
try:
asyncio.run(run())
except KeyboardInterrupt:
log.info("程序已退出")
except SystemExit:
sys.exit()

22
package.json Normal file
View File

@@ -0,0 +1,22 @@
{
"name": "onekey",
"version": "1.3.3",
"description": "一个Steam仓库清单下载器",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/ikunshare/Onekey.git"
},
"keywords": [
"Onekey"
],
"author": "ikun0014",
"license": "GPL-3.0",
"bugs": {
"url": "https://github.com/ikunshare/Onekey/issues"
},
"homepage": "https://github.com/ikunshare/Onekey#readme"
}

7
requirements.txt Normal file
View File

@@ -0,0 +1,7 @@
aiofiles==24.1.0
aiohttp==3.10.10
colorama==0.4.6
colorlog==6.8.2
rich==13.9.4
ujson==5.10.0
vdf==3.4