為了方便理解,我們將程式碼寫在 DiscordBotRunner,重點是 sendMessage 方法。傳送訊息時需要 JDA、頻道ID 以及要傳送的訊息。呼叫 sendMessage 後,訊息就可以被傳輸。
另外剛啟動時,直接傳送訊息似乎會失敗,所以加了三秒的延遲,不過未來我們也會改寫掉這裡的寫法,先暫時這樣處理。
@Override
public void run(ApplicationArguments args) throws Exception {
JDABuilder builder = JDABuilder.createDefault(discordToken);
builder.enableIntents(GatewayIntent.MESSAGE_CONTENT); // 啟用 MESSAGE_CONTENT Intent
builder.addEventListeners(new DiscordBotListener());
JDA jda = builder.build();
log.info("Discord bot creation completed.");
// 延遲三秒,不延遲的話訊息會發不出去
Thread.sleep(3000);
sendMessage(jda, "替換成你的Channel ID", "小草您好。");
}
public static void sendMessage(JDA jda,String channelId, String message) {
TextChannel channel = jda.getTextChannelById(channelId);
if (channel != null) {
channel.sendMessage(message).queue();
}
}
執行結果:
標記用戶非常簡單,只要知道用戶ID,前後加上 <@ 和 > 即可,讓指定的用戶在訊息中被提及並收到通知。
String taggedMessage = "<@" + userId + "> " + message;
範例程式碼如下:
@Override
public void run(ApplicationArguments args) throws Exception {
JDABuilder builder = JDABuilder.createDefault(discordToken);
builder.enableIntents(GatewayIntent.MESSAGE_CONTENT); // 啟用 MESSAGE_CONTENT Intent
builder.addEventListeners(new DiscordBotListener());
JDA jda = builder.build();
log.info("Discord bot creation completed.");
// 延遲三秒,不延遲的話訊息會發不出去
Thread.sleep(3000);
tagUserAndSendMessage(jda, "替換成你的Channel ID", "替換成你的User ID", "小草您好。");
}
public void tagUserAndSendMessage(JDA jda, String channelId, String userId, String message) {
TextChannel channel = jda.getTextChannelById(channelId);
if (channel != null) {
String taggedMessage = "<@" + userId + "> " + message;
channel.sendMessage(taggedMessage).queue();
}
}
執行結果:
通過這幾個核心功能的實作,我們的 Discord bot 可以滿足 591 租屋爬蟲推播程式的需求。未來,如果需要擴展功能,也可以在此基礎上進行開發。關於 Discord Bot 的教學及研究就到這邊了,接下來將著重於設計機器人的互動指令以及租屋推播通知的條件規劃等功能。