Diep.io servers status online (beta version)

Let you to see Diep.io online

当前为 2025-02-06 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Diep.io servers status online (beta version)
// @version      0.0.3
// @description  Let you to see Diep.io online
// @author       @jaja.morgan
// @match        https://diep.io/*
// @grant        GM_addStyle
// @license      MIT
// @namespace    *://diep.io/
// ==/UserScript==

const hotKeys = ["t", "е"]; // show/hide hotKeys
const refreshTiming = 60; // in seconds

const SVGS = {
sgp:`<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-sg" viewBox="0 0 512 512">
  <defs>
    <clipPath id="sg-a">
      <path fill-opacity=".7" d="M27.7 0h708.6v708.7H27.7z"></path>
    </clipPath>
  </defs>
  <g fill-rule="evenodd" clip-path="url(#sg-a)" transform="translate(-20) scale(.72249)">
    <path fill="#fff" d="M0 0h1063v708.7H0z"></path>
    <path fill="#df0000" d="M0 0h1063v354.3H0z"></path>
    <path fill="#fff" d="M245.2 59.4a124.6 124.6 0 0 0 1.1 243.9 126.9 126.9 0 1 1-1.1-243.9z"></path>
    <path fill="#fff" d="m202 162.4-18.9-13.8 23.5-.2 7.2-22.3 7.5 22.3h23.4l-18.8 14 7.2 22.3L214 171l-19 13.8zm26 76.9-19-13.8 23.5-.2 7.3-22.3 7.4 22.2h23.5l-19 14 7.3 22.3-19-13.6-19 13.8zm86.3-.6-19-13.8 23.4-.2 7.3-22.3 7.4 22.3H357l-18.9 14 7.3 22.3-19.1-13.7-19 13.8zm25.7-76.2-19-13.8 23.5-.2 7.2-22.3 7.5 22.2h23.4l-18.8 14 7.2 22.3-19.1-13.6-19 13.8zM271.7 112l-19-13.8 23.5-.2 7.3-22.3 7.4 22.3h23.5l-19 14 7.3 22.2-19-13.6-19 13.8z"></path>
  </g>
</svg>`,
  fra: `<svg
                xmlns="http://www.w3.org/2000/svg"
                id="flag-icons-de"
                viewBox="0 0 512 512"
              >
                <path fill="#ffce00" d="M0 341.3h512V512H0z"></path>
                <path fill="#000" d="M0 0h512v170.7H0z"></path>
                <path fill="#d00" d="M0 170.7h512v170.6H0z"></path>
              </svg>`,
  atl: `<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-us" viewBox="0 0 512 512">
  <g fill-rule="evenodd">
    <g stroke-width="1pt">
      <path fill="#bd3d44" d="M0 0h247v10H0zm0 20h247v10H0zm0 20h247v10H0zm0 20h247v10H0zm0 20h247v10H0zm0 20h247v10H0zm0 20h247v10H0z" transform="scale(3.9385)"></path>
      <path fill="#fff" d="M0 10h247v10H0zm0 20h247v10H0zm0 20h247v10H0zm0 20h247v10H0zm0 20h247v10H0zm0 20h247v10H0z" transform="scale(3.9385)"></path>
    </g>
    <path fill="#192f5d" d="M0 0h98.8v70H0z" transform="scale(3.9385)"></path>
    <path fill="#fff" d="m8.2 3 1 2.8H12L9.7 7.5l.9 2.7-2.4-1.7L6 10.2l.9-2.7-2.4-1.7h3zm16.5 0 .9 2.8h2.9l-2.4 1.7 1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7h2.9zm16.5 0 .9 2.8H45l-2.4 1.7 1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7h2.9zm16.4 0 1 2.8h2.8l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h3zm16.5 0 .9 2.8h2.9l-2.4 1.7 1 2.7L74 8.5l-2.3 1.7.9-2.7-2.4-1.7h2.9zm16.5 0 .9 2.8h2.9L92 7.5l1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7h2.9zm-74.1 7 .9 2.8h2.9l-2.4 1.7 1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7h2.9zm16.4 0 1 2.8h2.8l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h3zm16.5 0 .9 2.8h2.9l-2.4 1.7 1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7h2.9zm16.5 0 .9 2.8h2.9l-2.4 1.7 1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7H65zm16.4 0 1 2.8H86l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h3zm-74 7 .8 2.8h3l-2.4 1.7.9 2.7-2.4-1.7L6 24.2l.9-2.7-2.4-1.7h3zm16.4 0 .9 2.8h2.9l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h2.9zm16.5 0 .9 2.8H45l-2.4 1.7 1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7h2.9zm16.4 0 1 2.8h2.8l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h3zm16.5 0 .9 2.8h2.9l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h2.9zm16.5 0 .9 2.8h2.9L92 21.5l1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7h2.9zm-74.1 7 .9 2.8h2.9l-2.4 1.7 1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7h2.9zm16.4 0 1 2.8h2.8l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h3zm16.5 0 .9 2.8h2.9l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h2.9zm16.5 0 .9 2.8h2.9l-2.4 1.7 1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7H65zm16.4 0 1 2.8H86l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h3zm-74 7 .8 2.8h3l-2.4 1.7.9 2.7-2.4-1.7L6 38.2l.9-2.7-2.4-1.7h3zm16.4 0 .9 2.8h2.9l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h2.9zm16.5 0 .9 2.8H45l-2.4 1.7 1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7h2.9zm16.4 0 1 2.8h2.8l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h3zm16.5 0 .9 2.8h2.9l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h2.9zm16.5 0 .9 2.8h2.9L92 35.5l1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7h2.9zm-74.1 7 .9 2.8h2.9l-2.4 1.7 1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7h2.9zm16.4 0 1 2.8h2.8l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h3zm16.5 0 .9 2.8h2.9l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h2.9zm16.5 0 .9 2.8h2.9l-2.4 1.7 1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7H65zm16.4 0 1 2.8H86l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h3zm-74 7 .8 2.8h3l-2.4 1.7.9 2.7-2.4-1.7L6 52.2l.9-2.7-2.4-1.7h3zm16.4 0 .9 2.8h2.9l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h2.9zm16.5 0 .9 2.8H45l-2.4 1.7 1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7h2.9zm16.4 0 1 2.8h2.8l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h3zm16.5 0 .9 2.8h2.9l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h2.9zm16.5 0 .9 2.8h2.9L92 49.5l1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7h2.9zm-74.1 7 .9 2.8h2.9l-2.4 1.7 1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7h2.9zm16.4 0 1 2.8h2.8l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h3zm16.5 0 .9 2.8h2.9l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h2.9zm16.5 0 .9 2.8h2.9l-2.4 1.7 1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7H65zm16.4 0 1 2.8H86l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h3zm-74 7 .8 2.8h3l-2.4 1.7.9 2.7-2.4-1.7L6 66.2l.9-2.7-2.4-1.7h3zm16.4 0 .9 2.8h2.9l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h2.9zm16.5 0 .9 2.8H45l-2.4 1.7 1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7h2.9zm16.4 0 1 2.8h2.8l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h3zm16.5 0 .9 2.8h2.9l-2.3 1.7.9 2.7-2.4-1.7-2.3 1.7.9-2.7-2.4-1.7h2.9zm16.5 0 .9 2.8h2.9L92 63.5l1 2.7-2.4-1.7-2.4 1.7 1-2.7-2.4-1.7h2.9z" transform="scale(3.9385)"></path>
  </g>
</svg>`,
  itm: `<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-jp" viewBox="0 0 512 512">
  <defs>
    <clipPath id="jp-a">
      <path fill-opacity=".7" d="M177.2 0h708.6v708.7H177.2z"></path>
    </clipPath>
  </defs>
  <g fill-rule="evenodd" stroke-width="1pt" clip-path="url(#jp-a)" transform="translate(-128) scale(.72249)">
    <path fill="#fff" d="M0 0h1063v708.7H0z"></path>
    <circle cx="523.1" cy="344.1" r="194.9" fill="#d30000" transform="translate(-59.7 -34.5) scale(1.1302)"></circle>
  </g>
</svg>
`,
  syd: ` <svg
                xmlns="http://www.w3.org/2000/svg"
                id="flag-icons-au"
                viewBox="0 0 512 512"
              >
                <path
                  id="path598"
                  fill="#006"
                  stroke-width="1.3"
                  d="M0 0h512v512H0z"
                ></path>
                <path
                  id="path606"
                  fill="#fff"
                  fill-rule="evenodd"
                  stroke-width="1.3"
                  d="M54.9 368.6 95.5 384l13.4-41.4 13.3 41.4 40.7-15.4-24.1 36.3 37.4 22.2-43.3 3.7 6 43.1-30-31.5-30 31.5 6-43-43.4-3.8L79 404.9m325 71.5-19 1.6 2.7 18.8-13-13.7-13 13.7L364 478l-18.8-1.6 16.3-9.6L351 451l17.7 6.7 5.8-18 5.7 18L398 451l-10.4 15.8m16.2-270.4L385 198l2.6 18.8-13-13.7-13 13.7L364 198l-18.8-1.6 16.3-9.6L351 171l17.7 6.7 5.8-18 5.7 18L398 171l-10.4 15.8m-88.8 123.4-18.8 1.6 2.6 18.7-13-13.7-13 13.7 2.5-18.7-18.8-1.6 16.3-9.7-10.5-15.7 17.7 6.7 5.8-18 5.7 18 17.7-6.7-10.4 15.7M497 282.2l-18.8 1.6 2.6 18.7-13-13.7-13 13.7 2.5-18.7-18.8-1.6 16.3-9.7-10.5-15.7 17.7 6.7 5.8-18 5.8 18 17.6-6.7-10.4 15.7M416.6 355l-10.3 6.4 2.9-11.8-9.3-7.8 12-.9 4.7-11.2L421 341l12.1 1-9.2 7.7 2.9 11.8"
                ></path>
                <g id="g1582" transform="scale(.5)">
                  <path id="path1560" fill="#006" d="M0 0h512v512H0z"></path>
                  <path
                    id="path1562"
                    fill="#fff"
                    d="M512 0v64L322 256l190 187v69h-67L254 324 68 512H0v-68l186-187L0 74V0h62l192 188L440 0z"
                  ></path>
                  <path
                    id="path1564"
                    fill="#c8102e"
                    d="m184 324 11 34L42 512H0v-3zm124-12 54 8 150 147v45zM512 0 320 196l-4-44L466 0zM0 1l193 189-59-8L0 49z"
                  ></path>
                  <path
                    id="path1566"
                    fill="#fff"
                    d="M176 0v512h160V0zM0 176v160h512V176z"
                  ></path>
                  <path
                    id="path1568"
                    fill="#c8102e"
                    d="M0 208v96h512v-96zM208 0v512h96V0z"
                  ></path>
                </g>
              </svg>`,
};
const INDICES = {
  regions: {
    fra: 1,
    atl: 2,
    itm: 3,
    syd: 4,
    sgp:5,
  },
  gameModes: {
    ffa: 1,
    teams: 2,
    "4teams": 3,
    maze: 4,
    event: 5,
    sandbox: 6,
  },
};
let lobbiesArr = [];
let inRefreshing = false;

