122 lines
3.3 KiB
Python
122 lines
3.3 KiB
Python
#!/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()
|