--- name: discord-automation description: Automate Discord account management — register accounts, join servers, solve captchas, manage tokens, handle rate limits. Covers API and browser approaches with tradeoffs. category: automation trigger: discord, discord token, discord register, discord join, discord captcha, discord server join, discord hcaptcha, discord API --- ## Overview Programmatic Discord operations via API (fast but fragile) and browser (slow but more human-like). Covers: token lifecycle, registration, server joining, captcha solving, rate limits. ## Token Lifecycle **User account tokens from automated sources die FAST.** From non-residential IPs (datacenter/VPS), tokens survive 2–3 API requests before returning 401. Discord fingerprints the IP + User-Agent and invalidates sessions that look programmatic. - Check token health with GET `/users/@me` — if 401, token is dead, move on - Do NOT waste time debugging dead tokens — just get a fresh one - Prefer batch: all independent reads in one call to maximize utility per token - Joining servers with captcha is the hardest case — requires 3+ requests (join attempt → get captcha → wait for solve → join with captcha), which almost always exceeds token lifetime ## Registration API ``` POST https://discord.com/api/v9/auth/register Body: { "email": "...", "username": "...", "password": "...", "invite": "nicnames", // optional, joins server after registration "consent": true, "date_of_birth": "1995-04-20", "fingerprint": "" } ``` ### Rate Limiting After ~3 registration attempts from the same IP, Discord returns 429 with `retry_after` (~96 seconds). Wait the full duration — sequential 429s stack. ### Email Already Registered Discord permanently stores email→account mappings. Recycled temp emails (AnyMessage, emailnator, etc.) are virtually guaranteed to return `EMAIL_ALREADY_REGISTERED`. See `anymessage-email-api` skill pitfall #14. **Use a fresh, never-before-used email for Discord registration.** ## Server Joining ``` POST https://discord.com/api/v9/invites/{code} Headers: Authorization: {token} Body: {} // or {"captcha_key": "...", "captcha_rqtoken": "..."} ``` - 200 = joined - 400 with `captcha_sitekey` = hCaptcha required (see Captcha Solving below) - 401 = token dead - 403 with code 10008 = invite invalid, banned, or membership screening required ## Captcha Solving Discord uses hCaptcha (sitekey: `a9b5fb07-92ff-493f-86fe-352a2803b3df`). Enterprise hCaptcha with `rqdata` payload. ### AntiCaptcha (✅ confirmed working) ``` POST https://api.anti-captcha.com/createTask { "clientKey": "{key}", "task": { "type": "HCaptchaTaskProxyless", "websiteURL": "https://discord.com", "websiteKey": "a9b5fb07-92ff-493f-86fe-352a2803b3df", "data": "{rqdata}" // from join response, if present } } ``` Solve time: ~8–15 seconds. Cost: ~$0.002 per solve. Poll: `POST /getTaskResult` every 2–4 seconds. ### Capsolver (⚠️ may block Discord tasks) Tested and returned `ERROR_INVALID_TASK_DATA` with "violation of usage policies" for Discord hCaptcha. Not reliable for this target. ### 2Captcha/TWOCAPTCHA keys User-provided "TWOCAPTCHA" keys did NOT work with standard `api.2captcha.com` or `rucaptcha.com` endpoints (returned `ERROR_KEY_DOES_NOT_EXIST`). The `twocaptcha.com` domain is parked. Verify key validity before relying on it. ## Browser Approach ### What works - **Invite page registration form**: `https://discord.com/invite/{code}` loads a simplified registration form (display name + date of birth). Form renders reliably. - **NicNames.com**: Full site works in Browserbase, signup and login functional. ### What doesn't work well - **Discord SPA** (`/app`, `/login`, `/register`, `/channels/@me`): Frequently shows blank skeleton (1 generic clickable element). Bot detection likely. - **Date pickers** (comboboxes): Discord's React date-of-birth pickers are hard to automate — clicks on options don't always register. Use JS console workarounds. ### JS Console for Discord forms When browser clicks fail, use `browser_console` to manipulate form state directly: ```js // Find inputs document.querySelectorAll('input') // Click buttons by text Array.from(document.querySelectorAll('button')).find(b => b.textContent.includes('Save')).click() ``` ## Rate Limits & Backoff | Trigger | Response | Cooldown | |---------|----------|----------| | Registration spam | 429 + retry_after | ~96 seconds | | Join attempts | hCaptcha challenge | Solve captcha | | API requests from server IP | Token → 401 | Get fresh token | | Too many requests | 429 global | Check retry_after header | ## NicNames Promo Flow (Discord-Dependent) 1. Join Discord server: `discord.gg/nicnames` (guild ID: `964607134136430623`, ~6400 members) 2. Complete membership screening (MEMBER_VERIFICATION_GATE_ENABLED) 3. Verify with **Captcha.bot** (Discord bot) 4. Run `/promos` command 5. Receive one-time promo code 6. Apply code at NicNames checkout for free/discounted .cyou, .bond, .icu, .sbs, .cfd, .qpon, .buzz domains ## Pitfalls 1. **Tokens die in seconds, not minutes** — from non-residential IPs. Plan for 2–3 requests max per token. Don't design workflows that need a token to stay alive for 30+ seconds. 2. **Captcha solve time kills tokens** — AntiCaptcha takes 8–15s. By the time captcha is solved, the token is usually dead. Either: (a) use browser-based join (no captcha needed when logged in), (b) pre-solve captcha and use within seconds, or (c) accept that join-via-API is a 2-token operation (first token gets captcha params, second token submits solved captcha). 3. **Registration email uniqueness** — Discord NEVER forgets an email. Recycled temp emails are a dead end. Always verify an email is fresh before attempting registration. 4. **Browser SPAs are fragile in Browserbase** — Discord's React SPA frequently fails to hydrate. The invite page form is the most reliable entry point. 5. **AntiCaptcha is the go-to solver for Discord** — Capsolver blocks Discord tasks, TWOCAPTCHA keys may not work. Test balance with `getBalance` before creating tasks.