🏠 Home 

Join Anyone

Allows you to join to any player in a Roblox game.


Install this script?
// ==UserScript==
// @name         Join Anyone
// @namespace    http://tampermonkey.net/
// @version      1.1.2
// @description  Allows you to join to any player in a Roblox game.
// @author       Flamex116
// @match        https://www.roblox.com/*
// @grant        none
// ==/UserScript==
/*
This version of this script was made by me, Flamex116.
Text me or friend request me on Roblox I might give you free hacks! So you can find me on Roblox, my username is "Flamex116", or on discord. My username is "dapickle9_47901".
*/
"use strict";
let isRunning = false;
const delay = ms => new Promise(res => setTimeout(res, ms));
const getJson = (url, args = {}) => {
if (!args.headers)
args.headers = {};
return fetch(url, args)
.then((r) => r.json())
.catch((e) => console.log("error:", e));
};
const inst = document.getElementById("running-game-instances-container");
if (inst) {
const div = document.createElement("div");
div.classList = "section";
const header = document.createElement("h2");
header.innerText = "Join Anyone Hacks 1.1";
div.appendChild(header);
const img = document.createElement("img");
img.height = "40";
img.style = "margin-top: -6px; margin-bottom: 4px;";
img.style.display = "none";
div.appendChild(img);
const form = document.createElement("form");
div.appendChild(form);
const input = document.createElement("input");
input.classList = "input-field";
input.placeholder = "Username";
input.addEventListener("input", (e) => {
search.disabled = e.target.value.length === 0;
});
form.appendChild(input);
const search = document.createElement("button");
search.classList = "btn-primary-md";
search.style = "margin-left: 4px;";
search.innerText = "Search";
search.disabled = true;
form.appendChild(search);
const status = document.createElement("p");
form.appendChild(status);
const join = document.createElement("button");
join.style.display = "none";
join.innerText = "Join";
join.classList = "btn-control-xs rbx-game-server-join game-server-join-btn btn-primary-md btn-min-width";
div.appendChild(join);
const copy = document.createElement("button");
copy.style = "margin-left: 4px;";
copy.style.display = "none";
copy.innerText = "Copy Join Link";
copy.classList = "btn-control-xs rg-btn btn-primary-md btn-min-width";
div.appendChild(copy);
inst.insertBefore(div, inst.firstChild);
const placeID = location.href.match(/\d+/)[0];
form.addEventListener("submit", async (event) => {
event.preventDefault();
if (isRunning)
return;
isRunning = true;
try {
join.style.display = "none";
copy.style.display = "none";
status.innerText = "Loading...";
let userID;
try {
const profileData = await fetch(`https://www.roblox.com/users/profile?username=${input.value}`);
if (!profileData.ok)
throw `User "${input.value}" not found`;
userID = profileData.url.match(/\d+/)[0];
}
catch (e) {
console.log("error:", e);
status.innerText = `Error: ${e}`;
img.style.display = "none";
return;
}
const userThumb = (await getJson(`https://thumbnails.roblox.com/v1/users/avatar-headshot?userIds=${userID}&format=Png&size=150x150`)).data[0].imageUrl;
img.src = userThumb.split("/").slice(0, -1).join("/") + "/isCircular";
img.style.display = "";
let cursor = null;
let found = false;
let serversSearched = 0;
let serversStatus = "";
while (true) {
let url = `https://games.roblox.com/v1/games/${placeID}/servers/0?limit=100`;
if (cursor)
url += "&cursor=" + cursor;
const servers = await getJson(url, {
"credentials": "omit", // This may be slower, but will find the player if they're on a public server.
}).catch(() => null);
if (servers !== undefined && servers.data !== undefined) {
for (let i = 0; i < servers.data.length; i++) {
const place = servers.data[i];
if (!found) {
serversSearched++;
serversStatus = `Servers searched: ${serversSearched}`;
status.innerText = serversStatus;
if (place.playerTokens.length === 0)
return;
let data;
while (true) {
let body = [];
place.playerTokens.forEach((token) => {
body.push({
requestId: `0:${token}:AvatarHeadshot:150x150:png:regular`,
type: "AvatarHeadShot",
targetId: 0,
token,
format: "png",
size: "150x150",
});
});
try {
data = await getJson("https://thumbnails.roblox.com/v1/batch", {
method: "POST",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
},
body: JSON.stringify(body),
});
break;
} catch (e) {
console.log("Error:", e);
await delay(1000);
}
}
if (!data.data)
status.innerText = "Error: " + data;
else {
for (let k = 0; k < data.data.length; k++) {
const thumb = data.data[k];
if (thumb && thumb.imageUrl === userThumb) {
found = true;
status.innerText = `User found\n${serversStatus}\n${place.playing} of ${place.maxPlayers} people max`;
join.style.display = "";
join.onclick = () => {
window.Roblox.GameLauncher.joinGameInstance(
placeID,
place.id,
);
};
copy.style.display = "";
copy.onclick = () => {
copy.innerText = "Copied!";
navigator.clipboard.writeText(`https://www.roblox.com/games/start?placeId=${placeID}&gameId=${place.id}`).finally(() => {
delay(1000).then(() => {
copy.innerText = "Copy Join Link";
});
});
};
break;
}
}
}
} else {
break;
}
}
cursor = servers.nextPageCursor;
if (!cursor || found)
break;
else {
let amount = 5;
while (amount > 0) {
let secDef = "seconds";
if (amount === 1)
secDef = "second";
status.innerText = `Waiting ${amount} ${secDef}...\n${serversStatus}`;
amount--;
await delay(1000);
}
status.innerText = `Continuing...\n${serversStatus}`;
}
} else
await delay(1000); // Probably got rate limited...
}
if (!found)
status.innerText = `User not found within the checked servers\n${serversStatus}`;
} finally {
isRunning = false;
}
});
}