【免费下载链接】discord-quest-completer
A Windows desktop application to complete quests on Discord without installing the full actual games.
Discord Quest Completer 是一款面向 Windows 的桌面应用,核心玩法很"取巧":不安装动辄几十 GB 的真实游戏,只靠一个体积极小(几 MB 甚至更小)的"假游戏进程",就能让 Discord 识别出你正在"玩某款游戏",从而完成那些需要15 分钟游戏时长的 Discord Quest(任务)。本文带你拆解它最硬核的部分——如何把代表游戏的可执行文件从 250KB 一路瘦身到 136KB,以及背后的 Windows 进程伪装原理。
一、不装游戏也能刷任务:它解决了什么痛点
Discord 会定期放出Quest(任务活动),其中不少要求你先"游玩"某款已认证的游戏并累计一定时长,才能领取奖励。可现实是:
- 🎮 游戏太大(动辄几十上百 GB),硬盘装不下;
- 🐌 带宽有限,下载太慢;
- 🛡️ 不想装游戏的反作弊(anti-cheat)或它根本跑不动你的电脑;
- 💻 只是想"挂个游戏状态"给别人看。
Discord Quest Completer 正是为此而生:它用极小的成本模拟出"某款游戏正在运行"的状态,让你省下空间和流量,照样参与任务。
这些使用场景在项目里也有明确说明,可参考 README.md 的Use Cases章节。
它只支持Discord 已认证(Verified)、且能被自动检测到的游戏。游戏清单来自 Discord 的 detectable 接口,前端会把它缓存到 src/assets/gamelist.json。
二、Discord 如何"认出"你在玩哪款游戏
理解原理前,先要知道 Discord 检测游戏的机制。Discord 通过Rich Presence / Registered Games来识别游戏,它的判断逻辑其实并不神秘:
- 看进程名:检查有没有一个名字与真实游戏主程序完全一致的进程正在运行;
- 看位置:有时还要求该进程位于"游戏本该在的"安装目录里。
换句话说,Discord 关心的是"有没有一个叫xxx.exe的进程在跑",而不太管这个进程是不是几 GB 的真游戏。
💡 这就是本项目的突破口——只要能造出一个"名字对、位置对、一直在运行"的极小进程,就能骗过检测。这套"复制模板 → 改名 → 启动"的核心逻辑,都写在 src-tauri/src/lib.rs 里。
三、一个模板,复制成任意游戏:假游戏进程的诞生
Discord Quest Completer 并没有为每款游戏各写一个程序,而是用了**"一个万能模板 + 复制改名"** 的套路:
- 准备模板:打包时把编译好的超小进程二进制(
src-win.exe)塞进应用的 resources,运行时路径形如data/src-win.exe(见 src-tauri/src/lib.rs 的runner_resource_name)。 - 建目录:按
games/<游戏AppID>/<子路径>/的真实安装结构创建文件夹(game_folder_path)。 - 复制改名:把模板复制过去,并改名为真实游戏的主程序文件名(create_fake_game)。
- 启动:以
--title 游戏名参数启动它,让它显示游戏名并保持运行(run_background_process)。 - 停止:用
taskkill /F /IM <进程名>结束进程(stop_process)。
这个"万能模板"启动后会弹出一个显示游戏名的小窗口并挂一个系统托盘图标——因为部分游戏/Discord 需要检测到"有可见窗口"。它的完整 Windows 实现就在 src-win/src/main.cpp。
前端按钮的"Play / Stop / Install and Play"状态切换,逻辑在 src/components/GameExecutables.vue。
四、从 250KB 到 136KB 的极致瘦身:三种方案怎么取舍
整个项目的"灵魂 KPI"只有一个字——小。作者的目标是让每个平台的假进程控制在 100KB 上下。围绕这个目标,项目实测了三条路线(数据来自 README.md):
| 方案 | 体积 | 依赖运行时 | 取舍结论 |
|---|---|---|---|
| C# / .NET | ~7KB | 需要用户装 .NET 4.7 运行时 | 最小,但给用户加负担 ❌ |
Rust +windowscrate | ~136KB | 无(自包含) | 小巧且不依赖外部 ✅ |
| C++ WinAPI(当前落地) | ~250KB | 无(自包含) | 兼容性好,目前随包发布 |
- 🧬7KB 的 C# 方案体积极致,却要求终端用户额外安装 .NET 运行时——这与"开箱即用"的理念相悖,所以被放弃;
- 🦀136KB 的 Rust 方案用
windowscrate 直接调 Win32 API 建窗口,自包含、无需任何运行时,是"更小且不依赖"的理想方向; - ⚙️当前仓库真正打包使用的是 C++ WinAPI 版本(约 250KB),因为它无需任何运行时、兼容性最稳,代码见 src-win/src/main.cpp。
所以标题里的"从 250KB 到 136KB",正是这条"在不逼用户装运行时的前提下,把自包含进程做得尽量小"的瘦身路径。
五、拆解 Windows 假进程:构建配方与瘦身技巧
为什么一个 C++ 程序能被压到只剩几百 KB?答案藏在构建配方里。它由三部分协同完成:
1. 用 Rust 的极致压缩编译配置
项目用 Rust 的 release profile 来驱动整条编译链,关键参数(见 src-win/Cargo.toml):
opt-level = "z"—— 以"最小体积"为目标优化;lto = true—— 链接时优化,跨编译单元删掉死代码;codegen-units = 1—— 单单元生成,最大化优化空间;panic = "abort"+strip = true—— 去掉错误处理与符号表,进一步瘦身。
2. 在 build.rs 里塞入"省空间"链接参数
src-win/build.rs 通过cc编译 C++ 源码,并注入了一系列链接器开关:
/NODEFAULTLIB:不链接默认 C 运行时,省下大量体积;/ENTRY:mainEntryPoint:手动指定入口为 C++ 里的mainEntryPoint;/SUBSYSTEM:WINDOWS:无控制台窗口;/GS-:关闭缓冲区安全检查(减体积);/ALIGN:16与/FILEALIGN:16:对齐到 16 字节,进一步压缩文件。
3. C++ 源码本身也"抠到极致"
src-win/src/main.cpp 的实现有几个典型的"瘦身手法":
- 动态加载 API:用
LoadLibraryW+GetProcAddress运行时才取user32、shell32、gdi32的函数,避免静态链接开销; - 手写
memset:用一段十几字节的小函数替代 CRT 版本(main.cpp); - 自己解析
--title参数:不依赖标准库的字符串处理,直接从GetCommandLineW()里取游戏名(main.cpp)。
而 src-win/src/main.rs 本身只有一行#![no_main]+#![no_std]和一个空panic_handler,真正逻辑全在 C++ 里,Rust 仅充当"编译配置外壳"。
平台模板统一由 scripts/sync-runner.mjs 驱动:编译各平台 runner 再复制到资源目录,Windows 对应
pnpm build:runner:win && pnpm copy:runner:win。
六、从搜索到开玩:完整使用流程
把上面的机制串起来,普通用户的操作路径其实非常简单:
- 🔍搜索游戏:应用启动时从 Discord detectable 接口拉取可检测游戏清单(fetch_gamelist_from_discord),前端用 Fuse.js 做模糊搜索(src/pages/HomeView.vue);
- ➕加入列表:把想刷的游戏加到待办列表;
- ▶️点 Play:若该可执行文件"未安装",先触发
install_and_play——即复制模板(create_fake_game)再启动(run_background_process),见 installAndPlay; - ⏱️计时:假进程常驻,Discord 检测到后状态显示为"正在玩 X",任务时长按需累计(常见为 15 分钟);
- ⏹️点 Stop:调用
stop_process结束进程。
小提示:假进程会持续占用游戏名,玩完记得 Stop,避免长时间挂着。
七、运行目录长这样:安装、维护与卸载
应用会在自己所在目录下生成假游戏文件。因此务必把它放在你有写入/执行权限的目录(别放C:\Program Files\这类需提权的目录),否则可能无法创建文件(见 README.md 的安装说明)。解压后的目录结构大致如下:
discord-quest-completer/ ├── discord-quest-completer.exe # 主程序 ├── data/ │ └── src-win.exe # 假游戏进程模板 └── games/ └── <game-id>/ # 按游戏 AppID 存放的假游戏🧹日常维护:玩久了games/下会积累不少文件夹,手动删掉不用的即可;卸载更是简单粗暴——删掉整个应用目录就完事。
八、支持平台与技术栈一览
| 维度 | 说明 |
|---|---|
| 主平台 | Windows 11(Windows 10 理论可用,未重点测试) |
| Linux / macOS | 暂未支持——核心原因是假进程尚未在各平台都压到足够小 |
| 技术栈 | 🦀 Rust(后端) + 🌐 Vue.js(前端) + 🧰 Tauri(桌面框架) |
| 渲染依赖 | 需 WebView2(Win11 自带,更早系统需手动安装) |
技术栈与依赖声明可分别在 src-tauri/Cargo.toml 和 package.json 中查看。
写在最后
Discord Quest Completer 的巧妙之处在于:它没有"硬怼"游戏本身,而是精准抓住了Discord 靠进程名识别游戏这一检测机制,再用一个被极致压缩过的自包含小进程去满足它。从 250KB 的 C++ 版本,到 136KB 的 Rust 版本,再到 7KB 却"有门槛"的 C# 版本,这条瘦身之路本质上是在**"体积"与"零依赖"**之间反复权衡。
⚠️合规提醒:本项目定位为学习与个人用途。使用此类模拟工具可能涉及 Discord 服务条款、游戏发行商与广告主的权益,后果需自行承担,请自行权衡风险。
想深入源码?可直接克隆仓库后按平台编译对应 runner:
git clone https://gitcode.com/gh_mirrors/di/discord-quest-completer cd discord-quest-completer pnpm install pnpm build:runner:win && pnpm copy:runner:win pnpm tauri dev【免费下载链接】discord-quest-completer
A Windows desktop application to complete quests on Discord without installing the full actual games.
相关推荐
Gaze-LLE 完全指南:从安装到预测的 5 步快速上手教程
Gaze LLE 完全指南:从安装到预测的 5 步快速上手教程 想要快速掌握计算机视觉中的注视目标估计技术吗?Gaze LLE(Gaze Target Esti
Rust二进制瘦身秘籍:从MB到KB的极致优化指南
Rust二进制瘦身秘籍:从MB到KB的极致优化指南 min sized rust项目专注于展示如何最小化Rust二进制文件大小。默认情况下,Rust优化执行速度
示例工程极致精简:ArduinoJson二进制瘦身全攻略
极致精简:ArduinoJson二进制瘦身全攻略 ArduinoJson是一款专为Arduino和嵌入式C++设计的高效JSON库,以其简洁的API和出色的性能
物联网嵌入式
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考