增加兑换
This commit is contained in:
@@ -50,6 +50,8 @@ class DouyuActivityClient:
|
||||
ESPORTS_AGREEMENT_API = "https://www.douyu.com/wgapi/ordnc/activity/peacematch/agreement"
|
||||
ESPORTS_ACT_BIND_API = "https://www.douyu.com/wgapi/ordnc/live/memberthird/tencent/actBind"
|
||||
ESPORTS_USER_INFO_API = "https://www.douyu.com/wgapi/ordnc/activity/peacematch/getUserInfo"
|
||||
ESPORTS_GOODS_API = "https://www.douyu.com/wgapi/ordnc/activity/peacematch/storehome"
|
||||
ESPORTS_EXCHANGE_API = "https://www.douyu.com/wgapi/ordnc/activity/peacematch/exchange"
|
||||
GOLD_QR_API = "https://cz.douyu.com/m/gold/getQrCode"
|
||||
GOLD_ACCOUNT_API = "https://cz.douyu.com/item/gold/account"
|
||||
EXCHANGE_BALANCE_API = "https://www.douyu.com/wjapi/nc/exchange/fim"
|
||||
@@ -507,6 +509,71 @@ class DouyuActivityClient:
|
||||
"raw": payload,
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def _esports_shop_referer(rid: str) -> str:
|
||||
return (
|
||||
"https://www.douyu.com/pages/live-peace-pel/web/shop"
|
||||
f"?roomId={rid or '0'}&isAnchorSide=0"
|
||||
)
|
||||
|
||||
def list_esports_goods(self, *, manual_id: str, rid: str) -> dict[str, Any]:
|
||||
"""查询电竞手册皮肤商城。"""
|
||||
payload = self._request_json(
|
||||
"get",
|
||||
self.ESPORTS_GOODS_API,
|
||||
"刷新电竞皮肤商城",
|
||||
params={"manualID": manual_id, "rid": rid},
|
||||
headers={
|
||||
"Origin": "",
|
||||
"Referer": self._esports_shop_referer(rid),
|
||||
},
|
||||
)
|
||||
goods = (payload.get("data") or {}).get("list") or []
|
||||
return {
|
||||
"goods": goods,
|
||||
"score": (payload.get("data") or {}).get("score"),
|
||||
"raw": payload,
|
||||
}
|
||||
|
||||
def exchange_esports_goods(
|
||||
self,
|
||||
*,
|
||||
manual_id: str,
|
||||
rid: str,
|
||||
commodity_id: str,
|
||||
quantity: int = 1,
|
||||
ctn: str | None = None,
|
||||
) -> dict[str, Any]:
|
||||
"""兑换电竞手册皮肤商城商品。"""
|
||||
referer = self._esports_shop_referer(rid)
|
||||
ctn_value = ctn or self.esports_ctn(referer=referer)
|
||||
self._set_cookie_value("acf_ccn", ctn_value)
|
||||
payload = self._request_json(
|
||||
"post",
|
||||
self.ESPORTS_EXCHANGE_API,
|
||||
"兑换电竞皮肤",
|
||||
data={
|
||||
"manualID": manual_id,
|
||||
"commodityID": commodity_id,
|
||||
"rid": rid or "0",
|
||||
"num": str(max(1, quantity)),
|
||||
"ctn": ctn_value,
|
||||
},
|
||||
headers={
|
||||
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
|
||||
"Origin": "",
|
||||
"Referer": referer,
|
||||
},
|
||||
)
|
||||
if payload.get("error") not in (0, "0"):
|
||||
raise DouyuActivityError(payload.get("msg") or "兑换电竞皮肤失败")
|
||||
return {
|
||||
"commodity_id": commodity_id,
|
||||
"quantity": max(1, quantity),
|
||||
"ctn": ctn_value,
|
||||
"raw": payload,
|
||||
}
|
||||
|
||||
def create_gold_qr(self, *, amount: int, pay_type: int = 1, product_id: str = "DYTV_Product_Gold_1") -> dict[str, Any]:
|
||||
"""生成鱼翅充值支付二维码。"""
|
||||
payload = self._request_json(
|
||||
@@ -533,19 +600,20 @@ class DouyuActivityClient:
|
||||
raise DouyuActivityError(payload.get("msg") or "生成鱼翅充值码失败")
|
||||
return {"pay_url": pay_url, "token": token, "raw": payload}
|
||||
|
||||
def donate_elite_gift(
|
||||
def _donate_gift(
|
||||
self,
|
||||
*,
|
||||
gift_count: int,
|
||||
room_id: str,
|
||||
gift_id: str,
|
||||
skin_id: str,
|
||||
source: str,
|
||||
) -> dict[str, Any]:
|
||||
"""赠送精英令礼物。"""
|
||||
"""赠送直播间礼物。"""
|
||||
payload = self._request_json(
|
||||
"post",
|
||||
self.DONATE_API,
|
||||
"赠送精英令",
|
||||
source,
|
||||
data={
|
||||
"giftId": gift_id,
|
||||
"giftCount": str(gift_count),
|
||||
@@ -559,9 +627,44 @@ class DouyuActivityClient:
|
||||
},
|
||||
)
|
||||
if payload.get("error") not in (0, "0") and payload.get("msg") != "success":
|
||||
raise DouyuActivityError(payload.get("msg") or "赠送精英令失败")
|
||||
raise DouyuActivityError(payload.get("msg") or f"{source}失败")
|
||||
return {"raw": payload}
|
||||
|
||||
def donate_elite_gift(
|
||||
self,
|
||||
*,
|
||||
gift_count: int,
|
||||
room_id: str,
|
||||
gift_id: str,
|
||||
skin_id: str,
|
||||
) -> dict[str, Any]:
|
||||
"""赠送精英令礼物。"""
|
||||
return self._donate_gift(
|
||||
gift_count=gift_count,
|
||||
room_id=room_id,
|
||||
gift_id=gift_id,
|
||||
skin_id=skin_id,
|
||||
source="赠送精英令",
|
||||
)
|
||||
|
||||
def donate_esports_gift(
|
||||
self,
|
||||
*,
|
||||
gift_name: str,
|
||||
gift_count: int,
|
||||
room_id: str,
|
||||
gift_id: str,
|
||||
skin_id: str,
|
||||
) -> dict[str, Any]:
|
||||
"""赠送电竞手册任务指定礼物。"""
|
||||
return self._donate_gift(
|
||||
gift_count=gift_count,
|
||||
room_id=room_id,
|
||||
gift_id=gift_id,
|
||||
skin_id=skin_id,
|
||||
source=f"赠送{gift_name}",
|
||||
)
|
||||
|
||||
def query_points(self, *, uid: str, ctn: str) -> dict[str, Any]:
|
||||
"""查询手册积分余额。"""
|
||||
payload = self._request_json(
|
||||
|
||||
Reference in New Issue
Block a user