await(async function () { const config = { 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", }, }, token: localStorage.getItem("x-csrf-token"), steps: [ { name: "Set Avatar Type", execute: async function () { const response = await request({ URL: "https://avatar.roblox.com/v1/avatar/set-player-avatar-type", Method: "POST", Headers: { "Content-Type": "application/json", "x-csrf-token": config.token, }, Data: { playerAvatarType: config.settings.avatarType, }, }); return response.status === 200 && (await response.json()).success; } }, { name: "Set Scales", execute: async function () { const response = await request({ URL: "https://avatar.roblox.com/v1/avatar/set-scales", Method: "POST", Headers: { "Content-Type": "application/json", "x-csrf-token": config.token, }, Data: config.settings.scales, }); return response.status === 200 && (await response.json()).success; } }, { name: "Set Gender", execute: async function () { const response = await request({ URL: "https://users.roblox.com/v1/gender", Method: "POST", Headers: { "Content-Type": "application/json", "x-csrf-token": config.token, }, Data: { gender: config.settings.gender, }, }); return response.status === 200; } }, { name: "Set Language", execute: async function () { const response = await request({ URL: "https://locale.roblox.com/v1/locales/set-user-supported-locale", Method: "POST", Headers: { "Content-Type": "application/json", "x-csrf-token": config.token, }, Data: { supportedLocaleCode: config.settings.language, }, }); return response.status === 200 && (await response.json()).success; } }, { name: "Set Theme", execute: async function () { const response = await request({ URL: "https://accountsettings.roblox.com/v1/themes/user", Method: "PATCH", Headers: { "Content-Type": "application/json", "x-csrf-token": config.token, }, Data: { themeType: config.settings.theme, }, }); return response.status === 200; } }, { name: "Set User Settings", execute: async function () { const response = await request({ URL: "https://apis.roblox.com/user-settings-api/v1/user-settings", Method: "POST", Headers: { "Content-Type": "application/json", "x-csrf-token": config.token, }, Data: config.settings.userSettings, }); return response.status === 200; } } ], count: { successes: 0, fails: 0, } }; function log(success, step) { config.count[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", }); } console.log("⚙️ Configuring account"); await Promise.all(config.steps.map(async function ({ execute, name }) { try { log((await execute()) || false, name); } catch (_) { log(false, name); } })); console.log(`📋 ${config.count.successes} successes, ${config.count.fails} fails`); console.log( config.count.fails > 0 ? "⚠️ There were some failures" : "✅ Everything succeeded", ); })();