iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0
Software Development

我命由我不由語言 java爬蟲挑戰系列 第 16

java爬蟲挑戰 Day 16 - 實作Discord Bot的基本功能 (1)

  • 分享至 

  • xImage
  •  

Discord bot具備豐富的功能,從音樂播放到遊戲統計追蹤,無所不包。然而,對於我們的591租屋爬蟲推播程式,僅需關注最核心的幾個功能:接收文字取得使用者的ID取得頻道的ID傳送文字、以及標記使用者。這些功能足以滿足我們自動化推播的需求,並簡化整體開發流程。

實作與說明

昨天的Listener寫得比較草率,今天我們建立一個完整的類別。

DiscordBotListener 接收文字

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命令前綴。

DiscordBotRunner 改用新的類別

https://ithelp.ithome.com.tw/upload/images/20240902/201686355fWqH5Mc6x.png

展示

輸入訊息
https://ithelp.ithome.com.tw/upload/images/20240902/20168635sTlNrUdpxF.png

程式的Log
https://ithelp.ithome.com.tw/upload/images/20240902/20168635rCpsdXrzfU.png

取得使用者ID及Channel ID

使用Discord查看使用者ID及Channel ID

  1. 前往Discord設定頁面
    https://ithelp.ithome.com.tw/upload/images/20240902/20168635913XkrRDQf.png
  2. 點擊按鈕打開設定
    https://ithelp.ithome.com.tw/upload/images/20240902/20168635RWStgYwb0f.png

打開設定後,就可以查看自己的使用者ID了
https://ithelp.ithome.com.tw/upload/images/20240902/20168635kY20H9oEXL.png

而Channel ID則是:
https://ithelp.ithome.com.tw/upload/images/20240902/20168635P4jJOz4YSa.png

DiscordBotListener

程式碼的實作則是只要從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);
        // 這裡可以加入解析指令的邏輯
    }
}

展示

https://ithelp.ithome.com.tw/upload/images/20240902/20168635hJ6PghyJ7N.png

https://ithelp.ithome.com.tw/upload/images/20240902/20168635T3eM7ho3FB.png

git現狀

https://ithelp.ithome.com.tw/upload/images/20240902/20168635EVKYZc6clw.png

小結

今天完成將昨天的DiscordBotListener進行了優化,並且取得了使用者ID及Channel ID,明天會試著讓DiscordBot傳送一些訊息。


上一篇
java爬蟲挑戰 Day 15 - Java Discord API (JDA) 導入
下一篇
java爬蟲挑戰 Day 17 - 實作Discord Bot的基本功能 (2)
系列文
我命由我不由語言 java爬蟲挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言