const user_options = {
  sortMode: "region",
  hideRegions: [],
  hideModes: ["sandbox"],
};

const list = document.createElement("div");
list.id = "list";
list.style.display = "none";
list.innerHTML = `<div class="list__headers">
    <h3 class="lobby__region sortable">Region</h3>
    <h3 class="lobby__name">IP</h3>
    <h3 class="lobby__onl sortable">Players</h3>
    <h3 class="lobby__gm sortable">Game Mode</h3>
  </div>
<div class="list__container">
  <div class="list__lobbies">
    <div class="scanning">
      <div>SCANNING ALL FREQUENCIES</div>
      <div class="wrapper">
        <span class="circle circle-1"></span>
        <span class="circle circle-2"></span>
        <span class="circle circle-3"></span>
        <span class="circle circle-4"></span>
        <span class="circle circle-5"></span>
        <span class="circle circle-6"></span>
        <span class="circle circle-7"></span>
        <span class="circle circle-8"></span>
        <span class="circle circle-9"></span>
        <span class="circle circle-10"></span>
      </div>
    </div>
  </div>
  <div class="list__options">
    <h3>Options</h3>
    <ul class="options__filters"></ul>
    <ul class="options__buttons">
      <button class="gray-btn" disable>Connect</button>
      <button class="yellow-btn">Refresh</button>
    </ul>
  </div>
</div>`;
document.body.append(list);
createCB("showFra", "Show Frankfurt:", true);
createCB("showAtl", "Show Atlanta:", true);
createCB("showSgp", "Show Singapore:", true);
createCB("showSyd", "Show Sydney:", true);
setDraggable(list, [list.querySelector(".list__headers")]);

