| name | discord-skill |
| description | Discord REST API 서버/채널 관리 스킬. 채널 CRUD, 권한 관리, 메시지 전송, 웹훅 지원. "Discord", "디스코드", "채널 관리", "discord bot" 키워드로 활성화. |
| trigger-keywords | discord, 디스코드, discord bot, 디스코드 봇, 채널 관리, channel management, discord api, 서버 관리, guild, 길드, webhook, 웹훅 |
| allowed-tools | Read, Write, Edit, Bash, WebFetch |
| priority | medium |
| tags | discord, api, bot, channel, guild, webhook, messaging |
Discord Channel Management Skill
Overview
Discord REST API를 활용하여 서버(길드)와 채널을 관리하는 스킬입니다. Bot 토큰 기반 인증으로 채널 CRUD, 권한 관리, 메시지 전송, 웹훅 작업을 지원합니다.
Purpose
- 채널 관리: 텍스트/음성/카테고리 채널 생성, 수정, 삭제
- 권한 관리: 역할 및 사용자별 채널 권한 설정
- 메시지 작업: 메시지 전송, 조회, 삭제
- 웹훅 관리: 웹훅 생성 및 메시지 전송
- 서버 정보: 길드 정보 및 채널 목록 조회
When to Use
명시적 요청:
- "Discord 채널 만들어줘"
- "디스코드 서버에 메시지 보내줘"
- "채널 권한 설정해줘"
- "Discord 웹훅으로 알림 보내줘"
- "디스코드 채널 목록 보여줘"
- "채널 삭제해줘"
자동 활성화:
- "discord", "디스코드" 키워드 언급 시
- 채널/서버/길드 관리 요청 시
- 웹훅 설정 요청 시
Prerequisites
환경 변수
# 필수 - jelly-dotenv/.env에 설정
DISCORD_BOT_TOKEN= # Bot Token (Developer Portal에서 발급)
# 선택
DISCORD_APPLICATION_ID= # Application ID
DISCORD_GUILD_ID= # 기본 서버(길드) ID
DISCORD_DEFAULT_CHANNEL_ID= # 기본 채널 ID
Discord Bot 설정
- Discord Developer Portal에서 애플리케이션 생성
- Bot 섹션에서 봇 생성 및 토큰 복사
- OAuth2 > URL Generator에서 봇 초대 링크 생성
- Scopes:
bot,applications.commands - Bot Permissions:
Manage Channels,Send Messages,Manage Messages
- Scopes:
- 생성된 URL로 봇을 서버에 초대
API Reference
Base URL
https://discord.com/api/v10
Authentication
Authorization: Bot YOUR_BOT_TOKEN
Content-Type: application/json
Quick Start
채널 목록 조회
# 환경 변수 로드
source skills/jelly-dotenv/load-env.sh
# 길드의 채널 목록 조회
curl -s -X GET \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
"https://discord.com/api/v10/guilds/$DISCORD_GUILD_ID/channels" | jq
텍스트 채널 생성
curl -s -X POST \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "new-channel",
"type": 0,
"topic": "채널 설명"
}' \
"https://discord.com/api/v10/guilds/$DISCORD_GUILD_ID/channels" | jq
메시지 전송
curl -s -X POST \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"content": "Hello from Claude Code!"
}' \
"https://discord.com/api/v10/channels/$CHANNEL_ID/messages" | jq
채널 삭제
curl -s -X DELETE \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
"https://discord.com/api/v10/channels/$CHANNEL_ID" | jq
Channel Types
| Type | 값 | 설명 |
|---|---|---|
| GUILD_TEXT | 0 | 텍스트 채널 |
| DM | 1 | DM 채널 |
| GUILD_VOICE | 2 | 음성 채널 |
| GROUP_DM | 3 | 그룹 DM |
| GUILD_CATEGORY | 4 | 카테고리 |
| GUILD_ANNOUNCEMENT | 5 | 공지 채널 |
| ANNOUNCEMENT_THREAD | 10 | 공지 스레드 |
| PUBLIC_THREAD | 11 | 공개 스레드 |
| PRIVATE_THREAD | 12 | 비공개 스레드 |
| GUILD_STAGE_VOICE | 13 | 스테이지 채널 |
| GUILD_DIRECTORY | 14 | 디렉토리 |
| GUILD_FORUM | 15 | 포럼 채널 |
| GUILD_MEDIA | 16 | 미디어 채널 |
Permissions Bitfield
주요 권한
| 권한 | Hex | Decimal | 설명 |
|---|---|---|---|
| VIEW_CHANNEL | 0x400 | 1024 | 채널 보기 |
| MANAGE_CHANNELS | 0x10 | 16 | 채널 관리 |
| SEND_MESSAGES | 0x800 | 2048 | 메시지 전송 |
| MANAGE_MESSAGES | 0x2000 | 8192 | 메시지 관리 |
| MANAGE_ROLES | 0x10000000 | 268435456 | 역할/권한 관리 |
| ADMINISTRATOR | 0x8 | 8 | 관리자 (모든 권한) |
권한 계산
// 여러 권한 조합
const permissions = VIEW_CHANNEL | SEND_MESSAGES | MANAGE_MESSAGES;
// 1024 | 2048 | 8192 = 11264
Core Features
1. 채널 CRUD
# 채널 정보 조회
curl -s -X GET \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
"https://discord.com/api/v10/channels/$CHANNEL_ID" | jq
# 채널 수정
curl -s -X PATCH \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "updated-name",
"topic": "새로운 설명"
}' \
"https://discord.com/api/v10/channels/$CHANNEL_ID" | jq
# 음성 채널 생성
curl -s -X POST \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Voice Room",
"type": 2,
"user_limit": 10
}' \
"https://discord.com/api/v10/guilds/$DISCORD_GUILD_ID/channels" | jq
# 카테고리 생성
curl -s -X POST \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "My Category",
"type": 4
}' \
"https://discord.com/api/v10/guilds/$DISCORD_GUILD_ID/channels" | jq
2. 권한 관리
# 역할에 채널 권한 설정
curl -s -X PUT \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": 0,
"allow": "3072",
"deny": "0"
}' \
"https://discord.com/api/v10/channels/$CHANNEL_ID/permissions/$ROLE_ID"
# type: 0 = 역할, 1 = 멤버
# allow/deny: 권한 비트필드 문자열
3. 메시지 작업
# 메시지 목록 조회 (최근 50개)
curl -s -X GET \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
"https://discord.com/api/v10/channels/$CHANNEL_ID/messages?limit=50" | jq
# Embed 메시지 전송
curl -s -X POST \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"embeds": [{
"title": "알림",
"description": "중요한 공지사항입니다.",
"color": 5814783,
"fields": [
{"name": "항목 1", "value": "내용 1", "inline": true},
{"name": "항목 2", "value": "내용 2", "inline": true}
]
}]
}' \
"https://discord.com/api/v10/channels/$CHANNEL_ID/messages" | jq
# 메시지 삭제
curl -s -X DELETE \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
"https://discord.com/api/v10/channels/$CHANNEL_ID/messages/$MESSAGE_ID"
# 메시지 일괄 삭제 (2주 이내, 2-100개)
curl -s -X POST \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"messages": ["MESSAGE_ID_1", "MESSAGE_ID_2"]
}' \
"https://discord.com/api/v10/channels/$CHANNEL_ID/messages/bulk-delete"
4. 웹훅 관리
# 웹훅 생성
curl -s -X POST \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "My Webhook"
}' \
"https://discord.com/api/v10/channels/$CHANNEL_ID/webhooks" | jq
# 웹훅으로 메시지 전송 (토큰 불필요)
curl -s -X POST \
-H "Content-Type: application/json" \
-d '{
"content": "Webhook message!",
"username": "Custom Bot Name"
}' \
"https://discord.com/api/v10/webhooks/$WEBHOOK_ID/$WEBHOOK_TOKEN"
5. 스레드 관리
# 메시지에서 스레드 생성
curl -s -X POST \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Discussion Thread",
"auto_archive_duration": 1440
}' \
"https://discord.com/api/v10/channels/$CHANNEL_ID/messages/$MESSAGE_ID/threads" | jq
# 스레드 없이 생성 (포럼/미디어 채널용)
curl -s -X POST \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "New Thread",
"type": 11,
"auto_archive_duration": 60
}' \
"https://discord.com/api/v10/channels/$CHANNEL_ID/threads" | jq
Rate Limits
| 범위 | 제한 |
|---|---|
| 전역 | 50 req/sec |
| 메시지 전송 | 5 msg/5sec/channel |
| 메시지 삭제 | 별도 높은 제한 |
| 채널 수정 | 2 req/10min/channel |
Rate Limit 헤더
X-RateLimit-Limit: 5
X-RateLimit-Remaining: 4
X-RateLimit-Reset: 1470173023.123
X-RateLimit-Reset-After: 1.456
X-RateLimit-Bucket: abc123
Error Handling
일반적인 에러 코드
| 코드 | 의미 | 해결 방법 |
|---|---|---|
| 401 | Unauthorized | 토큰 확인 |
| 403 | Forbidden | 봇 권한 확인 |
| 404 | Not Found | ID 확인 |
| 429 | Rate Limited | 재시도 대기 |
| 50001 | Missing Access | 채널 접근 권한 없음 |
| 50013 | Missing Permissions | 필요 권한 부족 |
에러 응답 처리
response=$(curl -s -w "\n%{http_code}" ...)
http_code=$(echo "$response" | tail -1)
body=$(echo "$response" | sed '$d')
if [ "$http_code" = "429" ]; then
retry_after=$(echo "$body" | jq -r '.retry_after')
sleep "$retry_after"
fi
Security Checklist
- 봇 토큰을 코드에 하드코딩하지 않기
- 환경 변수 또는 시크릿 매니저 사용
- 필요한 최소 권한만 부여
- Rate Limit 준수
- 민감한 채널에 대한 접근 제한
Reference Documentation
- references/api-endpoints.md - API 엔드포인트 전체 목록
- references/permissions.md - 권한 비트필드 상세
- references/rate-limits.md - Rate Limit 가이드
External Resources
- Discord Developer Portal: https://discord.com/developers/docs
- Discord.js Guide: https://discordjs.guide/
- Permission Calculator: https://discordapi.com/permissions.html
- Discord API Types: https://discord-api-types.dev/
Workflow
Step 1: 환경 확인
# 환경 변수 로드
source skills/jelly-dotenv/load-env.sh
# 봇 연결 테스트
curl -s -H "Authorization: Bot $DISCORD_BOT_TOKEN" \
"https://discord.com/api/v10/users/@me" | jq .username
Step 2: 작업 유형별 분기
채널 관리:
- 길드 채널 목록 조회
- 채널 생성/수정/삭제 실행
- 결과 확인
메시지 전송:
- 대상 채널 ID 확인
- 메시지 본문 구성 (텍스트/Embed)
- POST 요청 실행
웹훅 작업:
- 채널에 웹훅 생성
- 웹훅 URL로 메시지 전송
Examples
예시 1: 채널 목록 조회
사용자: "디스코드 서버의 채널 목록 보여줘"
Claude:
curl -s -X GET \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
"https://discord.com/api/v10/guilds/$DISCORD_GUILD_ID/channels" | jq
→ 채널 목록:
| 이름 | 타입 | ID |
|------|------|-----|
| general | 텍스트 | 123456789 |
| voice-chat | 음성 | 987654321 |
예시 2: 텍스트 채널 생성
사용자: "announcements라는 공지 채널 만들어줘"
Claude:
curl -s -X POST \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "announcements", "type": 0, "topic": "공지사항"}' \
"https://discord.com/api/v10/guilds/$DISCORD_GUILD_ID/channels"
→ 채널 "announcements" 생성 완료 (ID: 111222333)
예시 3: Embed 메시지 전송
사용자: "알림 채널에 배포 완료 메시지 보내줘"
Claude:
curl -s -X POST \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"embeds": [{
"title": "배포 완료",
"description": "v1.2.3 배포가 완료되었습니다.",
"color": 5763719
}]
}' \
"https://discord.com/api/v10/channels/$CHANNEL_ID/messages"
→ 메시지 전송 완료
Best Practices
DO:
- 봇 토큰은 환경 변수로 관리
- Rate limit 준수 (429 응답 시 대기)
- 필요한 최소 권한만 봇에 부여
- 채널 작업 전 권한 확인
- 대량 삭제 시 bulk-delete API 사용
DON'T:
- 토큰을 코드에 하드코딩하지 않기
- Rate limit 무시하고 연속 요청하지 않기
- 모든 권한을 가진 봇 사용하지 않기
- 2주 이상 된 메시지에 bulk-delete 시도하지 않기
- 사용자 DM에 무분별하게 메시지 보내지 않기
Troubleshooting
401 Unauthorized
# 토큰 확인
echo $DISCORD_BOT_TOKEN | head -c 20
# 토큰 형식: Bot xxxxxxxxxxx
403 Forbidden
- 봇이 해당 채널/서버에 접근 권한이 있는지 확인
- 필요한 권한(Manage Channels 등)이 부여되었는지 확인
429 Rate Limited
# retry_after 값만큼 대기 후 재시도
sleep $retry_after
50001 Missing Access
- 봇이 서버에 초대되었는지 확인
/invite @bot명령으로 채널에 봇 추가
Version: 1.0.0 Last Updated: December 2025