Discord bot具備豐富的功能,從音樂播放到遊戲統計追蹤,無所不包。然而,對於我們的591租屋爬蟲推播程式,僅需關注最核心的幾個功能:接收文字、取得使用者的ID、取得頻道的ID、傳送文字、以及標記使用者。這些功能足以滿足我們自動化推播的需求,並簡化整體開發流程。
昨天的Listener寫得比較草率,今天我們建立一個完整的類別。
package tw.grass.rental_crawler.listener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
public class DiscordBotListener extends ListenerAdapter {
Logger log = LoggerFactory.getLogger(ListenerAdapter.class);
@Override
public void onMessageReceived(MessageReceivedEvent event) {
// 過濾掉機器人傳送的訊息
if (event.getAuthor().isBot())
return;
String message = event.getMessage().getContentRaw();
if (message.startsWith("!")) {
log.info("收到指令: {}", message);
// 這裡可以加入解析指令的邏輯
}
}
}
說明:這段程式碼展示了如何透過JDA接收用戶的文字訊息。 onMessageReceived 方法會捕捉所有的訊息,包含機器人輸入的訊息,所以先過濾掉機器人傳送的訊息。之後會篩選以 ! 開頭的指令,因為這是我們的bot命令前綴。
輸入訊息
程式的Log
打開設定後,就可以查看自己的使用者ID了
而Channel ID則是:
程式碼的實作則是只要從MessageReceivedEven裡面取得即可,加上getChannel().getId()及getAuthor().getId()。
@Override
public void onMessageReceived(MessageReceivedEvent event) {
// 過濾掉機器人傳送的訊息
if (event.getAuthor().isBot())
return;
String message = event.getMessage().getContentRaw();
if (message.startsWith("!")) {
log.info("收到指令: {}", message);
String channelId = event.getChannel().getId();
log.info("所在頻道為: {}", channelId);
String userId = event.getAuthor().getId();
log.info("下指令者為: {}", userId);
// 這裡可以加入解析指令的邏輯
}
}
今天完成將昨天的DiscordBotListener進行了優化,並且取得了使用者ID及Channel ID,明天會試著讓DiscordBot傳送一些訊息。