The project's README from github.com/mizorewww/x_gift_bot. As one markdown file: README.md.
X (Twitter) Premium 礼品兑换平台。你生成兑换码发给用户,用户在网页上输入兑换码和自己的 X 用户名,系统自动完成 Premium 赠送的下单与付款。
以下截图来自本地模拟预览(全部为示例数据):
| 兑换页 | 管理页(统计概览) |
|---|---|
![]() |
![]() |
管理页深色模式:

想先看看界面?只需要 Node.js 22+:
npm ci
npm run build
npm run preview
打开 http://127.0.0.1:4173 是兑换页,http://127.0.0.1:4173/admin 是管理后台。所有数据都是内存示例,不连接真实服务。在兑换页输入 XG- 加 48 个字母 A 可以演示完整成功流程。
部署前请先准备好以下四样东西,配置向导会逐项询问:
auth_token 和 ct0):在浏览器登录 x.com 后,按 F12 打开开发者工具 → Application(应用)→ Cookies → https://x.com,复制这两项的值。这是系统以你的 X 账号身份发起赠送的凭据。BD)。请只填真实信息。pk_live_ 开头公钥。使用默认 X Premium 目录时向导会说明;它与商户、商品、价格一起保存在「目录」配置中,也可以完全自定义。另外需要:一台 Linux 服务器、一个指向该服务器的域名、服务器上安装 Go 1.27+(或在自己电脑上构建后上传二进制)。
git clone https://github.com/mizorewww/x_gift_bot.git
cd x_gift_bot
npm ci && npm run build # 构建前端(只需一次,产物已随仓库提交时可跳过)
go build -o bin/xgift ./cmd/xgift
go build -o bin/xgift-web ./cmd/xgift-web
./bin/xgift setup
向导会一步步引导你完成配置,全程有中文提示:
sqlite/vault-password,仅本人可读)。请务必备份这个文件,丢失后所有加密数据无法恢复。pk_live_ 公钥。https://xp.example.com),向导会生成 site.env 和随机的后台管理员密码(只显示一次,同时保存在文件里)。完成后运行 ./bin/xgift status,六条记录全部显示 verified 即为成功。
把向导生成的 site.env、admin-password、vault-password 放到安全目录(生产建议 /etc/xgift/,权限 0600),然后:
sudo systemctl link $PWD/deploy/xgift.service # 或直接复制到 /etc/systemd/system/
# 编辑 deploy/xgift.service 中的路径使其与你的安装位置一致
sudo systemctl enable --now xgift
site.env 各字段含义:
| 字段 | 说明 |
|---|---|
XGIFT_ORIGIN |
站点完整域名(https:// 开头) |
XGIFT_LISTEN |
监听地址,只能回环,如 127.0.0.1:8787 |
XGIFT_DATA_DIR |
数据目录(vault.db、site.db 所在) |
XGIFT_PASSWORD_FILE |
保管库密码文件路径 |
XGIFT_ADMIN_PASSWORD_FILE |
后台密码文件路径 |
XGIFT_PAYMENTS_ENABLED |
true 开放充值,false 暂停(不消耗兑换码) |
程序只监听本机端口,需要 Caddy(或任意反向代理)提供 HTTPS。deploy/Caddyfile 是模板,把 xp.example.com 替换成你的域名后放到 Caddy 配置目录并 reload 即可。模板默认只放行 Cloudflare 回源 IP,不用 Cloudflare 时删掉 @cloudflare 相关段、保留 reverse_proxy 即可。
验证:
curl https://你的域名/healthz # {"ok":true,...} 即成功
浏览器打开 https://你的域名/admin,输入用户名 admin 和向导生成的密码:
https://你的域名,输入兑换码和 X 用户名即可完成充值。./bin/xgift status # 检查所有加密记录是否完好
./bin/xgift check # 测试代理能否访问 x.com
./bin/xgift import-chrome # macOS:从本机 Chrome 重新导入 X Cookie(过期时用)
更新配置用 put(从标准输入读取新值):
echo '新的ct0等JSON' | ./bin/xgift put --name cookies # 还有 card / proxy / api-auth
echo 'pk_live_新公钥' | ./bin/xgift put --name stripe-key
echo '{"merchant":"acct_...","currency":"bdt","plans":[...]}' | ./bin/xgift put --name catalog
密码文件丢了怎么办? 无法恢复。加密数据全部作废,需要删除 vault.db 后重新运行 xgift setup。请把它和数据库一起备份。
X Cookie 过期了? macOS 上用 ./bin/xgift import-chrome 一键刷新;其他系统重新从浏览器复制后用 put --name cookies 更新。
想暂停充值? 把 site.env 里 XGIFT_PAYMENTS_ENABLED 改为 false 并重启服务。用户兑换会被婉拒,兑换码不消耗。
付款结果不明怎么办? 系统宁可标记「待核实」也不会重复扣款。用户用原兑换码点「重新检查并继续兑换」即可自动核对,确认成功后自动补上状态。
升级程序? 重新构建两个二进制,备份数据目录和密码文件,替换后 systemctl restart xgift。不要覆盖线上数据库。
vault.db:所有敏感信息(Cookie、卡、代理、订单)逐条 AES-256-GCM 加密,密钥由密码文件派生。没有密码文件谁也读不了。site.db:兑换码只存摘要和尾号,不存明文;用户名、状态为明文。请限制文件权限。