명령어
채널의 커스텀 명령어를 조회·추가·수정·삭제하는 API입니다.
목차
채널의 커스텀 명령어를 조회하고 추가·수정·삭제하는 API입니다. 대시보드 명령어 화면과 같은 데이터를 다루며, 바꾼 내용은 1초 안에 봇에 반영됩니다.
명령어 객체
조회·추가·수정 API는 명령어를 아래 객체로 돌려줍니다. 각 설정이 채팅에서 어떻게 동작하는지는 커스텀 명령어 가이드와 같습니다.
| 필드 | 타입 | 설명 |
|---|---|---|
id |
integer | 명령어 ID. 채널 안에서만 고유하며 수정·삭제 경로의 {command_id}에 씁니다 |
cmd_index |
integer | 대시보드 명령어 표의 순서. 작을수록 앞이고 새 명령어는 맨 뒤에 붙습니다. API로는 바꿀 수 없습니다 |
command |
string | 명령어 이름(시청자가 칠 말). %%로 시작하면 채팅에 그 말이 들어 있기만 해도 반응합니다(채팅과 명령어를 맞추는 방법) |
response |
string | 봇 응답. 응답 변수를 쓸 수 있고, 채팅에는 앞 99자까지만 나갑니다 |
response_use_point_fail |
string | 포인트가 모자라거나 오늘 이미 출석했을 때 보낼 응답. 빈 문자열이면 봇 기본 문구를 보냅니다 |
point |
integer 또는 string | 한 번 쓸 때 깎을 포인트. 음수면 그만큼 줍니다(포인트 깎기·주기). 절댓값이 9,007,199,254,740,991을 넘으면 문자열로 옵니다 |
cooltime |
integer | 전체 쿨타임(초). 0이면 없습니다 |
user_cooltime |
integer | 유저별 쿨타임(초). 0이면 없습니다 |
live_only |
boolean | true면 방송 중에만 실행합니다 |
notice_on_staff |
boolean | true면 스트리머·치지직 매니저처럼 일반 시청자가 아닌 사람이 쓸 때 응답을 채팅 공지로 고정합니다 |
user_daily_limit |
integer | 한 사람이 하루에 쓸 수 있는 횟수. 0 이하면 제한이 없습니다(쿨타임과 사용 제한) |
total_daily_limit |
integer | 채널 전체가 하루에 쓸 수 있는 횟수. 0 이하면 제한이 없습니다 |
total_used_count |
integer | 지금까지 성공한 사용 횟수. 읽기 전용입니다 |
total_daily_used_count |
integer | 하루(새벽 5시 기준) 동안 성공한 사용 횟수. 날이 바뀐 뒤 첫 사용 때 다시 세므로 그 전까지는 전날 값이 남아 있습니다. 읽기 전용입니다 |
is_attendance |
boolean | true면 출석 체크 명령어입니다(출석 체크) |
activate |
boolean | false면 지우지 않고 멈춰 둡니다 |
새 명령어의 id는 채널 안의 가장 큰 id에 1을 더한 값입니다. 가장 큰 id의 명령어를 지우면 다음에 만드는 명령어가 같은 id를 받으니, 지운 명령어의 id를 계속 쓰지 마세요.
명령어 목록 조회
채널의 커스텀 명령어를 모두 가져옵니다. 대시보드 표 순서(cmd_index 오름차순)로 정렬되며 페이지 없이 한 번에 옵니다.
/api/ v1/ developer/ commands권한: commands:read요청
요청 파라미터가 없습니다.
GET /api/v1/developer/commands
Authorization: Bearer ACCESS_TOKEN
응답
| 필드 | 타입 | 설명 |
|---|---|---|
[] |
array | 명령어 객체의 배열. 명령어가 없으면 빈 배열 []입니다 |
[
{
"id": 1,
"cmd_index": 0,
"command": "!출첵",
"response": "<보낸사람>님 출석 완료! <출석횟수>번째 출석이에요.",
"response_use_point_fail": "<보낸사람>님은 이미 출석을 진행하였습니다",
"point": 0,
"cooltime": 0,
"user_cooltime": 0,
"live_only": false,
"notice_on_staff": false,
"user_daily_limit": 0,
"total_daily_limit": 0,
"total_used_count": 352,
"total_daily_used_count": 41,
"is_attendance": true,
"activate": true
},
{
"id": 3,
"cmd_index": 1,
"command": "!디코",
"response": "디스코드는 discord.gg/초대코드 로 들어오세요",
"response_use_point_fail": "",
"point": 0,
"cooltime": 10,
"user_cooltime": 0,
"live_only": false,
"notice_on_staff": false,
"user_daily_limit": 0,
"total_daily_limit": 0,
"total_used_count": 128,
"total_daily_used_count": 7,
"is_attendance": false,
"activate": true
}
]
오류
| 상태 | 응답 | 원인 |
|---|---|---|
| 401, 403 | 공통 오류 | 토큰이 유효하지 않거나 commands:read 권한이 없습니다 |
명령어 추가
새 명령어를 만듭니다. 새 명령어는 목록 맨 뒤에 붙습니다.
/api/ v1/ developer/ commands권한: commands:write요청
| 이름 | 위치 | 타입 | 필수 | 설명 |
|---|---|---|---|---|
command |
body | string | 예 | 명령어 이름. 1~300자 |
response |
body | string | 예 | 봇 응답. 300자까지. 빈 문자열이면 채팅을 보내지 않습니다(출석 명령도 같음) |
response_use_point_fail |
body | string | 아니요 | 포인트 부족·중복 출석 때 응답. 300자까지, 기본값 "" |
point |
body | integer | 아니요 | 한 번 쓸 때 깎을 포인트. 음수면 줍니다. 64비트 정수 범위, 기본값 0 |
cooltime |
body | integer | 아니요 | 전체 쿨타임(초). 0~2,147,483,647, 기본값 0 |
user_cooltime |
body | integer | 아니요 | 유저별 쿨타임(초). 0~2,147,483,647, 기본값 0 |
live_only |
body | boolean | 아니요 | 방송 중에만 실행. 기본값 false |
notice_on_staff |
body | boolean | 아니요 | 일반 시청자가 아닌 사람이 쓰면 응답을 공지로 고정. 기본값 false |
user_daily_limit |
body | integer | 아니요 | 유저별 일일 제한. 32비트 정수, 0 이하면 제한 없음. 기본값 0 |
total_daily_limit |
body | integer | 아니요 | 전체 일일 제한. 32비트 정수, 0 이하면 제한 없음. 기본값 0 |
is_attendance |
body | boolean | 아니요 | 출석 체크 명령어로 쓸지. 기본값 false |
activate |
body | boolean | 아니요 | 바로 켤지. 기본값 true |
total_used_count, total_daily_used_count는 봇이 세는 값이라 보내도 무시됩니다.
POST /api/v1/developer/commands
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json
{
"command": "!선물",
"response": "<보낸사람>님 100P 선물! 지금 <잔여포인트>P",
"point": -100,
"user_daily_limit": 1
}
응답
성공 상태는 201이 아니라 200입니다.
| 필드 | 타입 | 설명 |
|---|---|---|
| (본문) | object | 추가한 명령어 객체 |
{
"id": 4,
"cmd_index": 2,
"command": "!선물",
"response": "<보낸사람>님 100P 선물! 지금 <잔여포인트>P",
"response_use_point_fail": "",
"point": -100,
"cooltime": 0,
"user_cooltime": 0,
"live_only": false,
"notice_on_staff": false,
"user_daily_limit": 1,
"total_daily_limit": 0,
"total_used_count": 0,
"total_daily_used_count": 0,
"is_attendance": false,
"activate": true
}
오류
| 상태 | 응답 | 원인 |
|---|---|---|
| 400 | {"detail": "이미 존재하는 명령어입니다."} |
같은 이름의 명령어가 있습니다. 영문 대소문자만 다른 이름도 같은 이름으로 봅니다 |
| 422 | {"detail": [...]} |
command·response가 없거나, 길이·범위·타입이 맞지 않거나, 필드에 null을 보냈습니다 |
| 500 | {"detail": "Internal Server Error"} |
저장하지 못했습니다. 숫자가 저장 범위를 넘었거나, 봇을 켠 적이 없는 채널처럼 잼쿠봇에 채널 정보가 없을 때 납니다 |
| 401, 403 | 공통 오류 | 토큰이 유효하지 않거나 commands:write 권한이 없습니다 |
명령어 수정
명령어 하나를 고칩니다. command와 response는 바꾸지 않더라도 항상 보내고, 나머지는 바꿀 필드만 보냅니다.
/api/ v1/ developer/ commands/ {command_id}권한: commands:write요청
| 이름 | 위치 | 타입 | 필수 | 설명 |
|---|---|---|---|---|
command_id |
path | integer | 예 | 고칠 명령어의 id |
command |
body | string | 예 | 명령어 이름. 1~300자. 이름을 그대로 두려면 지금 이름을 보냅니다 |
response |
body | string | 예 | 봇 응답. 300자까지, 빈 문자열 가능 |
response_use_point_fail, point, cooltime, user_cooltime, live_only, notice_on_staff, user_daily_limit, total_daily_limit, is_attendance, activate |
body | 명령어 추가와 같음 | 아니요 | 형식과 범위는 명령어 추가와 같습니다. 보내지 않은 필드는 기존 값을 유지합니다 |
필드를 빼면 유지되지만 null은 받지 않습니다(422). 값을 끄거나 비우려면 0, false, ""처럼 실제 값을 보내세요.
수정은 이름 중복을 검사하지 않습니다. 다른 명령어와 같은 이름으로 바꾸면 같은 이름이 둘이 되고, 채팅에는 목록에서 앞에 있는 명령어만 반응합니다. 이름을 바꾸기 전에 목록에서 확인하세요.
PUT /api/v1/developer/commands/3
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json
{
"command": "!디코",
"response": "새 디스코드 주소는 discord.gg/새코드 예요",
"cooltime": 30
}
응답
| 필드 | 타입 | 설명 |
|---|---|---|
| (본문) | object | 수정한 뒤의 명령어 객체 |
{
"id": 3,
"cmd_index": 1,
"command": "!디코",
"response": "새 디스코드 주소는 discord.gg/새코드 예요",
"response_use_point_fail": "",
"point": 0,
"cooltime": 30,
"user_cooltime": 0,
"live_only": false,
"notice_on_staff": false,
"user_daily_limit": 0,
"total_daily_limit": 0,
"total_used_count": 128,
"total_daily_used_count": 7,
"is_attendance": false,
"activate": true
}
오류
| 상태 | 응답 | 원인 |
|---|---|---|
| 404 | {"detail": "명령어가 없습니다"} |
이 채널에 그 id의 명령어가 없습니다 |
| 422 | {"detail": [...]} |
command·response가 없거나, 길이·범위·타입이 맞지 않거나, 필드에 null을 보냈거나, command_id가 정수가 아닙니다 |
| 500 | {"detail": "Internal Server Error"} |
숫자가 저장 범위를 넘어 저장하지 못했습니다 |
| 401, 403 | 공통 오류 | 토큰이 유효하지 않거나 commands:write 권한이 없습니다 |
명령어 삭제
명령어 하나를 지웁니다. 지운 명령어는 되돌릴 수 없습니다.
/api/ v1/ developer/ commands/ {command_id}권한: commands:write요청
| 이름 | 위치 | 타입 | 필수 | 설명 |
|---|---|---|---|---|
command_id |
path | integer | 예 | 지울 명령어의 id |
이 명령어를 연결해 둔 룰렛의 command_id는 그대로 남습니다. 필요하면 룰렛 수정으로 연결을 바꾸세요.
DELETE /api/v1/developer/commands/3
Authorization: Bearer ACCESS_TOKEN
응답
| 필드 | 타입 | 설명 |
|---|---|---|
ok |
boolean | 항상 true |
{"ok": true}
오류
| 상태 | 응답 | 원인 |
|---|---|---|
| 404 | {"detail": "명령어가 없습니다"} |
이 채널에 그 id의 명령어가 없습니다 |
| 422 | {"detail": [...]} |
command_id가 정수가 아닙니다 |
| 401, 403 | 공통 오류 | 토큰이 유효하지 않거나 commands:write 권한이 없습니다 |
이 가이드로 해결이 안 됐나요?
디스코드로 문의하기