const list_header_players = document.body.querySelector(
  ".list__headers .lobby__onl"
);
const list_header_region = document.body.querySelector(
  ".list__headers .lobby__region"
);
const list_header_gamemode = document.body.querySelector(
  ".list__headers .lobby__gm"
);
list_header_players.onclick = () => {
  if (user_options.sortMode !== "p_increase") {
    user_options.sortMode = "p_increase";
  } else {
    user_options.sortMode = "p_decrease";
  }
  sort();
};
list_header_region.onclick = () => {
  if (user_options.sortMode !== "regions") {
    user_options.sortMode = "regions";
    sort();
  }
};
list_header_gamemode.onclick = () => {
  if (user_options.sortMode !== "gms") {
    user_options.sortMode = "gms";
    sort();
  }
};

const list_lobbies = document.body.querySelector(".list__lobbies");
const scanning = document.body.querySelector(".list__lobbies .scanning");

document.addEventListener("keydown", (e) => {
  if (hotKeys.includes(e.key)) {
    if (list.style.display == "none") {
      list.style.display = "inline-block";
    } else list.style.display = "none";
  }
});

checking();
let chkInt = setInterval(() => {
  checking();
}, refreshTiming * 1000);
setInterval(() => {
  [...list_lobbies.children].forEach((e) => {
    if (e.classList.contains(".lobby__name")) {
      if (e.querySelector(".lobby__name").innerText === lobby_ip) {
        e.classList.add("active");
      } else e.className = "lobby";
    }
  });
}, 1000);

