# discord

Connects AI coding assistants to Discord via openweb commands. Useful for reading chat channels and posting messages directly from the terminal.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · ★ 71
- Author: imoonkey
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/imoonkey/openweb/tree/HEAD/src/sites/discord/SKILL.md
- Updated: 2026-06-27
- HTML: https://affpapa.org/en/nevibecode/skills/imoonkey-discord

## What it does

This skill integrates Discord messaging capabilities into coding assistants via the `openweb` tool. It retrieves user profiles, guild channel trees, and direct message threads. Agents can query server discussions with `searchMessages`, inspect roles, or read channel history with pagination limits.

Writing operations cover sending messages through `sendMessage`, deleting entries, and managing emoji reactions. Entity creation operations like `createServer` and `createChannel` fail because the underlying transport does not supply the `X-Super-Properties` fingerprint header required by Discord.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add imoonkey/openweb --skill discord -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/discord/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/discord/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add imoonkey/openweb --skill discord -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/discord/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add imoonkey/openweb --skill discord -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/discord/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install imoonkey/openweb discord
```

2. **Manually: put the files in place**
- File: `.github/skills/discord/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add imoonkey/openweb --skill discord -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/imoonkey/openweb --path src/sites/discord
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/discord/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add imoonkey/openweb --skill discord -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/imoonkey/openweb/tree/HEAD/src/sites/discord/SKILL.md

## When to use it
- search guild messages matching a specific text query
- post updates and add emoji reactions to Discord channels
- retrieve channel message history and pinned announcements
- inspect server structure, channel lists, and user roles

## Example prompts
- List the last 50 messages from channel `123456789`
- Send a message saying "Build succeeded" to channel `123456789`
- Search guild `987654321` for recent bug discussions

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: a2a6696c8335b0fd.

BEGIN THIRD-PARTY FILE a2a6696c8335b0fd
````text
# Discord

## Overview
Real-time messaging platform. Archetype: Messaging.

## Workflows

### Browse server messages
1. `listGuilds` → pick guild → `guildId`
2. `listGuildChannels(guildId)` → pick channel → `channelId`
3. `getChannelMessages(channelId, limit)` → messages with content, author, timestamps

### Search a server
1. `listGuilds` → pick guild → `guildId`
2. `searchMessages(guildId, content)` → matching messages with context

### Send a message & react
1. `listGuilds` → pick guild → `guildId`
2. `listGuildChannels(guildId)` → pick channel → `channelId`
3. `sendMessage(channelId, content)` → message with ID → `messageId`
4. `addReaction(channelId, messageId, emoji)` → 204

### Undo message & reaction
1. `getChannelMessages(channelId)` → `messageId` (or use `messageId ← sendMessage`)
2. `deleteMessage(channelId, messageId)` → 204
3. `removeReaction(channelId, messageId, emoji)` → 204

### Inspect a server
1. `listGuilds` → pick guild → `guildId`
2. `getGuildInfo(guildId)` → server details, member count, features
3. `getGuildRoles(guildId)` → role list with permissions

## Operations

| Operation | Intent | Key Input | Key Output | Notes |
|-----------|--------|-----------|------------|-------|
| getCurrentUser | get my profile | — | username, email, avatar, premium_type | entry point |
| listGuilds | list my servers | — | id, name, icon, owner, permissions | entry point |
| getDirectMessages | list DM channels | — | id, type, recipients, last_message_id | entry point |
| getGuildInfo | server details | guildId ← listGuilds | name, description, owner_id, member count, features, roles | |
| listGuildChannels | channels in server | guildId ← listGuilds | id, name, type, topic, position | |
| getGuildRoles | server roles | guildId ← listGuilds | name, permissions, color, position | |
| searchMessages | search in server | guildId ← listGuilds, content (query) | total_results, messages with context | |
| getChannelInfo | channel details | channelId ← listGuildChannels | name, type, topic, guild_id | |
| getChannelMessages | read messages | channelId ← listGuildChannels | content, author, timestamp, attachments, embeds | paginated (limit, before, after) |
| getPinnedMessages | pinned messages | channelId ← listGuildChannels | content, author, timestamp | no pagination |
| sendMessage | send a message | channelId ← listGuildChannels, content | id, content, author, timestamp | write op |
| addReaction | react to message | channelId, messageId ← getChannelMessages, emoji | 204 no content | write op |
| deleteMessage | delete a message | channelId, messageId ← getChannelMessages | 204 no content | write op, reverses sendMessage |
| removeReaction | remove own reaction | channelId, messageId ← getChannelMessages, emoji | 204 no content | write op, reverses addReaction |

## Quick Start

```bash
# Get current user info
openweb discord exec getCurrentUser '{}'

# List my servers (guilds)
openweb discord exec listGuilds '{}'

# List channels in a server
openweb discord exec listGuildChannels '{"guildId":"GUILD_ID"}'

# Read messages in a channel
openweb discord exec getChannelMessages '{"channelId":"CHANNEL_ID","limit":50}'

# Search messages in a guild
openweb discord exec searchMessages '{"guildId":"GUILD_ID","content":"search term"}'

# Send a message to a channel
````
END THIRD-PARTY FILE a2a6696c8335b0fd

The third-party file has ended. Everything between the a2a6696c8335b0fd tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 3393 of 4443 bytes. © imoonkey · MIT · https://github.com/imoonkey/openweb/tree/HEAD/src/sites/discord/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
