목차
메시지 읽고 답장
이벤트 리스너 추가
JDA jda = JDABuilder.createDefault
.addEventListeners(new CommandHandler())
.build();
앞서 #2에서 JDA 객체를 생성할 때 작성한 코드에 addEventListeners메서드를 추가합니다.
이벤트 리스너 메서드는 리스너에서 정의한 이벤트가 발생할 때마다 구현해놓은 동작을 실행합니다.
CommandHandler
명령어를 처리하고 실행할 클래스를 생성합니다.
package santa;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
public class CommandHandler extends ListenerAdapter {
@Override
public void onMessageReceived(MessageReceivedEvent event) {
Message msg = event.getMessage();
MessageChannel channel = event.getChannel();
User user = event.getAuthor();
System.out.println(event.getMessage());
if(user.isBot()) return;
if(msg.getContentRaw().equals("hi")) {
msg.reply("ho ho ho").queue();
}
}
}
봇끼리 대화를 하는 상황이 벌어지면 안 되기 때문에 유저를 확인하여 봇인 경우 리턴시킵니다.
그리고 "hi"라는 메세지가 들어올 경우 산타봇이 "ho ho ho"하고 답장을 수행하도록 하였습니다.
이벤트 수신 문서
그런데 이렇게 구현하고 메시지를 보내면 오류가 발생합니다.
오류
Discord now requires to explicitly enable access to this using the MESSAGE_CONTENT intent. Useful resources to learn more: - https://support-dev.discord.com/hc/en-us/articles/4404772028055-Message-Content-Privileged-Intent-FAQ - https://jda.wiki/using-jda/gateway-intents-and-member-cache-policy/ - https://jda.wiki/using-jda/troubleshooting/#cannot-get-message-content-attempting-to-access-message-content-without-gatewayintent Or suppress this warning if this is intentional with Message.suppressContentIntentWarning() ReceivedMessage(id=1186986956433915945, author=z_z33, content= ...) |
오류같은 경우에는 콘솔창에 자세하게 설명되어 있으니 링크를 타고 문서를 확인해줍니다.
디스코드 개발자 포털
디스코드 개발자 포털 - Bot-Privileged Gateway Intents에서
사용하려는 기능을 활성화합니다.
Gateway Intents 활성화
JDA jda = JDABuilder.createLight(BOT_TOKEN, GatewayIntent.GUILD_MESSAGES, GatewayIntent.MESSAGE_CONTENT, GatewayIntent.GUILD_MEMBERS)
.addEventListeners(new CommandHandler())
.build();
앞서 JDA 객체를 생성할 때 createDefault를 사용하였습니다.
이것을 createLight로 변경해줍니다.
JDA 버전 5.0.0-alpha.14부터는 intents를 명시적으로 활성화 해야 합니다.
Gateway Intents 문서
봇 동작
'개발 > discord BOT' 카테고리의 다른 글
[디스코드 봇 개발] - #2 봇 초대, 온라인, JDA (0) | 2023.12.12 |
---|---|
[디스코드 봇 개발] - #1 봇 생성 (0) | 2023.12.04 |
[디스코드 봇 개발] - #0 개발 동기 및 개발 환경 (0) | 2023.11.30 |