|
|
||
|---|---|---|
| scripts | ||
| src | ||
| .dev.vars.example | ||
| .gitignore | ||
| README.md | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| tsconfig.json | ||
| wrangler.jsonc | ||
README.md
dough-restful
A combined Discord presence (Lanyard-style) and profile/badges (dstn.to-style) API on a single Cloudflare Worker + Durable Object, powered by one Discord bot. It exposes a REST endpoint and a Lanyard-compatible WebSocket, returning a single unified JSON shape.
Thanks
This code wasn't just me. It took a good chunk of my own brain plus a lot of help from Dustin (@dstn.to), who was really generous explaining how he handles the tricky parts: rate limits, caching, and getting Discord to actually trust your requests. Thanks Dustin! And credit to Phineas for Lanyard, which inspired the presence half of this.
Setup
1. Settings
- https://discord.com/developers/applications → New Application → Bot.
- Reset Token, copy it (this is
DISCORD_BOT_TOKEN). - Under Privileged Gateway Intents, enable PRESENCE INTENT and SERVER MEMBERS INTENT.
- Invite the bot to a server that contains the people you want to track (OAuth2 URL generator → scope
bot). Presence is only visible for users sharing a server with the bot — same model as Lanyard. - Optionally set
TRACKED_GUILD_IDSinwrangler.jsonc(comma-separated) to limit monitoring to specific servers; empty = every guild the bots can see.
2. Commands
# REQUIRED
pnpm install
# KV namespace for profile cache — paste the printed id into wrangler.jsonc
pnpx wrangler kv namespace create PROFILE_CACHE
# Secrets
pnpx wrangler secret put DISCORD_BOT_TOKEN
# Optional, ToS risk — only if you want the rich badges:
pnpx wrangler secret put DISCORD_USER_TOKEN
# Optional second userbot
pnpx wrangler secret put DISCORD_USER_TOKEN2
# If you need to update the X-Super-Properties to latest version
pnpm decode "X-Super-Properties: [BASE64 HERE]"pnpm
# Local test
pnpm dev
# Production
pnpm deploy