Facebook
From Rafsaf, 3 Years ago, written in JavaScript.
Embed
Download Paste or View Raw
Hits: 36
  1. function process() {
  2.   const params = new URLSearchParams(location.search);
  3.  
  4.   if (
  5.     params.get("screen") !== "ally" ||
  6.     (params.get("mode") !== "members_defense" &&
  7.       params.get("mode") !== "members_troops")
  8.   ) {
  9.     UI.ErrorMessage("Przejdz do Plemie -> Czlonkowie -> Wojska/Obrona", "2e3");
  10.   } else {
  11.     const cacheTime = Data.cacheTime * 60 * 1000;
  12.     let output = "";
  13.     let lackAccessPlayers = "";
  14.     let players = [];
  15.     let scriptName;
  16.     let firstLine;
  17.     let showFirstLine;
  18.     let showNicknames;
  19.     let mode;
  20.     if (params.get("mode") === "members_troops") {
  21.       scriptName = "Zbiorka Wojska";
  22.       firstLine = Data.firstLineTroops;
  23.       showFirstLine = Data.showFirstLineTroops;
  24.       showNicknames = Data.showNicknamesTroops;
  25.       mode = "troops";
  26.     } else {
  27.       scriptName = "Zbiorka Deffa";
  28.       firstLine = Data.firstLineDeff;
  29.       showFirstLine = Data.showFirstLineDeff;
  30.       showNicknames = Data.showNicknamesDeff;
  31.       mode = "defence";
  32.     }
  33.  
  34.     // Adds players from current html to get array with players nicknames and ids
  35.     const AllPlayersList = () => {
  36.       Array.from(
  37.         document.querySelector("#ally_content .input-nicer").options
  38.       ).forEach((option_element, index) => {
  39.         if (index !== 0) {
  40.           players.push({
  41.             id: option_element.value,
  42.             nick: option_element.text.trim(),
  43.             disabled: option_element.disabled,
  44.           });
  45.         }
  46.       });
  47.     };
  48.  
  49.     // Uses some methods to get all stuff from table with units from current html player page
  50.     const AddPlayerPageToOutput = (playerPageDocument, playerNick, useNick) => {
  51.       const tableRows = playerPageDocument.querySelectorAll(
  52.         ".table-responsive .vis tr"
  53.       );
  54.       let noAccess = false;
  55.       let playerOutputTroops = "";
  56.       let coord = "";
  57.       tableRows.forEach((oneVillageNode, rowIndex) => {
  58.         if (rowIndex === 0) {
  59.           return;
  60.         }
  61.         if (output !== "" || playerOutputTroops !== "") {
  62.           playerOutputTroops += "\r\n";
  63.         }
  64.         if (useNick) {
  65.           playerOutputTroops += playerNick + ",";
  66.         }
  67.         let unitRow = oneVillageNode.querySelectorAll("td");
  68.         unitRow.forEach((col, colIndex) => {
  69.           let value = String(col.innerHTML).trim();
  70.           if (value === "?") {
  71.             noAccess = true;
  72.           }
  73.           if (colIndex === 0) {
  74.             if (value.includes("|")) {
  75.               value = value.split("").reverse().join("");
  76.               const coordIndex1 = value.search("[)]");
  77.               const coordIndex2 = value.search("[(]");
  78.               value = value.slice(coordIndex1 + 1, coordIndex2);
  79.               value = value.split("").reverse().join("");
  80.               coord = value;
  81.             } else {
  82.               playerOutputTroops += coord + ",";
  83.             }
  84.           }
  85.           playerOutputTroops += value + ",";
  86.         });
  87.       });
  88.       if (noAccess) {
  89.         lackAccessPlayers += `<p style="margin:0">${playerNick}</p>`;
  90.       } else {
  91.         output += playerOutputTroops;
  92.       }
  93.     };
  94.     // To add player_id to current path
  95.     const GetURL = (id) => {
  96.       const params = new URLSearchParams(window.location.search);
  97.       params.set("player_id", id);
  98.       return ""
  99.         .concat(window.location.origin)
  100.         .concat(window.location.pathname, "?")
  101.         .concat(params.toString());
  102.     };
  103.     // Used to parse string from fetch func to html
  104.     const ConvertToHTML = (pageText) => {
  105.       const parser = new DOMParser();
  106.       const playerPageDocument = parser.parseFromString(pageText, "text/html");
  107.       return playerPageDocument.body;
  108.     };
  109.  
  110.     // 0. If cacheTime smaller than actual Time, use localStorage output.
  111.     // 1. Use AllPlayersList to get Players.
  112.     // 2. If no access to a player, his nick goes to lackAccess variable.
  113.     // 3. ForLoop players with access.
  114.     // 3.1 Fetch a player page.
  115.     // 3.2 Add his troops to output -> AddPlayerPageToOutput.
  116.     // 4. Add results to localStorage.
  117.     // 5. Dialog with results.
  118.  
  119.     async function RenderPlayerTroops() {
  120.       const removedPlayers = Data.removedPlayers.split(";");
  121.       const today = new Date().getTime();
  122.       const afterCacheTime = today + cacheTime;
  123.       const storageDate = localStorage.getItem("troops-storageDate" + mode);
  124.       let parseTime;
  125.  
  126.       if (today < storageDate && Data.cache) {
  127.         output = localStorage.getItem("troops-output" + mode);
  128.         lackAccessPlayers = localStorage.getItem(
  129.           "troops-lackAccessPlayers" + mode
  130.         );
  131.         parseTime = new Date(
  132.           parseInt(localStorage.getItem("troops-parseTime" + mode))
  133.         );
  134.         parseTime = parseTime.toLocaleTimeString();
  135.       } else {
  136.         parseTime = new Date(today);
  137.         parseTime = parseTime.toLocaleTimeString();
  138.         AllPlayersList();
  139.         players
  140.           .filter((player) => {
  141.             return player.disabled === true;
  142.           })
  143.           .map((player) => {
  144.             let nick = player.nick;
  145.             const index = nick.search("[(]");
  146.             nick = nick.slice(0, index).trim();
  147.             lackAccessPlayers += `<p style="margin:0">${nick}</p>`;
  148.           });
  149.  
  150.         await Promise.all(
  151.           players
  152.             .filter((player) => {
  153.               return (
  154.                 player.disabled === false &&
  155.                 !removedPlayers.includes(player.nick)
  156.               );
  157.             })
  158.             .map(async (player) => {
  159.               const response = await fetch(GetURL(player.id));
  160.               const html = await response.text();
  161.               const playerPageDocument = ConvertToHTML(html);
  162.               const useNick = showNicknames ? true : false;
  163.               AddPlayerPageToOutput(playerPageDocument, player.nick, useNick);
  164.             })
  165.         );
  166.         localStorage.setItem("troops-parseTime" + mode, String(today));
  167.         localStorage.setItem("troops-storageDate" + mode, afterCacheTime);
  168.         localStorage.setItem("troops-output" + mode, output);
  169.         localStorage.setItem(
  170.           "troops-lackAccessPlayers" + mode,
  171.           lackAccessPlayers
  172.         );
  173.       }
  174.       Dialog.show(
  175.         "scriptFinalContent",
  176.         `<h2 style="width:600px;">${scriptName}:</h2>
  177.             ${
  178.               Data.removedPlayers === ""
  179.                 ? ""
  180.                 : `<p>Nieuwzględnieni: ${Data.removedPlayers}</p>`
  181.             }${
  182.           lackAccessPlayers === ""
  183.             ? ``
  184.             : `<h4>Uwaga, czesciowy lub calkowity brak podgladu:</h4>` +
  185.               lackAccessPlayers
  186.         }<textarea rows="15" style="width:95%;margin-top:15px;margin-bottom:25px;">${
  187.           showFirstLine ? firstLine + "\r\n" : ""
  188.         }${output}</textarea>
  189.                 <p style="text-align:right"><small>Wygenerowano ${parseTime}.</small></p>`
  190.       );
  191.     }
  192.  
  193.     RenderPlayerTroops();
  194.   }
  195. }
  196. process();
  197.