const refresh_btn = document.body.querySelector("button.yellow-btn");
refresh_btn.onclick = () => {
  if (inRefreshing) return;

  clearInterval(chkInt);
  checking();
  chkInt = setInterval(() => {
    checking();
  }, refreshTiming * 1000);
};

function createLobby(r_name, lobby_data) {
  const lobby = document.createElement("div");
  lobby.classList = "lobby";

  const lobby_region = document.createElement("h4");
  lobby_region.classList = "lobby__region";
  lobby_region.innerHTML = SVGS[`${r_name}`];
  lobby.region = r_name;

  const lobby_name = document.createElement("h4");
  lobby_name.classList = "lobby__name";
  lobby_name.innerText = `${lobby_data.ip}`;

  const lobby_onl = document.createElement("h4");
  lobby_onl.classList = "lobby__onl";
  lobby_onl.innerText = `${lobby_data.numPlayers}`;
  lobby.plrsCount = lobby_data.numPlayers;

  const lobby_gm = document.createElement("h4");
  lobby_gm.classList = "lobby__gm";
  lobby_gm.innerText = `${lobby_data.gamemode}`;
  lobby.mode = lobby_data.gamemode;

  lobby.append(lobby_region, lobby_name, lobby_onl, lobby_gm);
  return lobby;
}
function createCB(id, text, isChecked = false) {
  let ln = document.createElement("line");

  let cb = document.createElement("input");
  cb.type = "checkbox";
  cb.id = id;
  cb.checked = isChecked;

  let lb = document.createElement("label");
  lb.htmlFor = id;
  lb.className = "custom-cb";
  lb.innerText = text;

  switch (id) {
    case "showFra":
      cb.onclick = () => {
        if (!cb.checked) {
          user_options.hideRegions.push("fra");
        } else
          user_options.hideRegions = user_options.hideRegions.filter(
            (e) => e !== "fra"
          );
        sort();
      };
      break;
    case "showAtl":
      cb.onclick = () => {
        if (!cb.checked) {
          user_options.hideRegions.push("atl");
        } else
          user_options.hideRegions = user_options.hideRegions.filter(
            (e) => e !== "atl"
          );
        sort();
      };
      break;
    case "showSgp":
      cb.onclick = () => {
        if (!cb.checked) {
          user_options.hideRegions.push("sgp");
        } else
          user_options.hideRegions = user_options.hideRegions.filter(
            (e) => e !== "sgp"
          );
        sort();
      };
      break;
    case "showSyd":
      cb.onclick = () => {
        if (!cb.checked) {
          user_options.hideRegions.push("syd");
        } else
          user_options.hideRegions = user_options.hideRegions.filter(
            (e) => e !== "syd"
          );
        sort();
      };
      break;
  }

  ln.append(cb, lb);
  document.body.querySelector(".list__options ul").append(ln);
}

