await (async function () { const settings = { avatarType: "R15", scales: { height: 0.9, width: 0.7, head: 0.95, proportion: 0, bodyType: 0, }, gender: 2, // Male language: "en_us", // English theme: "Dark", userSettings: { whoCanSeeMySocialNetworks: "NoOne", whoCanChatWithMeInExperiences: "AllUsers", whoCanWhisperChatWithMeInExperiences: "AllUsers", whoCanOneOnOnePartyWithMe: "Friends", whoCanGroupPartyWithMe: "Friends", whoCanSeeMyOnlineStatus: "Friends", whoCanJoinMeInExperiences: "Friends", updateFriendsAboutMyActivity: "No", privateServerPrivacy: "Friends", whoCanSeeMyInventory: "NoOne", allowPersonalizedAdvertising: "Disabled", allowSellShareData: "Disabled", allowMarketingEmailNotifications: "Disabled", }, }; const csrfToken = localStorage.getItem("x-csrf-token"); const steps = { successes: 0, fails: 0, }; function log(success, step) { steps[success ? "successes" : "fails"] += 1; console.log(`${success ? "✅" : "⚠️"} ${step}`); } async function request(config) { return await fetch(config.URL, { method: config.Method, headers: config.Headers, body: config.Data ? JSON.stringify(config.Data) : undefined, credentials: "include", referrer: "https://www.roblox.com", }); } async function setAvatarType() { const step = "Set Avatar Type"; const config = { URL: "https://avatar.roblox.com/v1/avatar/set-player-avatar-type", Method: "POST", Headers: { "Content-Type": "application/json", "x-csrf-token": csrfToken, }, Data: { playerAvatarType: settings.avatarType, }, }; try { const response = await request(config); if (response.status !== 200) return log(false, step); const json = await response.json(); log(json.success, step); } catch (_) { log(false, step); } } async function setScales() { const step = "Set Scales"; const config = { URL: "https://avatar.roblox.com/v1/avatar/set-scales", Method: "POST", Headers: { "Content-Type": "application/json", "x-csrf-token": csrfToken, }, Data: settings.scales, }; try { const response = await request(config); if (response.status !== 200) return log(false, step); const json = await response.json(); log(json.success, step); } catch (_) { log(false, step); } } async function setGender() { const step = "Set Gender"; const config = { URL: "https://users.roblox.com/v1/gender", Method: "POST", Headers: { "Content-Type": "application/json", "x-csrf-token": csrfToken, }, Data: { gender: settings.gender, }, }; try { const response = await request(config); log(response.status === 200, step); } catch (_) { log(false, step); } } async function setLanguage() { const step = "Set Language"; const config = { URL: "https://locale.roblox.com/v1/locales/set-user-supported-locale", Method: "POST", Headers: { "Content-Type": "application/json", "x-csrf-token": csrfToken, }, Data: { supportedLocaleCode: settings.language, }, }; try { const response = await request(config); if (response.status !== 200) return log(false, step); const json = await response.json(); log(json.success, step); } catch (_) { log(false, step); } } async function setTheme() { const step = "Set Theme"; const config = { URL: "https://accountsettings.roblox.com/v1/themes/user", Method: "PATCH", Headers: { "Content-Type": "application/json", "x-csrf-token": csrfToken, }, Data: { themeType: settings.theme, }, }; try { const response = await request(config); log(response.status === 200, step); } catch (_) { log(false, step); } } async function setUserSettings() { const step = "Set User Settings"; const config = { URL: "https://apis.roblox.com/user-settings-api/v1/user-settings", Method: "POST", Headers: { "Content-Type": "application/json", "x-csrf-token": csrfToken, }, Data: settings.userSettings, }; try { const response = await request(config); log(response.status === 200, step); } catch (_) { log(false, step); } } console.log("⚙️ Configuring account"); await Promise.all([ setAvatarType(), setScales(), setGender(), setLanguage(), setTheme(), setUserSettings(), ]); console.log(`📋 ${steps.successes} successes, ${steps.fails} fails`); console.log( steps.fails > 0 ? "⚠️ There were some failures" : "✅ Everything succeeded", ); })();