44 lines
1.8 KiB
Markdown
44 lines
1.8 KiB
Markdown
# 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
|
|
1. https://discord.com/developers/applications → **New Application** → **Bot**.
|
|
2. **Reset Token**, copy it (this is `DISCORD_BOT_TOKEN`).
|
|
3. Under **Privileged Gateway Intents**, enable **PRESENCE INTENT** and **SERVER MEMBERS INTENT**.
|
|
4. 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.
|
|
5. Optionally set `TRACKED_GUILD_IDS` in `wrangler.jsonc` (comma-separated) to limit monitoring to specific servers; empty = every guild the bots can see.
|
|
|
|
### 2. Commands
|
|
```bash
|
|
# 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]"
|
|
|
|
# Local test
|
|
pnpm dev
|
|
|
|
# Production
|
|
pnpm deploy
|
|
``` |