Files
lastz-giftcenter-cli/giftcenter.py
2026-03-20 00:43:56 +08:00

122 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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()