JDA (Java Discord API) 是一個非官方的 Discord API 函式庫,專為 Java 開發者設計。它提供了多樣的功能,讓開發者能夠輕鬆地與 Discord 平台進行互動,包括處理訊息、管理伺服器、與用戶互動等。
首先,在 Maven 專案中加入 JDA 的依賴。打開 pom.xml 檔案,並在 區塊中加入以下內容:
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>5.1.0</version>
</dependency>
我們的爬蟲專案現在是排程觸發,還需要一個執行序去管理Discord Bot,我們一樣使用Spring提供的ApplicationRunner。
package tw.grass.rental_crawler;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
@Component
public class DiscordBotRunner implements ApplicationRunner {
@Value("${discord.token}")
private String discordToken;
Logger log = LoggerFactory.getLogger(DiscordBotRunner.class);
@Override
public void run(ApplicationArguments args) throws Exception {
JDABuilder builder = JDABuilder.createDefault(discordToken);
JDA jda = builder.build();
log.info("Discord bot creation completed.");
}
}
discordToken 來自於我的設定檔,前如之前所說,必須自己保存好,我就不推上git了。
tokenk來自於:
spring.config.import=parameter.properties,token.properties
token
discord.token=自己的token
可以看到機器人上線了。
因為機器人必須監聽使用者輸入的文字,JDA一樣有提供我們方便的監聽器(Listener)使用,為了方便理解,我們直接寫在DiscordBotRunner裡面。
@Override
public void run(ApplicationArguments args) throws Exception {
JDABuilder builder = JDABuilder.createDefault(discordToken);
builder.addEventListeners(new DiscordBotListener());
JDA jda = builder.build();
log.info("Discord bot creation completed.");
}
class DiscordBotListener extends ListenerAdapter {
@Override
public void onMessageReceived(MessageReceivedEvent event) {
String message = event.getMessage().getContentRaw();
log.info("Received: {}", message);
}
}
Override一個onMessageReceived的事件,當使用者打字時,我會將使用者輸入的訊息印出來。
接著,隨便打點字。
原因是:Discord現在規定,如果要接收使用者的訊息,需要先啟用MESSAGE_CONTENT。所以我們再前往Discord 開發者平台進行設定。
點開下面按鈕:
Java程式碼也要設定。
builder.enableIntents(GatewayIntent.MESSAGE_CONTENT); // 啟用 MESSAGE_CONTENT Intent
接著我們再次執行及輸入文字。
今天我們成功了導入JDA,並且已經可以接收使用者輸入的文字了。明天會繼續使用JDA提供的API進行更多的實驗。