본문 바로가기

프로그래밍/디코봇 만들기

JAVA 디스코드 봇 챗봇 만들기 - 2. 개발하기

저번 글에 이어서 이번에는, 디스코드 봇을 직접 만드는 법에 대해 알려드리려 합니다. 혹시라도 이전 글을 안보신 분들은 여기를 먼저 읽으신 후 다시 오시길 바랍니다.

그럼, 시작해 보죠.


JAVA로 디스코드 봇 만들기

어떤 JAVA 프로젝트던, 자바의 모든 것을 이루는 '클래스'는 필요합니다. 먼저 기본 클래스(메인 클래스)를 생성합시다.


현재 우리가 해야 되는 일은 특별한 뭔가를 상속받거나 한 class를 만드는 것은 아니고, 그냥 코드가 실행되게 하기 위한 클래스를 만드는 것이기 때문에 그냥 아무것도 없는 클래스를 만들거나 main 함수가 있게 해 주는 기능이 있다면, 그걸로 만들어 주면 됩니다.

그럼, 간단한 예제와 함께 시작해볼까요?

API 사용하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import com.google.common.util.concurrent.FutureCallback;
 
import de.btobastian.javacord.DiscordAPI;
import de.btobastian.javacord.Javacord;
import de.btobastian.javacord.entities.message.Message;
import de.btobastian.javacord.listener.message.MessageCreateListener;
 
public class jam {
    static public void main(String args[]){
        DiscordAPI api = Javacord.getApi("토큰"true);
        api.connect(new FutureCallback<DiscordAPI>() {
              public void onSuccess(final DiscordAPI api) {
                  api.registerListener(new MessageCreateListener() {
                      public void onMessageCreate(DiscordAPI api, Message message) {
                          if(message.getContent().equals("ping")){
                              message.reply("pong!");
                          }
                      }
                  });
              }
 
              public void onFailure(Throwable t) {
                t.printStackTrace();
              }
            });
    }
}
 
cs

하나하나 클래스를 찾고 붙여놓는건 시간도 오래걸리고, 재미도 없을뿐더러 무엇보다 봇을 만드는 일은 아주 기대되는 일이기 때문에! 그냥 간단한 예제 하나를 가지고 쉽게 이해를 하도록 가져와봤습니다.

위 소스에서 public class 명인 jam만 자신의 java 파일명에 맞게 고치고, 위에 있는 '토큰' 이라는 글자만 자신의 토큰으로 바꿔껴주면 잘 작동합니다.

Javacord.getApi("토큰", boolean);

먼저, 자바코드를 사용하기 위한 가장 첫번째 일입니다. 봇에다가 연결을 해 주는 일인데요. 연결을 하기 위해서는 봇 계정이나 실제 계정이 필요한데, 봇 계정을 만들기 위한 방법으로는 여기를 보시면 되겠습니다. 만약에 봇 계정을 이미 만들었고 토큰도 안다 하는 분들은, 그냥 진행하시면 됩니다.

위 함수는 Discord에서 발급해준 토큰을 이용하여 Discord 서버와의 통신을 준비합니다. (그리고 DiscordAPI class를 반환합니다) 첫번째 인수로는 String 형식인 토큰이 들어가고, 두번째에는 봇 계정인지의 여부로 boolean 값이 들어갑니다. 일반적으로 봇 계정을 따로 만들었다면 그냥 true로 해 두면 됩니다.


api.connect(FutureCallback<DiscordAPI>)

getApi가 준비 과정을 해주었다면, 이 함수는 이제 실제 연결에 들어갑니다. 인수로는 callback이 들어가, 결과에 따라 콜백 함수를 호출합니다. 이 안에는 onSuccess와 onFailure가 들어갈 수 있는데요, onSuccess 안에는 성공적으로 통신을 시작했을 때 일어나는 행동을 기술하면 되고, onFailure는 반대랍니다. (실패했을때)


api.registerListener(리스너)

registerListener는 말그대로, 리스너를 등록해주는 함수입니다. 예를 들어 메시지가 왔다거나 강퇴를 당했다거나 등등 이런 이벤트들이 발생하면 안에 있는 리스너가 작동됩니다.

그리고, 그 안에 리스너를 호출하면서 같이 인수로 넘어오는 객체는 대표적으로 Message가 있는데, 이 Message 객체 안에는 메시지에 관한 정보들과 메서드들이 담겨 있게 됩니다. 이걸 이용해서 사용자의 이름을 알아내거나, 그 사람에게 1:1 메시지를 보낸다거나 하는 것이 가능합니다. 물론 JAVA이기에 Getter와 Setter 방식으로 이루어져 있답니다.



콘솔 로그에는 잘 작동됬다고 뜹니다. 그리고, 서버에 봇을 추가해 주면 됩니다. ping, pong! ping이라고 보내면 pong이라고 오는 봇이 만들어졌습니다. 완성.


이제, javacord API의 문서도 참고해보고 하면서 봇을 만들어가면 됩니다. 그럼 즐거운 봇 개발 되시길.

이만.