Initial commit: Last-Z Gift Center CLI

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-20 00:43:56 +08:00
commit 7cac4eb127
7 changed files with 275 additions and 0 deletions

121
giftcenter.py Normal file
View 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()