async function getData() {
  try {
    const response = await fetch("https://lb.diep.io/api/lb/pc");

    return await response.json();
  } catch (e) {
    console.error(e);
  }
}
async function checking() {
  [...list_lobbies.children].forEach((e) => {
    if (e.classList.contains("lobby")) e.remove();
  });
  scanning.style.display = "block";
  lobbiesArr = [];
  inRefreshing = true;

  const data = await getData();
  scanning.style.display = "none";
  inRefreshing = false;

  for (const region of data.regions) {
    for (const lobby of region.lobbies) {
      lobbiesArr.push(createLobby(region.region, lobby));
    }
  }

  sort();
}
function sort() {
  [...list_lobbies.children].forEach((e) => {
    if (e.classList.contains("lobby")) e.remove();
  });

  if (user_options.sortMode === "p_increase") {
    lobbiesArr
      .sort((a, b) => {
        return a.plrsCount - b.plrsCount;
      })
      .reverse();
  } else if (user_options.sortMode === "p_decrease") {
    lobbiesArr.sort((a, b) => {
      return a.plrsCount - b.plrsCount;
    });
  } else if (user_options.sortMode === "regions") {
    lobbiesArr.sort((a, b) => {
      return INDICES.regions[`${a.region}`] - INDICES.regions[`${b.region}`];
    });
  } else if (user_options.sortMode === "gms") {
    lobbiesArr.sort((a, b) => {
      return INDICES.gameModes[`${a.mode}`] - INDICES.gameModes[`${b.mode}`];
    });
  }
  lobbiesArr.forEach((e) => {
    if (user_options.hideModes.includes(e.mode)) return;
    if (user_options.hideRegions.includes(e.region)) return;
    list_lobbies.append(e);
  });
}

function setDraggable(el, el_child) {
  var newPosX = 0,
    newPosY = 0,
    MousePosX = 0,
    MousePosY = 0;
  if (el_child) {
    el_child.forEach((e) => e.addEventListener("mousedown", MouseDown));
  } else el.addEventListener("mousedown", MouseDown);

  function MouseDown(mouseDown) {
    MousePosX = mouseDown.pageX;
    MousePosY = mouseDown.pageY;

    if (el_child) {
      el_child.forEach((e) => e.classList.add("dragableging"));
    } else el.classList.add("dragableging");

    document.addEventListener("mousemove", elementMove);
    document.addEventListener("mouseup", stopElementMove);
  }

  function elementMove(mouseMove) {
    newPosX = MousePosX - mouseMove.pageX;
    newPosY = MousePosY - mouseMove.pageY;
    MousePosX = mouseMove.pageX;
    MousePosY = mouseMove.pageY;

    el.style.top = el.offsetTop - newPosY + "px";
    el.style.left = el.offsetLeft - newPosX + "px";
  }

  function stopElementMove() {
    if (el_child) {
      el_child.forEach((e) => e.classList.remove("dragableging"));
    } else el.classList.remove("dragableging");

    document.removeEventListener("mousemove", elementMove);
    document.removeEventListener("mouseup", stopElementMove);
  }
}

