home / skills / lycfyi / community-agent-plugin / discord-sync

This skill automatically detects Discord tokens and permissions to route to the optimal sync connector, ensuring fast, reliable message retrieval.

npx playbooks add skill lycfyi/community-agent-plugin --skill discord-sync

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
4.5 KB
---
name: discord-sync
description: "Smart Discord sync - automatically detects tokens and permissions to choose the optimal sync method. Use when user asks to sync Discord messages."
---

# Discord Sync (Smart Router)

Automatically detects available tokens and bot permissions to route to the optimal sync connector.

## When to Use

- User asks to "sync Discord messages"
- User asks to "pull messages from Discord"
- User wants to "get Discord history"
- User wants to "update Discord data"
- User wants to "download Discord messages"
- User asks to "fetch messages from #channel"

## How It Works

This skill runs a preflight check before syncing:

1. **Token Detection** - Checks which tokens are configured in `.env`
2. **Token Validation** - Verifies tokens are valid by calling Discord API
3. **Permission Check** - For bot token, verifies server access and required permissions
4. **Smart Routing** - Recommends the optimal connector based on results

## Routing Logic

| Scenario | Connector Used | Reason |
|----------|----------------|--------|
| Syncing DMs | `discord-user-connector` | Bots cannot access DMs |
| Bot token valid + has permissions | `discord-bot-connector` | Faster, higher rate limits |
| Bot token valid but lacks permissions | `discord-user-connector` | Fallback |
| Only user token available | `discord-user-connector` | Only option |
| Only bot token available | `discord-bot-connector` | Only option (no DMs) |
| No valid tokens | Error | Configuration needed |

## How to Execute

### Step 1: Run Preflight Check

```bash
# Check for specific server
python ${CLAUDE_PLUGIN_ROOT}/tools/discord_preflight.py --server SERVER_ID

# Check for DM sync
python ${CLAUDE_PLUGIN_ROOT}/tools/discord_preflight.py --dms

# JSON output for programmatic use
python ${CLAUDE_PLUGIN_ROOT}/tools/discord_preflight.py --server SERVER_ID --json
```

### Step 2: Route Based on Result

The preflight check returns a recommendation. Execute the recommended skill:

**If recommendation is `discord-bot-connector:discord-sync`:**
```
Skill(skill: "discord-bot-connector:discord-sync")
```

**If recommendation is `discord-user-connector:discord-sync`:**
```
Skill(skill: "discord-user-connector:discord-sync")
```

## Example Preflight Output

```
==================================================
Discord Sync Preflight Check
==================================================

Token Status:
  User Token: valid
  Bot Token:  valid

Bot Permissions:
  Server: My Community Server
  Has Access: Yes
  View Channels: Yes
  Read History: Yes

Recommendation:
  Use: discord-bot-connector:discord-sync
  Reason: Bot has access to My Community Server with required permissions (faster sync)
```

## Preflight JSON Output

```json
{
  "user_token": {"configured": true, "valid": true, "error": null},
  "bot_token": {"configured": true, "valid": true, "error": null},
  "bot_permissions": {
    "server_id": "123456789",
    "server_name": "My Community Server",
    "has_access": true,
    "can_view_channels": true,
    "can_read_history": true,
    "error": null
  },
  "wants_dms": false,
  "recommendation": "discord-bot-connector:discord-sync",
  "reason": "Bot has access to My Community Server with required permissions (faster sync)"
}
```

## Smart Defaults

When user is vague, use these defaults:

| User Says | Action |
|-----------|--------|
| "sync discord" | Run preflight with default server from config |
| "sync my DMs" | Run preflight with `--dms` flag |
| "sync [server name]" | Find server ID, run preflight, then sync |

## Prerequisites

- `.env` file with at least one Discord token:
  - `DISCORD_USER_TOKEN` - For user token sync (servers + DMs)
  - `DISCORD_BOT_TOKEN` - For bot token sync (servers only, faster)
- `aiohttp` library installed for API calls

## Connector Comparison

| Feature | Bot Connector | User Connector |
|---------|---------------|----------------|
| Rate Limits | Higher (official API) | Lower |
| Server Messages | Yes | Yes |
| DM Access | No | Yes |
| Rich Profiles | No | Yes |
| ToS Compliant | Yes | Gray area |

## Troubleshooting

**Bot token valid but "lacks permissions":**
- Ensure bot has "Read Message History" permission in Discord
- Check if bot role is above restricted channels
- Try re-inviting bot with correct permissions

**User token invalid:**
- Token may have expired - get a new one
- Ensure token is copied correctly (no extra spaces)

**No tokens configured:**
- Create `.env` file in project root
- Add `DISCORD_USER_TOKEN=your_token` or `DISCORD_BOT_TOKEN=your_token`

Overview

This skill automatically detects configured Discord tokens and bot permissions, then chooses the optimal sync connector to pull message history. It performs a preflight check and returns a clear recommendation so the system uses the fastest, most-permissible method available. Use it whenever someone asks to sync or fetch Discord messages.

How this skill works

The skill inspects environment tokens, validates them against the Discord API, and checks bot permissions for the target server or DMs. Based on token validity and permission results it routes to either a bot-based connector (higher rate limits, servers only) or a user-based connector (servers + DMs). It can output human-readable or machine-friendly JSON recommendations.

When to use it

  • User asks to sync Discord messages, channels, or DMs
  • Pull or download channel history from a specific server
  • Fetch direct messages or personal message history
  • Automatically choose best connector based on configured tokens
  • When you need a preflight check before running a full sync

Best practices

  • Store tokens in a .env file and avoid committing them to source control
  • Prefer bot token for server syncs when bot has Read Message History permission
  • Use user token only for DMs or when bot lacks required permissions
  • Run preflight with --json for programmatic automation
  • Verify bot role and channel overrides if permissions report missing

Example use cases

  • Run preflight then sync a community server using the bot connector for faster throughput
  • Detect that only a user token exists and route to user connector to capture DMs
  • Automatically fallback to user connector when bot token lacks read-history permission
  • Integrate preflight JSON into CI to validate sync configuration before scheduled jobs
  • Quickly diagnose token or permission issues when a sync fails

FAQ

What happens if no valid tokens are found?

The preflight returns an error recommendation and explains which tokens are missing or invalid so you can update the .env configuration.

Can the bot connector access DMs?

No. Bot connectors cannot access DMs. The skill will recommend the user connector when DMs are requested.