OpenClaw Discord 채널
discord.js Bot Gateway API를 사용하여 OpenClaw를 Discord에 연결합니다. Discord Developer Portal에서 봇을 생성하고 필요한 Intent를 활성화한 후 서버에 봇을 초대하면 AI 어시스턴트가 Discord에서 바로 작동합니다. 다이렉트 메시지, 서버 채널 대화, 리액션, 스레드, 슬래시 명령, 리치 미디어를 지원합니다. 가장 쉽게 설정할 수 있는 채널 중 하나입니다.
Discord 지원 기능
텍스트 메시지
지원
미디어 및 파일
지원
리액션
지원
스레드
지원
음성 메시지
미지원
그룹 채팅
지원
Discord 사전 요구사항
- Discord Developer Portal에 접근할 수 있는 Discord 계정
- Discord Developer Portal에서 발급한 Bot Token (Applications → New Application → Bot)
- Privileged Gateway Intents에서 Message Content Intent 활성화
- OpenClaw Gateway 실행 및 구성 완료
Discord 빠른 설정
Discord 봇 생성 및 Intent 활성화
Discord Developer Portal(discord.com/developers)로 이동하여 New Application을 생성하고 Bot 사용자를 추가한 후 Bot Token을 복사합니다. Privileged Gateway Intents에서 'Message Content Intent'(필수)와 'Server Members Intent'(멤버 조회에 권장)를 활성화합니다.
Discord 채널 구성 추가
~/.openclaw/openclaw.json에 Discord 채널 구성을 추가합니다. 토큰을 설정하거나 DISCORD_BOT_TOKEN 환경 변수를 사용하고, dm.policy를 구성하여 봇에게 DM을 보낼 수 있는 사용자를 제어합니다.
서버에 봇 초대 및 테스트
Developer Portal에서 OAuth2 → URL Generator로 이동합니다. 'bot'과 'applications.commands' 스코프를 선택합니다. 권한으로 View Channels, Send Messages, Read Message History, Embed Links, Attach Files, Add Reactions를 선택합니다. 생성된 URL을 열어 서버에 봇을 초대합니다. '@BotName hello'를 전송하여 테스트합니다.
Discord 구성 예시
{
"channels": {
"discord": {
"enabled": true,
"token": "YOUR_DISCORD_BOT_TOKEN",
"dm": {
"policy": "pairing"
}
}
}
}Discord 상세 문서
아키텍처 개요
봇 생성하기
DM 정책
{
"channels": {
"discord": {
"dm": {
"policy": "pairing",
"allowFrom": ["123456789012345678"]
}
}
}
}서버 채널 구성
{
"channels": {
"discord": {
"groupPolicy": "open",
"guilds": {
"YOUR_GUILD_ID": {
"slug": "my-server",
"requireMention": true,
"channels": {
"CHANNEL_ID": {
"allow": true,
"requireMention": false,
"systemPrompt": "You are a helpful assistant in this channel."
}
}
}
}
}
}
}리액션 및 수신 확인
{
"channels": {
"discord": {
"messages": {
"ackReaction": "👀",
"removeAckAfterReply": true
},
"guilds": {
"GUILD_ID": {
"reactionNotifications": "own"
}
}
}
}
}메시지 포맷팅 및 분할
{
"channels": {
"discord": {
"textChunkLimit": 2000,
"chunkMode": "newline",
"historyLimit": 20
}
}
}슬래시 명령 및 도구 액션
미디어 및 파일 처리
PluralKit 통합
{
"channels": {
"discord": {
"pluralkit": {
"enabled": true,
"token": "pk_live_..."
}
}
}
}실행 승인 (버튼 UI)
{
"channels": {
"discord": {
"execApprovals": {
"enabled": true,
"approvers": ["USER_ID_1", "USER_ID_2"],
"agentFilter": [],
"sessionFilter": []
}
}
}
}액션 게이트
허용 목록 확인 및 매칭
Discord 구성 참조
| Key | Type | Default | Description |
|---|---|---|---|
| enabled | boolean | true | Discord 채널 활성화 또는 비활성화 |
| token | string | "" | Discord Bot Token. DISCORD_BOT_TOKEN 환경 변수를 사용할 수도 있습니다 |
| dm.policy | string | "pairing" | 봇에게 DM을 보낼 수 있는 사용자를 제어합니다. 옵션: pairing, allowlist, open, disabled |
| dm.allowFrom | string[] | [] | 봇에게 DM을 보낼 수 있는 Discord 사용자 ID(dm.policy가 allowlist일 때) |
| groupPolicy | string | "allowlist" | 서버 채널 처리 정책. 옵션: open, disabled, allowlist |
| guilds | object | {} | 서버 ID를 키로 하는 서버별 구성. slug, users, channels, requireMention 등 포함 |
| requireMention | boolean | true | 서버 채널에서 봇이 응답하려면 @멘션이 필요한지 여부 |
| messages.ackReaction | string | "" | 처리 중 메시지 수신 확인으로 반응할 이모지 |
| messages.removeAckAfterReply | boolean | false | AI가 응답한 후 수신 확인 리액션 제거 |
| textChunkLimit | number | 2000 | 메시지 청크당 최대 문자 수(Discord 제한은 2000) |
| chunkMode | string | "length" | 긴 응답 분할 방식. 옵션: length(문자 수 기준), newline(단락 경계 기준) |
| historyLimit | number | 20 | AI 컨텍스트에 포함할 최근 서버 메시지 수 |
| mediaMaxMb | number | 8 | 업로드 최대 미디어 파일 크기(메가바이트) |
| replyToMode | string | "off" | 답글 스레딩 모드. 옵션: off, first(첫 번째 청크만 스레드), all(모든 청크 스레드) |
| configWrites | boolean | true | Discord에서 /config set|unset 명령을 통한 구성 업데이트 허용 |
| allowBots | boolean | false | 다른 봇의 메시지를 처리할지 여부. 루프 방지를 위해 주의하여 사용 |
| retry.attempts | number | 3 | 실패한 Discord API 호출의 재시도 횟수 |
| retry.minDelayMs | number | 500 | 재시도 간 최소 지연 시간(밀리초) |
| retry.maxDelayMs | number | 30000 | 재시도 간 최대 지연 시간(밀리초) |
| retry.jitter | number | 0.1 | 재시도 지연에 적용되는 지터 팩터 |
| dm.enabled | boolean | true | 다이렉트 메시지 수신 여부 |
| dm.groupEnabled | boolean | false | 그룹 DM 처리 활성화 |
| dm.groupChannels | string[] | [] | 그룹 DM 채널 허용 목록 |
| dmHistoryLimit | number | - | 사용자별 DM 기록 제한 재정의 |
| maxLinesPerMessage | number | 17 | 메시지 청크당 소프트 줄 수 제한 |
| commands.native | string | boolean | "auto" | 네이티브 슬래시 명령 등록. 옵션: auto(Discord에서 활성화), true, false |
| commands.text | object | {} | 독립 실행형 /... 메시지가 필요한 텍스트 명령 구성 |
| commands.useAccessGroups | boolean | false | 명령에 대한 접근 그룹 검사 시행 여부 |
| actions.* | boolean | varies | 도구 액션 게이트. 대부분 기본 활성화; roles, moderation, presence는 기본 비활성화 |
| pluralkit.enabled | boolean | false | PluralKit 프록시 메시지 확인 활성화 |
Discord 채널 활성화 또는 비활성화
Discord Bot Token. DISCORD_BOT_TOKEN 환경 변수를 사용할 수도 있습니다
봇에게 DM을 보낼 수 있는 사용자를 제어합니다. 옵션: pairing, allowlist, open, disabled
봇에게 DM을 보낼 수 있는 Discord 사용자 ID(dm.policy가 allowlist일 때)
서버 채널 처리 정책. 옵션: open, disabled, allowlist
서버 ID를 키로 하는 서버별 구성. slug, users, channels, requireMention 등 포함
서버 채널에서 봇이 응답하려면 @멘션이 필요한지 여부
처리 중 메시지 수신 확인으로 반응할 이모지
AI가 응답한 후 수신 확인 리액션 제거
메시지 청크당 최대 문자 수(Discord 제한은 2000)
긴 응답 분할 방식. 옵션: length(문자 수 기준), newline(단락 경계 기준)
AI 컨텍스트에 포함할 최근 서버 메시지 수
업로드 최대 미디어 파일 크기(메가바이트)
답글 스레딩 모드. 옵션: off, first(첫 번째 청크만 스레드), all(모든 청크 스레드)
Discord에서 /config set|unset 명령을 통한 구성 업데이트 허용
다른 봇의 메시지를 처리할지 여부. 루프 방지를 위해 주의하여 사용
실패한 Discord API 호출의 재시도 횟수
재시도 간 최소 지연 시간(밀리초)
재시도 간 최대 지연 시간(밀리초)
재시도 지연에 적용되는 지터 팩터
다이렉트 메시지 수신 여부
그룹 DM 처리 활성화
그룹 DM 채널 허용 목록
사용자별 DM 기록 제한 재정의
메시지 청크당 소프트 줄 수 제한
네이티브 슬래시 명령 등록. 옵션: auto(Discord에서 활성화), true, false
독립 실행형 /... 메시지가 필요한 텍스트 명령 구성
명령에 대한 접근 그룹 검사 시행 여부
도구 액션 게이트. 대부분 기본 활성화; roles, moderation, presence는 기본 비활성화
PluralKit 프록시 메시지 확인 활성화
Discord 자주 묻는 질문
Discord 문제 해결
Message Content Intent가 활성화되지 않았거나, 봇에 채널 권한이 없거나, 멘션 요구 설정이 잘못되었습니다.
구성에서 DM 처리가 비활성화되었거나 페어링 승인이 보류 중입니다.
봇의 OAuth2 초대 URL에 'applications.commands' 스코프가 포함되지 않았습니다.
Discord API 속도 제한에 도달했거나 Gateway 연결 상태가 불안정합니다.
groupPolicy가 기본적으로 'allowlist'이므로 봇은 명시적으로 구성된 서버/채널에서만 응답합니다.
execApprovals가 활성화되지 않았거나 사용자의 Discord ID가 approvers 배열에 나열되지 않았습니다.