緣起:
初試 Discord.js 成功後,我第二步想做的是寫自己的指令,接續這篇。在 Discord 上打一個斜線,它就會跑出指令來讓你選擇,有的還能加上參數之類的,我想要做個類似輸入 /rise_monster "魔物名" 的指令,輸入後,我的機器人就會用爬蟲去抓取相關的資料,然後將結果 (比如圖片、肉質表之類的),傳回 Discord Server 上。
創立 Command 檔案:
它是這樣做的,每個指令跟處理方式都存成一個 js 檔,放在一個叫 commands 的資料夾裡,在向 App 註冊指令、讀取指令時,再用 fs 來動態讀取那些指令的內容,處理 command 跟製作 command js 檔格式的教學在這,我們就先看製作 command js 檔的部份,它長這樣
它放在我們 專案目錄/commands 資料夾裡,它這個指令的名稱叫 ping,所以檔名也要跟它一樣,叫 ping.js,它有用到 module.exports ,跟 node.js 的模組管理有關,我對這東西沒到很明白,這邊有教學。它會用到的是 Discord.js 的 SlashCommandBuilder 物件,setName 是設定指令的名稱,setDescription 是它功能的描述,再來是一個 async 的 callback function,傳的參數是一個 interaction,這裡有 interaction 的介紹,它這邊用 interacation 的 reply 方法來回覆 pong!。
向 APP 註冊 Command:
這裡一樣是寫程式來完成,你可以在你專案下額外新增一個叫 register_command.js 的檔案,並把程式寫在裡面,這部份的教學文章請看這篇,你要複製的是 Guild commands 那章節的程式碼
![]() |
這邊的程式碼 |
需要改的變數值就那個 "clientId" 跟 "guildId",clientId 指的就你 APP 的 id,你可以到 Discord Developer 的 Portal 那邊選擇你的 APP,在 General Information 那邊能看到你 APP 的 id。再來是 guildId,老實說,我一開始忘了 guild 這單字的意思,去查了後才知道是 "公會",也就是你 Discord 上的伺服器啦,那要怎麼得到你伺服器的 id 呢 ?
你到你 Discord 的設定,應用程式設定那邊,點選進階
把開發者模式給啟用
哦對,那個 token 也要改一下,改成我們自己存取 AccessToken 的方式 (auth.json 檔裡的 token)
其實,可以註冊全域的 command,也就是說註冊 command 後,不限定哪個伺服器,只要你的伺服器裡有我們的機器人,都能呼叫那個被註冊的 command。官方的教學文件是說,就把 rest.put 那段改成這樣即可
監聽指令並做回應:
它的實作方式是,在啟動機器人前,先把 commands 資料夾底下的 .js 檔都讀取,並在 client 物件裡新增一個叫 commands 的欄位,它是一個 Collection,可以儲存 key value 對,把每個作為指令的 .js 檔以 "指令名稱" : "指令動作" 存到 client 的 commands 裡
再來讓 client 監聽 interactionCreate 事件,callback function 會傳入一個 ChatInputCommandInteraction 物件,接著就能用它來做一些操作。
從 interaction.client.commands 可以取得我們的命令 Collection, intereaction.commandName 可以取得使用者輸入的指令名稱,然後 Collection 的 get 可以取得 key 對應的 value,如果找不到的話表示指令不存在,有抓到的話可以接著執行指令。
最後執行程式,程式沒問題的話,我們輸入 /ping 送出後,就能看到機器人回應 pong!
沒有留言:
張貼留言