GM_addStyle(`* {
  outline: none;
  border: none;
  margin: 0;
  padding: 0;
}

#list {
  position: absolute;
  z-index: 999;
  top: 50px;
  left: 50%;
  transform: translateX(-50%);
  color: white;
  font-family: "Ubuntu", sans-serif;
  font-size: 14px;
  background-color: #050c0a;
  padding: 0 5px;
  user-select: none;
  box-shadow: #050c0a8a 0px 0px 2px 6px;
}
.list__headers {
  background-color: #050c0a;
  color: #5b9e7d;

  display: flex;
  justify-content: space-between;
  align-items: center;
  text-align: center;
  cursor: grab;
  gap: 25px;

  padding: 15px;
  max-width: 575px;
}
.sortable {
  cursor: pointer;
}

.list__container {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  text-align: center;
  padding: 3px 3px 8px 3px;
}

/* 
* lobbies
 */
.list__lobbies {
  position: relative;
  background-color: #081c1c;
  padding-right: 4px;
  overflow-y: scroll;

  display: flex;
  flex-direction: column;
  align-items: center;
  min-width: 616px;
  height: 395px;
}

.list__lobbies .scanning {
  display: none;
  top: 50%;
  left: 50%;
  transform: translateX(-50%) translateY(-75%);
  position: absolute;
  background-color: #153832;
  color: #8addd3;
  font-size: 28px;
  padding: 5px 10px;
  width: 420px;
}

.circle {
  display: inline-block;
  width: 10px;
  height: 10px;
  opacity: 0;
  border-radius: 3px;
  background-color: #8addd3;
  animation: loading 1.5s cubic-bezier(0.8, 0.5, 0.2, 1.4) infinite;
  position: relative;
}
@keyframes loading {
  0% {
    opacity: 0;
    transform: scale(0);
  }
  40% {
    opacity: 0;
    transform: scale(0);
  }
  60% {
    opacity: 1;
    transform: scale(1);
  }
  80% {
    opacity: 1;
    transform: scale(1);
  }
  100% {
    opacity: 0;
    transform: scale(0);
  }
}
.circle-1 {
  animation-delay: 0s;
}
.circle-2 {
  animation-delay: 0.05s;
}
.circle-3 {
  animation-delay: 0.1s;
}
.circle-4 {
  animation-delay: 0.15s;
}
.circle-5 {
  animation-delay: 0.2s;
}
.circle-6 {
  animation-delay: 0.25s;
}
.circle-7 {
  animation-delay: 0.3s;
}
.circle-8 {
  animation-delay: 0.35s;
}
.circle-9 {
  animation-delay: 0.4s;
}
.circle-10 {
  animation-delay: 0.5s;
}

.list__lobbies::-webkit-scrollbar {
  background-color: #0a2120;
  width: 8px;
  padding: 1px;
}

.list__lobbies::-webkit-scrollbar-thumb {
  background-color: #f3fdfd;
  border-radius: 1px;
}

.lobby {
  background-color: #153832;
  color: #8addd3;

  padding: 5px 15px;
  border-radius: 5px;
  border: #375552 2px solid;
  margin-bottom: -1px;

  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 25px;

  min-width: 500px;
}
.lobby.active {
  background-color: #315a56;
}
.lobby:hover {
  background-color: #2c6b54;
  transition: 0.05s;
}
.chosen {
  background-color: #325c57;
}
.lobby svg {
  align-items: center;
  border-radius: 50%;
  height: 20px;
  width: auto;
}

.lobby__region {
  width: 50px;
}

.lobby__name {
  width: 250px;
}
.lobby .lobby__name {
  user-select: text;
}
.lobby__onl {
  width: 75px;
}
.lobby__gm {
  width: 120px;
}

/* 
* options
 */

.list__options {
  font-weight: bolder;

  background-color: #133532;
  color: #69c49f;
  height: 395px;
  width: 250px;
}
.list__options h3 {
  font-size: 28px;
  margin: 10px 10px 30px 10px;
}

.list__options ul {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  /* align-items: flex-start; */
  text-align: left;
  margin: 0 10px;
}
ul.options__filters {
  margin-bottom: 100px;
}

.list__options line {
  position: relative;
  width: 100%;
  font-size: 14px;
  margin-bottom: 17.5px;
}
.list__options input {
  position: absolute;
  opacity: 0;
}
.custom-cb::before {
  content: "";
  cursor: pointer;
  top: 50%;
  right: 0;
  transform: translateY(-50%);
  position: absolute;
  background-color: transparent;
  border: #69c49f 2px solid;
  width: 20px;
  height: 20px;
}
.custom-cb::after {
  content: "";
  cursor: pointer;
  opacity: 0;
  top: 50%;
  right: 4.5px;
  transform: translateY(-50%);
  position: absolute;
  background-color: #69c49f;
  width: 15px;
  height: 15px;
}
.list__options input:checked + .custom-cb::after {
  opacity: 1;
  transition: 0.05s;
}

/*
* buttons
*/
button {
  position: relative;
  font-size: 24px;
  font-weight: bold;
  color: #bbc9c9;
  margin: 5px 0px;
  padding: 3px 0;
  border-radius: 7.5px;
  cursor: pointer;
}
button.gray-btn {
  background-color: #343434;
  cursor: not-allowed;
  filter: brightness(0.5);
}
button.yellow-btn {
  background-color: #4f4917;
}
button.yellow-btn:hover {
  background-color: #c4b73b;
  box-shadow: inset #4f4917 0px 0px 12px 12px;
}
button.yellow-btn:active {
  background-color: #dfcc20;
  box-shadow: inset #4f4917 0px 0px 10px 7px;
}

.dragableging {
  cursor: grabbing;
}`);