Greasy Fork镜像 支持简体中文。

MooMoo.io Server Fill Bots

gives you magical powers

  1. // ==UserScript==
  2. // @name MooMoo.io Server Fill Bots
  3. // @namespace MooMoo.io Server Fill Bots
  4. // @description gives you magical powers
  5. // @version 0.1
  6. // @match *://*.moomoo.io/*
  7. // @run-at document-start
  8. // @license MIT
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. /*
  13. My discord: wealthydev
  14. My youtube: https://www.youtube.com/@wealthyDev
  15.  
  16. How To Use:
  17.  
  18. possible prefixes: ".", "!", "/"
  19.  
  20. prefix + fill to send countless bots into the server.
  21. prefix + remove to remove bots from the server.
  22. prefix + state to check player count.
  23.  
  24. ex: /fill /remove /state
  25.  
  26. issues:
  27. if bots take a while to join(up to 120 seconds) it could be because of 2 reasons:
  28. servers are waking up, so just wait
  29. or
  30. you got rate limited by google recaptcha so use VPN (extension or app)
  31. recommended VPN extension: https://veepn.com/vpn-apps/vpn-for-chrome/
  32. */
  33.  
  34. const id = Math.floor(Math.random() * 9e16);
  35. const project = "groovy-sore-enthusiasm";
  36. const bots = 80;
  37.  
  38. const extractIp = (url) => {
  39. const match = url.match(/wss:\/\/([\w-]+\.[\w-]+\.[\w-]+)\./);
  40. return match ? match[1] : null;
  41. };
  42.  
  43. const request = (type, ip, token, pid) => {
  44. let url = `https://${project}.glitch.me/?id=${id}&type=${type}&ip=${ip}`;
  45. if (token) url += `&pid=${pid || 0}&token=${token}`;
  46. fetch(url);
  47. };
  48.  
  49. const verify = async (fill) => {
  50. if(fill && removed) {
  51. alert("reload the page or use another tab");
  52.  
  53. return false;
  54. }
  55.  
  56. const result = await prompt("do you wish to continue? (yes/no)", "yes");
  57.  
  58. return result === "yes";
  59. }
  60.  
  61. let removed = false;
  62.  
  63. const actions = {
  64. fill: async () => {
  65. if(!socket || !verify(true)) return null;
  66. console.log("Filling server with bots");
  67.  
  68. for (let bot = 0; bot < bots; bot += 1) {
  69. if(removed) return null;
  70.  
  71. const token = await window.grecaptcha.execute("6LfahtgjAAAAAF8SkpjyeYMcxMdxIaQeh-VoPATP", { action: "homepage" });
  72. request("fill", extractIp(socket.url), token, Math.ceil((bot + 1) / 4) - 1);
  73. }
  74. },
  75. remove: () => {
  76. if(!socket || !verify()) return null;
  77. console.log("Removing bots from the server");
  78.  
  79. removed = true;
  80.  
  81. request("remove", extractIp(socket.url));
  82. },
  83. state: () => {
  84. if(!socket) return null;
  85.  
  86. console.log("Checking state")
  87.  
  88. const { host } = window.location;
  89. const parent = host.split(".")[0];
  90.  
  91. let url = "";
  92.  
  93. switch(parent) {
  94. case "sandbox":
  95. url = "https://api-sandbox.moomoo.io"
  96. break;
  97. case "dev":
  98. url = "https://api-dev.moomoo.io";
  99. break;
  100. default:
  101. url = "https://api.moomoo.io"
  102. break;
  103. }
  104.  
  105. const ip = extractIp(socket.url);
  106.  
  107. fetch(`${url}/servers?v=1.22`).then((res) => res.json()).then((parsed) => {
  108. let serverData = parsed;
  109.  
  110. for(let server of serverData) {
  111. if(`${server.key}.${server.region}.moomoo` === ip) alert(`players: ${server.playerCount}/${server.playerCapacity}`);
  112. }
  113. })
  114. }
  115. };
  116.  
  117. let socket;
  118.  
  119. (async () => {
  120. try {
  121. const msgpackScript = await fetch("https://rawgit.com/kawanet/msgpack-lite/master/dist/msgpack.min.js").then(response => response.text());
  122. eval(msgpackScript);
  123.  
  124. const originalWS = WebSocket;
  125. window.WebSocket = class extends originalWS {
  126. constructor(...args) {
  127. super(...args);
  128. this.send = new Proxy(super.send, {
  129. apply: (target, thisArg, args) => {
  130. const [type, [data]] = window.msgpack.decode(new Uint8Array(...args));
  131. if (type === "6") {
  132. const lowerData = data.toLowerCase();
  133. if ([".", "!", "/"].includes(lowerData[0]) && lowerData.length > 1) {
  134. window.onbeforeunload = () => actions.remove(socket);
  135.  
  136. const cmd = lowerData.slice(1).split(' ')[0];
  137. const action = actions[cmd];
  138.  
  139. socket = this;
  140. if (action) return action(this);
  141. }
  142. }
  143. return target.apply(thisArg, args);
  144. }
  145. });
  146. }
  147. };
  148. } catch (error) {
  149. console.error("Error:", error);
  150. location.reload();
  151. }
  152. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址