디스코드 봇을 개발하고 있을 때 slash command를 등록하던 도중
디스코드 라이브러리에 REST를 불러와서 등록하는 것을 보고
"discord developer portal에 있는 restful api가이드를 이용하여 간단하게 봇을 이용할 수 있지 않을까?"
라는 생각에 공식 문서를 찾아보았습니다.
찾아본 결과 기존에는
client를 생성하고..
token등록하고...
client.guilds.cache.get(guildId)을 해서 가져왔지만
REST를 사용할 때에는 그냥
REST 클래스에 token 등록하고. get("/guilds/{guildId}")만 하면 끝나더라고요..!
그래서 이번 포스트에서는 해당 부분에 대해 소개하고 공식문서를 어떻게 참조하는지 포스팅하겠습니다.
REST 객체를 이용하는 소스코드는 아래와 같습니다.
import { REST } from "discord.js";
const rest = new REST().setToken(discord_bot_token);
await rest.get();
await rest.post();
await rest.put();
await rest.patch();
.
.
.
1. api 정보 확인하기
일단 디스코드 디벨로퍼 사이트에 접속합니다.
Discord Developer Portal — Documentation — Intro
RESOURCES 카테고리 안에 있는 정보가
바로 우리가 사용할 수 있는 api 목록들입니다.
resources category
대표적으로 guild 정보만 확인하겠습니다.
위 사진처럼 리소스 카테고리에 길드를 클릭하면 아래에 api 목록들이 보입니다.
지금은 길드 데이터를 가져오는 Get Guild를 사용해 보겠습니다.
해당 Get Guild를 클릭하면 아래와 같은 화면이 보입니다.
이때 Get Guild 아래에 있는 정보가 api입니다.
2. api 사용해 보기
순서대로 왼쪽은 get(), patch(), post(), push()를 나타내는 것이고
오른쪽은 api를 나타냅니다.
그래서 사용하면 아래와 같이 소스코드를 작성할 수 있습니다.
await rest.get("/guilds/{guildId}");
해당 소스코드에서는 길드 Id를 통해 봇 권한에 맞는 Guild 정보를 가져오는데요.
해당 소스코드의 결과는 아래와 같습니다.
여기서 서버가 없거나 디스코드 서버의 불안정으로 인해 오류가 발생할 수 있는데요.
이때는 다음과 같은 코드로 오류인지 아닌지 확인할 수 있습니다.
3. response 오류 대처하기
const res = await rest.get("/guilds/{guildId}");
if(res.hasOwnProperty("rawError")) {
/* error */
} else {
/* success */
}
해당 코드는 response 데이터에 rawError 프로퍼티가 존재한다면 오류로 간주하는 코드입니다.
여기서 "status 코드를 확인하면 되는 거 아닌가?"라는 의문점이 생길 수도 있는데요!
안타깝게도 response 타입은 Promise <unknown>이고
error에서는 status가 존재하지만 get success에서는 status가 없고
바로 해당 데이터를 전달하기에 안정적으로
rawError 프로퍼티를 확인하는 게 좋은 거 같습니다
포스팅은 이만 여기서 줄이도록 하겠습니다.
궁금한 점은 댓글에 달아주세요!
'discord developer' 카테고리의 다른 글
"디스코드 초대 링크"와 "Oauth2 인증을 통한 guilds.join"간의 차이점이 있을까? (0) | 2025.01.14 |
---|---|
ytdl-core로 높은 퀄리티의 디스코드 음악 스트리밍하기 (0) | 2024.04.17 |
디스코드 레니 봇 개발 일지_(비트레이트 높이는 방법,@distube/ytdl-core 사용, many request 해결) (0) | 2024.01.19 |
디스코드 레니 봇 개발 일지_ ( 로그 편 ) (5) | 2023.11.20 |
discord.js 를 이용한 디스코드 음악 봇 만들기 (ytdl-core 심화편) (0) | 2023.07.30 |