Lightweight Node.js runner for Discord Rich Presence using a user token and discord.js-selfbot-v13.
Using user-token selfbot tooling can violate Discord Terms of Service and can result in account action. Use at your own risk.
- Node.js 18+
- npm
npm install
cp config.example.json config.jsonThen edit config.json.
npm start{
"token": "MTMzOTI3NjgyMTMwODM3NTEzMQ.GnI6jV.J9B9xPlAnxe5buN8vbpjPdU3I9aSGeNaW0M",
"rpc": {
"type": "WATCHING",
"name": "A Video",
"details": "Google Chrome",
"state": "Incognito Mode",
"startTimestamp": 1,
"endTimestamp": null,
"status": "idle",
"imageBig": "https://i.imgur.com/sAWJ80r.png",
"imageBigText": "Google Chrome",
"imageSmall": "https://i.imgur.com/Pts4gjW.png",
"imageSmallText": "Incognito Mode"
}
}type: Activity type. Valid values:PLAYING,STREAMING,LISTENING,WATCHING,COMPETING.name: Main activity line (required by Discord presence).details: Secondary line under the activity name.state: Third line, usually status/context.startTimestamp: Start time shown as elapsed timer. Accepts:- unix milliseconds (
1738411200000) - date string (
2026-02-12T15:00:00Z) nullto disable timer
- unix milliseconds (
endTimestamp: End time shown as countdown. Same accepted formats asstartTimestamp.status: Online status. Valid values:online,idle,dnd,invisible.imageBig/largeImage: Large image key or URL.imageBigText/largeImageText: Hover text for large image.imageSmall/smallImage: Small image key or URL.imageSmallText/smallImageText: Hover text for small image.
How to make timestamps
Use https://www.unixtimestamp.com/ to get a unix timestamp in milliseconds, then multiply by 1000.
For example, if you get 1738411200 from the site, use 1738411200000 in your config.
- Current time (start now):
node -e "console.log(Date.now())" - Start now, end in 1 hour:
node -e "const now=Date.now(); console.log('start', now); console.log('end', now+60*60*1000)" - ISO date string (auto parsed by code):
2026-02-12T16:30:00Z
Set either field to null if you don't want timers.
How to set images (big/small)
-
For application assets:
- Open your Discord application.
- Go to Rich Presence -> Art Assets.
- Upload images.
- Use the uploaded asset key in
imageBig/imageSmall.
-
For URL images:
- Discord CDN URLs are used directly.
- External URLs are converted through Discord external assets when possible.
I'd Recommends to use external url via imgur or something
Missing token...: put token inconfig.jsonor setDISCORD_TOKEN.- Presence not updating: verify image keys/URLs and token validity.
- Timers look wrong: use unix milliseconds (not seconds).
- Never show real token to anyone.
- Keep
config.jsonprivate. - If a token was leaked, rotate/revoke it immediately.
