Showcase_Tools_2

从点数商店购买第三个展柜

// ==UserScript==
// @name:zh-CN      我需要更多展柜2
// @name            Showcase_Tools_2
// @namespace       https://blog.chrxw.com
// @supportURL      https://blog.chrxw.com/scripts.html
// @contributionURL https://afdian.com/@chr233
// @version         1.1
// @description     从点数商店购买第三个展柜
// @description:zh-CN  从点数商店购买第三个展柜
// @author          Chr_
// @include         https://store.steampowered.com/points/shop/*
// @license         AGPL-3.0
// @connect         api.steampowered.com
// @icon            https://blog.chrxw.com/favicon.ico
// ==/UserScript==

// 初始化
(() => {
  "use strict";

  function addPanel() {
    const container = document.querySelector("#points_shop_root>div>div");

    if (!container) {
      console.error("找不到元素");
      return;
    }

    const token = JSON.parse(
      document
        .querySelector("#application_config")
        ?.getAttribute("data-loyaltystore")
    )?.webapi_token;

    if (!token) {
      console.error("获取token失败");
      return;
    }

    const btn = document.createElement("button");
    btn.textContent = "购买更多展柜";
    btn.addEventListener("click", () => showPanel(token));
    btn.title = btn.textContent;
    btn.style = "position: absolute;right: 50%;top: 10px;padding: 5px;";
    container.appendChild(btn);
  }

  function showPanel(token) {
    const showCases = {
      Steam年度回顾: 24,
      完满主义者展柜: 23,
      精选艺术作品展柜: 22,
      奖励展柜: 21,
      特卖星人统计数据: 20,
      成就展柜: 17,
      我的指南: 16,
      收藏的指南: 15,
      视频展柜: 14,
      艺术作品展柜: 13,
      我的创意工坊展柜: 12,
      创意工坊展柜: 11,
      评测展柜: 10,
      最喜爱的组: 9,
      自定义信息框: 8,
      截图展柜: 7,
      最喜爱的游戏: 6,
      徽章收藏家: 5,
      打算交易的物品: 4,
      物品展柜: 3,
      游戏收藏家: 2,
      最稀有成就展柜: 1,
    };

    const div = document.createElement("div");

    const select = document.createElement("select");
    select.style = "padding: 5px;margin-right: 10px;";
    for (let name in showCases) {
      const option = document.createElement("option");
      option.value = showCases[name];
      option.textContent = name;
      option.title = name;
      select.appendChild(option);
    }

    div.appendChild(select);

    const dialog = ShowDialog("要购买什么展柜?", div);

    const button = document.createElement("button");
    button.textContent = "买!!! (请确保点数充裕)";
    button.style = "padding: 3px;";
    button.addEventListener("click", async () => {
      await buyShowcases(token, select.value);

      dialog.Dismiss();
    });
    div.appendChild(button);
  }

  setTimeout(addPanel, 2000);

  // 购买展柜
  function buyShowcases(token, type = 1) {
    return new Promise((resolve, reject) => {
      fetch(
        `https://api.steampowered.com/ILoyaltyRewardsService/RedeemPointsForProfileCustomization/v1/?access_token=${token}&customization_type=${type}`,
        {
          method: "POST",
        }
      )
        .then((response) => {
          response.json().then((json) => {
            const { success } = json;
            resolve(success);
          });
        })
        .catch((err) => {
          console.error(err);
          reject(`购买展柜失败 ${err}`);
        });
    });
  }
})();