aethex-forge/docs/DISCORD-ACTIVITY-DEPLOYMENT.md
2025-11-08 21:01:53 +00:00

222 lines
6.4 KiB
Markdown

# Discord Activity Deployment Guide
## For Web-Based Development (No Terminal Access)
If you can't run `npm` in your development environment, follow this guide to deploy Discord Activity and register commands via the web.
---
## Step 1: Set Environment Variables
Add these to your deployment platform (Vercel, PebbleHost):
### Vercel (Frontend)
```
VITE_DISCORD_CLIENT_ID=578971245454950421
```
### PebbleHost (Discord Bot)
```
DISCORD_BOT_TOKEN=<your-token>
DISCORD_CLIENT_ID=578971245454950421
DISCORD_PUBLIC_KEY=<your-public-key>
SUPABASE_URL=https://kmdeisowhtsalsekkzqd.supabase.co
SUPABASE_SERVICE_ROLE=<your-service-role-key>
BOT_PORT=3000
```
### Vercel (Backend - for command registration)
```
DISCORD_BOT_TOKEN=<your-token>
DISCORD_CLIENT_ID=578971245454950421
DISCORD_ADMIN_REGISTER_TOKEN=<create-a-random-secure-token>
```
---
## Step 2: Enable Discord Activities
1. Go to [Discord Developer Portal](https://discord.com/developers/applications)
2. Select your application (AeThex)
3. Go to **Settings****General Information**
4. Scroll down to **Activities**
5. **Enable Activities** (toggle ON)
6. Set **Activity URL**: `https://aethex.dev/activity` or `https://aethex.dev/`
7. Save changes
When you enable Activities, Discord automatically creates an "Entry Point" command. **This is expected and OK.**
---
## Step 3: Register Discord Commands via Web API
Instead of running `npm run register-commands`, use this web endpoint:
### Option A: Using curl (if you have PebbleHost console access)
```bash
curl -X POST https://aethex.dev/api/discord/admin-register-commands \
-H "Authorization: Bearer YOUR_DISCORD_ADMIN_REGISTER_TOKEN" \
-H "Content-Type: application/json"
```
Replace `YOUR_DISCORD_ADMIN_REGISTER_TOKEN` with the value you set in environment variables.
### Option B: Call from Admin Panel (Future)
You can add a button to `/admin` panel that triggers this endpoint:
```typescript
async function registerCommands() {
const response = await fetch("/api/discord/admin-register-commands", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DISCORD_ADMIN_REGISTER_TOKEN}`,
"Content-Type": "application/json",
},
});
const data = await response.json();
console.log("Registration result:", data);
}
```
### Option C: Using Postman
1. Create a new POST request to: `https://aethex.dev/api/discord/admin-register-commands`
2. Go to **Headers** tab
3. Add:
- Key: `Authorization`
- Value: `Bearer YOUR_DISCORD_ADMIN_REGISTER_TOKEN`
4. Click **Send**
---
## Step 4: Deploy Bot to PebbleHost
1. Create a new Node.js app on PebbleHost
2. Point it to `code/discord-bot/` directory
3. Set build command: `npm install`
4. Set start command: `npm start`
5. Add environment variables (from Step 1)
6. Deploy
**The bot will start and listen for commands.**
Command registration happens via the API endpoint (Step 3), not on bot startup.
---
## Step 5: Deploy Frontend to Vercel
1. Connect your GitHub repo to Vercel (or push code)
2. Add environment variables (from Step 1)
3. Deploy
4. Frontend will auto-build and serve `/activity` route
---
## Step 6: Test Discord Activity
1. Open Discord
2. Go to a server where your bot is installed
3. Click your bot's profile
4. Click **Launch** (or the Activity button if visible)
5. Your Activity should load in an iframe
6. You should be instantly authenticated (no login needed)
---
## Troubleshooting
### Error 50240: "Cannot remove Entry Point command"
**This happens if:**
- You enable Activities, then the bot tries to register commands via bulk update
- The bot is trying to overwrite the auto-generated Entry Point command
**Solution:**
- ✅ Your bot code has been fixed (bot no longer registers on startup)
- Just call the `/api/discord/admin-register-commands` endpoint (Step 3)
- The endpoint handles Error 50240 gracefully
### Activity not loading in Discord
**Check:**
1. Activities enabled in Discord Developer Portal ✅
2. Activity URL is set to `https://aethex.dev/activity` (not an IP) ✅
3. Frontend is deployed to Vercel ✅
4. Environment variable `VITE_DISCORD_CLIENT_ID` is set ✅
5. Check browser console for errors (F12)
### "Unauthorized" error when calling register endpoint
**Check:**
1. `DISCORD_ADMIN_REGISTER_TOKEN` is set in Vercel environment variables
2. You're passing the correct token in the `Authorization: Bearer` header
3. The token matches exactly (no extra spaces)
### Bot not responding to commands
**Check:**
1. Bot is online on PebbleHost (check logs)
2. Commands are registered (call `/api/discord/admin-register-commands` and check response)
3. Response shows commands registered successfully
4. Try the commands in Discord (`/verify`, `/profile`, etc.)
---
## Quick Reference
| What | How |
| ----------------- | -------------------------------------------------------------- |
| Enable Activities | Discord Developer Portal → Settings → Activities → Enable |
| Register Commands | POST to `/api/discord/admin-register-commands` with auth token |
| Deploy Bot | Push to PebbleHost, bot starts with `npm start` |
| Deploy Frontend | Push to GitHub, Vercel auto-deploys |
| Test Activity | Open Discord, click Activity button, should load |
---
## Environment Variables Checklist
- [ ] `DISCORD_BOT_TOKEN` - Set on PebbleHost
- [ ] `DISCORD_CLIENT_ID` - Set on PebbleHost & Vercel
- [ ] `DISCORD_PUBLIC_KEY` - Set on PebbleHost
- [ ] `SUPABASE_URL` - Set on PebbleHost
- [ ] `SUPABASE_SERVICE_ROLE` - Set on PebbleHost
- [ ] `VITE_DISCORD_CLIENT_ID` - Set on Vercel (frontend)
- [ ] `DISCORD_ADMIN_REGISTER_TOKEN` - Set on Vercel (backend)
---
## What Happens When You Register Commands
The endpoint registers these 5 commands:
1. **`/verify`** - Generate linking code (15-min expiry)
2. **`/set-realm`** - Choose primary arm (labs, gameforge, corp, foundation, devlink)
3. **`/profile`** - View linked AeThex profile
4. **`/unlink`** - Disconnect Discord account
5. **`/verify-role`** - Check assigned Discord roles
Plus the auto-generated **Entry Point** command (managed by Discord for Activities).
---
## Summary
✅ No need to run `npm` in the web
✅ Everything can be deployed via web interfaces
✅ Commands registered via API endpoint
✅ Error 50240 handled automatically
✅ Activity loads instantly in Discord
**You're all set!** 🚀