# Roblox Account Stalker Node.js ESM scraper/wrapper untuk mengambil data publik akun Roblox berdasarkan **username**. Output JSON lengkap: profil, avatar (item yang dipakai + gambar), emotes, social stats, presence, groups, badges, username history, favorite games, dll. ## Fitur - Resolve username → user ID - Profil lengkap (id, name, displayName, description, created, isBanned, verified badge) - **Username history** (previous usernames) - **Avatar lengkap** - Tipe (R6 / R15) - Body colors & scales - Semua item yang sedang dipakai (`equippedAssets`) + **imageUrl** - Diurutkan: fashion/accessory dulu → face/head → body parts → animation - Emotes + **imageUrl** - Thumbnail avatar user (full body, headshot, bust) - Social counts (friends / followers / followings) - Presence (offline / online / in-game) - Groups + role - Recent experience badges - Official Roblox system badges - Favorite games (public) - Profile URL ## Requirement - Node.js **18+** (butuh native `fetch`) - Tidak butuh dependency tambahan - Tidak butuh cookie / API key (semua endpoint public) ## Cara pakai ### CLI ```bash node roblox-stalk.js node roblox-stalk.js --pretty # alias node roblox-stalk.js -p ``` Contoh: ```bash node roblox-stalk.js builderman --pretty node roblox-stalk.js sann289 -p ``` ### Sebagai module ```js import { stalk } from './roblox-stalk.js'; const data = await stalk('builderman'); console.log(data.user.displayName); console.log(data.thumbnails.headshot); console.log(data.avatar.equippedAssets[0].imageUrl); console.log(data.avatar.emotes); ``` Opsi tambahan: ```js const data = await stalk('builderman', { thumbnailSize: '420x420', // ukuran avatar user assetThumbnailSize: '150x150', // ukuran gambar item/emote }); ``` ## Struktur output (ringkas) ```json { "success": true, "fetchedAt": "2026-10-28T...", "user": { "id": 156, "name": "builderman", "displayName": "builderman", "description": "...", "created": "2006-...", "isBanned": false, "hasVerifiedBadge": true, "social": { "friends": 12, "followers": 50000, "followings": 10 }, "usernameHistory": [ { "name": "old_name" } ] }, "avatar": { "playerAvatarType": "R15", "bodyColors": { ... }, "scales": { ... }, "emotes": [ { "assetId": 123, "assetName": "Wave", "position": 1, "imageUrl": "https://tr.rbxcdn.com/...", "imageState": "Completed" } ], "equippedAssets": [ { "id": 456, "name": "Classic Fedora", "assetType": "Hat", "assetTypeId": 8, "imageUrl": "https://tr.rbxcdn.com/...", "imageState": "Completed" } ] }, "thumbnails": { "fullBody": "https://tr.rbxcdn.com/...", "headshot": "https://tr.rbxcdn.com/...", "bust": "https://tr.rbxcdn.com/..." }, "presence": { "userPresenceType": 0, "lastLocation": "Website" }, "groups": [ ... ], "recentBadges": [ ... ], "robloxBadges": [ ... ], "favoriteGames": [ ... ], "profileUrl": "https://www.roblox.com/users/156/profile" } ``` ### `userPresenceType` | Value | Meaning | |-------|-----------| | 0 | Offline | | 1 | Online | | 2 | InGame | | 3 | InStudio | ## Catatan penting - Semua data diambil dari **public API** Roblox. Tidak butuh login. - Inventory penuh / RAP / limited sering **private** → yang diambil hanya item yang **sedang dipakai**. - Rate limit Roblox cukup ketat (terutama `username-history`). Jangan spam terlalu cepat. - Beberapa field bisa `null` / `[]` kalau private atau tidak tersedia. - `bust` thumbnail kadang `Pending` / `null` — normal dari sisi Roblox. ## Endpoint yang dipakai | Data | Endpoint | |-------------------|----------| | Username → ID | `POST users.roblox.com/v1/usernames/users` | | User profile | `GET users.roblox.com/v1/users/{id}` | | Username history | `GET users.roblox.com/v1/users/{id}/username-history` | | Avatar | `GET avatar.roblox.com/v1/users/{id}/avatar` | | User thumbnails | `GET thumbnails.roblox.com/v1/users/avatar*` | | Asset thumbnails | `GET thumbnails.roblox.com/v1/assets` | | Friends count | `GET friends.roblox.com/v1/users/{id}/friends/count` | | Presence | `POST presence.roblox.com/v1/presence/users` | | Groups | `GET groups.roblox.com/v2/users/{id}/groups/roles` | | Experience badges | `GET badges.roblox.com/v1/users/{id}/badges` | | Roblox badges | `GET accountinformation.roblox.com/v1/users/{id}/roblox-badges` | | Favorite games | `GET games.roblox.com/v2/users/{id}/favorite/games` | ## License Bebas dipakai / dimodifikasi.