본문으로 이동

명령어

채널의 커스텀 명령어를 조회·추가·수정·삭제하는 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 오름차순)로 정렬되며 페이지 없이 한 번에 옵니다.

GET/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 권한이 없습니다

명령어 추가

새 명령어를 만듭니다. 새 명령어는 목록 맨 뒤에 붙습니다.

POST/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는 바꾸지 않더라도 항상 보내고, 나머지는 바꿀 필드만 보냅니다.

PUT/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 권한이 없습니다

명령어 삭제

명령어 하나를 지웁니다. 지운 명령어는 되돌릴 수 없습니다.

DELETE/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 권한이 없습니다

이 가이드로 해결이 안 됐나요?

디스코드로 문의하기

명령어, 룰렛, OBS처럼 궁금한 걸 검색해 보세요.