⚒️ Get it cause it sounds like "Util" but it's "Yoodle" isn't that funny?
- All of them.
- (Currently none)
Just a little something I made, you know, for fun.
Yoodle runs as a Cloudflare Worker. Discord's Gateway connection is a persistent
outbound WebSocket held open by a Durable Object (GatewayDurableObject), which
also handles slash commands and buttons arriving over that same connection — there's
no separate HTTP interactions endpoint. A cron trigger pings the object every 5
minutes so it reconnects if Cloudflare ever evicts it. This runs on the Workers
Free plan (Durable Objects with the SQLite storage backend, which this project
uses, don't require Workers Paid).
npm install- In the Discord Developer Portal, enable the Message Content Intent under Bot settings (required — several features read plain message content).
- Set secrets:
npx wrangler secret put DISCORD_TOKEN npx wrangler secret put DISCORD_APPLICATION_ID - Configure
wrangler.jsonc'svars:GUILD_ID— set to register slash commands to a single guild instantly (empty string registers them globally, which can take up to an hour to propagate)LINK_REPLACER_SITES— JSON object mapping hostnames to their replacement, e.g.{"x.com":"fxtwitter.com"}OOMFIES_ROLE_ID/OOMFIES_RESPONSES— role id and JSON array of GIF URLs for the oomfies auto-responder
- For local dev, copy
.dev.vars.exampleto.dev.varsand fill in the secrets, thennpm run dev. - Deploy with
npm run deploy.
Slash commands are (re)registered automatically every time the bot reconnects to the Gateway (on the READY event), so there's no separate registration script to run.

