Initial commit: Last-Z Gift Center CLI
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
.env
|
||||
.venv/
|
||||
__pycache__/
|
||||
*.pyc
|
||||
31
CLAUDE.md
Normal file
31
CLAUDE.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Commands
|
||||
|
||||
```bash
|
||||
# Install dependencies
|
||||
pip install -r requirements.txt
|
||||
|
||||
# Run the CLI
|
||||
python giftcenter.py login
|
||||
python giftcenter.py redeem <gift_code>
|
||||
|
||||
# Override UID without editing .env
|
||||
python giftcenter.py --uid <uid> login
|
||||
python giftcenter.py --uid <uid> redeem <gift_code>
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
UID is read from the `UID` environment variable, typically set in `.env`. The `--uid` flag on any subcommand overrides it.
|
||||
|
||||
## Architecture
|
||||
|
||||
Single-file Python CLI (`giftcenter.py`) using `argparse` subcommands:
|
||||
|
||||
- `login` → `cmd_login()` — GET `/getcodeuser.php?uid=...`, displays account info
|
||||
- `redeem <code>` → `cmd_redeem()` — GET `/code.php` with `Usertoken` header and `uid`/`code` params
|
||||
|
||||
API responses use numeric error codes (`code` field) for login and string error codes (`errorCode` field, value `"ok"` on success) for redemption. Error mappings are in `LOGIN_ERRORS` and `REDEEM_ERRORS` constants. UI text is in Traditional Chinese.
|
||||
33
QUICKSTART.md
Normal file
33
QUICKSTART.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# 快速開始
|
||||
|
||||
## 1. 安裝依賴
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## 2. 設定 UID
|
||||
|
||||
建立 `.env` 檔案:
|
||||
|
||||
```bash
|
||||
echo "UID=your_uid_here" > .env
|
||||
```
|
||||
|
||||
將 `your_uid_here` 替換為你的實際 UID。
|
||||
|
||||
## 3. 確認帳號
|
||||
|
||||
```bash
|
||||
python giftcenter.py login
|
||||
```
|
||||
|
||||
看到「登入成功」即代表設定正確。
|
||||
|
||||
## 4. 兌換禮品碼
|
||||
|
||||
```bash
|
||||
python giftcenter.py redeem ABCD1234
|
||||
```
|
||||
|
||||
成功時顯示「兌換成功!」,失敗時會說明原因(碼不存在、已過期、已使用等)。
|
||||
56
README.md
Normal file
56
README.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# lastz-giftcenter-cli
|
||||
|
||||
Last-Z Gift Center 的命令列工具,支援查詢帳號資訊與兌換禮品碼。
|
||||
|
||||
## 安裝
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## 設定
|
||||
|
||||
在專案根目錄建立 `.env` 檔案,填入你的 UID:
|
||||
|
||||
```
|
||||
UID=your_uid_here
|
||||
```
|
||||
|
||||
或在執行指令時以 `--uid` 旗標直接指定。
|
||||
|
||||
## 使用方式
|
||||
|
||||
### 查詢帳號資訊
|
||||
|
||||
```bash
|
||||
python giftcenter.py login
|
||||
```
|
||||
|
||||
輸出範例:
|
||||
|
||||
```
|
||||
登入成功
|
||||
名稱 : 玩家名稱
|
||||
UID : 1234567890
|
||||
SID : S001
|
||||
國家 : TW
|
||||
等級 : 50
|
||||
```
|
||||
|
||||
### 兌換禮品碼
|
||||
|
||||
```bash
|
||||
python giftcenter.py redeem <禮品碼>
|
||||
```
|
||||
|
||||
### 指定 UID(覆蓋 .env)
|
||||
|
||||
```bash
|
||||
python giftcenter.py --uid <uid> login
|
||||
python giftcenter.py --uid <uid> redeem <禮品碼>
|
||||
```
|
||||
|
||||
## 依賴套件
|
||||
|
||||
- [requests](https://docs.python-requests.org/)
|
||||
- [python-dotenv](https://github.com/theskumar/python-dotenv)
|
||||
28
SUMMARY.md
Normal file
28
SUMMARY.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# 專案總覽
|
||||
|
||||
## 簡介
|
||||
|
||||
`lastz-giftcenter-cli` 是一個輕量的 Python 命令列工具,用於與 Last-Z Gift Center(`https://giftcenter.last-z.com`)互動,提供帳號查詢與禮品碼兌換功能。
|
||||
|
||||
## 檔案結構
|
||||
|
||||
| 檔案 | 說明 |
|
||||
|------|------|
|
||||
| `giftcenter.py` | 主程式,包含所有邏輯 |
|
||||
| `requirements.txt` | Python 依賴套件 |
|
||||
| `.env` | 本地環境設定(UID) |
|
||||
|
||||
## 功能
|
||||
|
||||
| 指令 | API 端點 | 說明 |
|
||||
|------|----------|------|
|
||||
| `login` | `GET /getcodeuser.php` | 查詢帳號名稱、SID、國家、等級 |
|
||||
| `redeem <code>` | `GET /code.php` | 兌換禮品碼 |
|
||||
|
||||
## 技術細節
|
||||
|
||||
- **語言**:Python 3
|
||||
- **依賴**:`requests`、`python-dotenv`
|
||||
- **認證**:UID 透過 query string 及 `Usertoken` header 傳遞
|
||||
- **錯誤處理**:login 使用數字錯誤碼,redeem 使用字串錯誤碼(`"ok"` 代表成功)
|
||||
- **介面語言**:繁體中文
|
||||
121
giftcenter.py
Normal file
121
giftcenter.py
Normal file
@@ -0,0 +1,121 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Last-Z Gift Center CLI"""
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import sys
|
||||
|
||||
import requests
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
BASE_URL = "https://giftcenter.last-z.com"
|
||||
|
||||
LOGIN_ERRORS = {
|
||||
10006: "Token 已過期",
|
||||
10007: "請稍後再試",
|
||||
10017: "需要充值記錄",
|
||||
10018: "UID 不存在",
|
||||
10019: "不支援的幣別",
|
||||
10020: "操作過於頻繁",
|
||||
10022: "帳號警告",
|
||||
10023: "不支援的地區",
|
||||
10024: "帳號已刪除",
|
||||
10002001: "系統錯誤",
|
||||
10002002: "請求逾時",
|
||||
10002003: "未預期的錯誤",
|
||||
}
|
||||
|
||||
REDEEM_ERRORS = {
|
||||
"E001": "系統錯誤",
|
||||
"E002": "系統錯誤",
|
||||
"E003": "系統錯誤",
|
||||
"E004": "禮品碼不存在",
|
||||
"E005": "禮品碼已過期",
|
||||
"E006": "禮品碼已被使用",
|
||||
"E007": "兌換次數已達上限",
|
||||
"E008": "系統錯誤",
|
||||
"E009": "請稍後再試",
|
||||
}
|
||||
|
||||
|
||||
def get_uid():
|
||||
uid = os.getenv("UID")
|
||||
if not uid:
|
||||
print("錯誤:請在 .env 設定 UID=your_uid_here", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
return uid
|
||||
|
||||
|
||||
def cmd_login(args):
|
||||
uid = args.uid or get_uid()
|
||||
try:
|
||||
resp = requests.get(f"{BASE_URL}/getcodeuser.php", params={"uid": uid}, timeout=10)
|
||||
resp.raise_for_status()
|
||||
data = resp.json()
|
||||
except requests.RequestException as e:
|
||||
print(f"請求失敗:{e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
if data.get("code") == 0:
|
||||
r = data["result"]
|
||||
print(f"登入成功")
|
||||
print(f" 名稱 : {r.get('name')}")
|
||||
print(f" UID : {uid}")
|
||||
print(f" SID : {r.get('sid')}")
|
||||
print(f" 國家 : {r.get('country')}")
|
||||
print(f" 等級 : {r.get('level')}")
|
||||
else:
|
||||
code = data.get("code", 10002001)
|
||||
print(f"登入失敗:{LOGIN_ERRORS.get(code, f'錯誤碼 {code}')}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def cmd_redeem(args):
|
||||
uid = args.uid or get_uid()
|
||||
code = args.code
|
||||
try:
|
||||
resp = requests.get(
|
||||
f"{BASE_URL}/code.php",
|
||||
headers={"Usertoken": uid},
|
||||
params={"uid": uid, "code": code},
|
||||
timeout=10,
|
||||
)
|
||||
resp.raise_for_status()
|
||||
data = resp.json()
|
||||
except requests.RequestException as e:
|
||||
print(f"請求失敗:{e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
error_code = data.get("errorCode")
|
||||
if error_code == "ok":
|
||||
print(f"兌換成功!禮品碼 {code} 已套用")
|
||||
else:
|
||||
msg = REDEEM_ERRORS.get(error_code, f"未知錯誤碼 {error_code}")
|
||||
print(f"兌換失敗:{msg}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Last-Z Gift Center CLI")
|
||||
parser.add_argument("--uid", help="指定 UID(覆蓋 .env)")
|
||||
sub = parser.add_subparsers(dest="command", required=True)
|
||||
|
||||
# login
|
||||
p_login = sub.add_parser("login", help="登入並查看帳號資訊")
|
||||
p_login.add_argument("--uid", help="指定 UID(覆蓋 .env)")
|
||||
p_login.set_defaults(func=cmd_login)
|
||||
|
||||
# redeem
|
||||
p_redeem = sub.add_parser("redeem", help="兌換禮品碼")
|
||||
p_redeem.add_argument("code", help="禮品碼")
|
||||
p_redeem.add_argument("--uid", help="指定 UID(覆蓋 .env)")
|
||||
p_redeem.set_defaults(func=cmd_redeem)
|
||||
|
||||
args = parser.parse_args()
|
||||
args.func(args)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
2
requirements.txt
Normal file
2
requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
requests
|
||||
python-dotenv
|
||||
Reference in New Issue
Block a user