discord developer

디스코드 봇 개발 일지 (REST API를 이용하여 간단하게 디스코드 봇 사용하기)

yjlee06 2024. 2. 15. 19:59
반응형

디스코드 봇을 개발하고 있을 때 slash command를 등록하던 도중

디스코드 라이브러리에 REST를 불러와서 등록하는 것을 보고
"discord developer portal에 있는 restful api가이드를 이용하여 간단하게 봇을 이용할 수 있지 않을까?"

라는 생각에 공식 문서를 찾아보았습니다.

 

찾아본 결과 기존에는

client를 생성하고..

token등록하고...

client.guilds.cache.get(guildId)을 해서 가져왔지만

 

REST를 사용할 때에는 그냥

REST 클래스에 token 등록하고. get("/guilds/{guildId}")만 하면 끝나더라고요..!

booooom

 

그래서 이번 포스트에서는 해당 부분에 대해 소개하고 공식문서를 어떻게 참조하는지 포스팅하겠습니다.

 

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 정보만 확인하겠습니다.

 

guild category

위 사진처럼 리소스 카테고리에 길드를 클릭하면 아래에 api 목록들이 보입니다.

지금은 길드 데이터를 가져오는 Get Guild를 사용해 보겠습니다.

 

해당 Get Guild를 클릭하면 아래와 같은 화면이 보입니다.

 

Get Guild

이때 Get Guild 아래에 있는 정보가 api입니다.

 

2. api 사용해 보기

api

순서대로 왼쪽은 get(), patch(), post(), push()를 나타내는 것이고

오른쪽은 api를 나타냅니다.

 

그래서 사용하면 아래와 같이 소스코드를 작성할 수 있습니다.

await rest.get("/guilds/{guildId}");

해당 소스코드에서는 길드 Id를 통해 봇 권한에 맞는 Guild 정보를 가져오는데요.

해당 소스코드의 결과는 아래와 같습니다.

response

여기서 서버가 없거나 디스코드 서버의 불안정으로 인해 오류가 발생할 수 있는데요.

이때는 다음과 같은 코드로 오류인지 아닌지 확인할 수 있습니다.

 

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 프로퍼티를 확인하는 게 좋은 거 같습니다

 

포스팅은 이만 여기서 줄이도록 하겠습니다.

궁금한 점은 댓글에 달아주세요!