Harmony API / 2. 봇 로그인 하기

devlaq·2021년 10월 26일
0

Harmony API

목록 보기
3/3
post-thumbnail

이번 강좌에서는 Discord에서 봇을 생성하고, 로그인하는 코드를 작성합니다.
Discord에 가입이 되어 있어야합니다.

챕터

1 봇 생성하기
2 봇 초대하기
3 Ping 명령어 만들기

1: 봇 생성하기

디스코드에 로그인한 상태로 Discord Developer Portal로 이동합니다.

아래와 같은 화면이 나옵니다.

New Application을 클릭해 애플리케이션 이름을 입력하고, 소유할 팀을 설정합니다.
Create를 누르면 애플리케이션이 생성됩니다.

아래와 같은 화면이 나옵니다.

Bot을 눌러서 봇 탭으로 전환합니다.

Add Bot을 누르면 봇을 정말 추가할 것인지 묻는 다이얼로그가 뜹니다.
Yes, do it!을 누르면 봇이 추가됩니다.

봇의 이름, 프로필 사진을 설정할 수 있습니다. 애플리케이션 이름과는 별개입니다.
봇의 이름이 다른 유저에게 보이는 진짜 이름입니다.

2: 봇 초대하기

봇을 생성하고 나면 서버에 초대하여야 사용할 수 있습니다.

General Information에서 Application ID를 복사합니다.
URL을 직접 만들어서 초대할 수도 있지만
이 툴을 사용하면 더 쉽게 만들 수 있습니다.

아까 복사한 Application ID를 Client ID 칸에 넣습니다.

봇에게 필요한 권한을 위 체크박스가 있는 칸에서 선택합니다.
봇은 초대링크를 여러개 가지고 있을 수 있으며, 초대링크에서 명시된 권한마다 서버에서 가지고 있는 권한이 달라집니다.
만약 봇의 신뢰성이 낮다면 높은 권한들(관리자 등)이 명시된 경우 초대가 거부될 수 있고,
낮은 권한들이 있다면 봇이 제 기능을 처리하지 못할 수 있습니다.
봇의 목적에 따라 권한을 설정해야합니다.
저는 테스트를 위해 모든 권한을 가지고 있는 Administriator(관리자)를 선택하겠습니다.

제대로된 권한과 ID를 입력하고 나면 아래의 Link를 복사하거나 열어서 봇을 초대할 수 있습니다.

클릭하면 봇 초대 페이지로 이동합니다.

화면이 뜨는데, 봇을 초대할 서버를 선택하고 계속하기를 누릅니다.

승인을 누릅니다.
Captcha를 완료하고 나면 승인됩니다.

당신의 서버에서 봇이 추가된 걸 확인할 수 있습니다.

로그인하지 않았기에 오프라인으로 표시됩니다.

이제 거의 다 왔습니다!

3: Ping 명령어 만들기

이제 마지막으로 Ping 명령어를 추가하고 로그인하면 끝입니다!

이전 강좌에서 생성한 프로젝트를 열어줍니다.

index.ts라는 이름의 파일을 만듭니다.

API Wrapper를 불러오기 위해

import { Discord } from './deps.ts';

를 맨 위줄에 적습니다. 앞으로 모든 import 문은 맨 위에 추가됩니다.

client를 생성합니다.

const client = new Discord.Client();

메시지를 전달받기 위해 client.on을 사용합니다.
client.on은 어떠한 이벤트가 발생하였을 때 그것을 전달받을 핸들러를 추가하는 메서드입니다.
첫 번째 인수로 이벤트 종류(messageCreate, messageUpdate 등)을 받고, 두 번째로는 핸들러 메서드를 받습니다. 간편하게 하기 위해서 람다식으로 전달할 것입니다.

client.on('messageCreate', (message) => {
    
});

중괄호 안에 코드를 적으면 메시지가 생성되었을 때 실행됩니다.

if(message.author.bot) return;

봇이 명령어를 입력하는 것을 막기 위해서 추가합니다.
message.author는 메시지 보낸 유저, message.author.bot은 메시지를 보낸 유저가 봇인지 boolean 값으로 존재하는 것입니다.

우리가 만들것은 ping이므로 입력한 메시지가 !ping인지 확인하는 조건문을 추가합니다.

if(message.content == '!ping') {
        
}

message.content는 메시지의 내용을 뜻합니다.

조건문을 모두 통과했다면 답변을 주기 위해서

message.channel.send('Pong!');

를 조건문에 추가합니다.
message.channel은 메시지가 보내진 채널을 의미하며, message.channel.send는 메시지가 보내진 채널에 메시지를 보내는 것입니다.

이제 마지막으로 로그인을 해야합니다.

Discord Developer Portal로 다시 이동하여 당신의 봇을 선택하고 Bot 탭으로 전환합니다.

Token이 보일 것입니다.
파란색 글씨를 클릭하면 토큰이 보이며, Copy를 눌러서 복사할 수 있습니다.

토큰은 봇에 로그인하기 위한 매우 중요한 비밀번호와 같은 것입니다

만약 이 토큰이 노출될 경우 다른 사람이 당신의 봇을 로그인하여 서버를 파괴할 수도 있습니다.
다행히도 Discord는 토큰이 Github 등에 노출되었다면 경고하며, 토큰이 자동으로 바뀝니다.
그러지 않는 경우도 많으니, 노출된 것을 알게 되었다면 당장 Regenerate를 눌러 토큰을 재생성합니다.

토큰을 복사했다면 다시 코드로 와서

client.connect('TOKEN', Discord.Intents.None).then(c => {
    console.log(`Loggined as ${c.user?.tag}`); 
});

를 추가합니다.
TOKEN에는 당신의 토큰을 넣으세요.
다른 사람에게는 절대 공개하면 안됩니다.

이제 모든 코드를 다 작성했습니다!

코드 전문입니다.

import { Discord } from './deps.ts';

const client = new Discord.Client();

client.on('messageCreate', (message) => {
    if(message.author.bot) return;

    if(message.content == '!ping') {
        message.channel.send('Pong!');
    }
});

client.connect('TOKEN', Discord.Intents.None).then(c => {
    console.log(`Loggined as ${c.user?.tag}`); 
});

저장한 다음 터미널에

denon run -A index.ts

를 입력해 실행합니다.

이제 봇이 추가된 서버에서 !ping을 쳐보세요

아래와 같이 뜨지 않으면 코드 전문을 보고 제대로 된 코드인지 점검해보세요

수고하셨습니다.
오늘 강좌는 끝입니다!

profile
평범한 학생 개발자입니다.

0개의 댓글