緣起:
我之前有稍微用 python 測試 discord 機器人,有成功在群組裡讀取使用者的輸入並回應,現在要改用 Node.js 來做,想說順便紀錄一下那時是怎麼設定 Discord API 的。
Disocrd Developer:
官方的連結在這,用你的 Discord 帳號登入,有點忘了登入完後還要再填哪些資料,應該就認證電子信箱之類的,印象中我在這裡沒花什麼時間。註冊成功後,可以到 Developer Portal 的頁面,在 Application 那頁可以新增自己的應用程式。
然後在最下面的是邀請的網址,你可以在瀏覽器輸入,登入自己 Discord 後,可以把機器人拉到你要的群組,你必須是群組的管理員才行
完成後,就可以看到機器人進了你的 Server
Node.js Discord API:
這篇的目標是讓我的機器人先送段文字,我是參考這個文章來做。首先,新增一個你專案的資料夾,然後在資料夾開啟 cmd,輸入 npm init,然後依序輸入它要求的資料,大部份都照著它預設的打就好,不知要打啥的也可以直接按 enter 留白,完成後,你的資料夾下就會多一個 package.json 檔,用來描述你的專案。
用 VS Code 開起來看是長這樣 (我會執行的 js 檔叫 bot) |
再來輸入 npm install discord.js,它會把那些 Node.js 寫 Discord 需要用到的那些套件給裝在你的專案資料夾
這時,你的資料夾下會多個 node_modules 的資料夾,裡面放的就是那些套件,還會有個 package-lock.json 檔,看來是用來描述那些 dependency 用的 (我猜)
這時你再看一下你的 package.json 檔,它會多一些東西
我在專案資料夾下加入一個 bot.js 檔,然後 require discord.js,執行程式如果沒錯的話,就代表剛剛的環境設定是成功的
OK 沒問題 |
機器人上線:
使用 Discord API 寫程式最重要的是,你要有你 APP 的 AccessToken 才能使用 APP,所以我們要先拿到 APP 的 AccessToken。到 Discord Developer,你的 APP 下,選 Bot,一開始應該只有 Reset Token 可以按,按下去後它會生成一個 AcccessToken,把它給記起來
官方是建議我們弄個 auth.json 檔,把我們的 token 值放裡面,再把值從程式裡引入
網路上有些 Nodejs Discord API 的教學都有些過時了,我在跑程式時遇到錯誤,最後只好去看官方的文件,看官方的文件比較準。首先是在 GateWay Intent,你在 create 一個 Client 時要指定它監聽的功能,這裡有介紹,然後這個是每種 intent 有的權限。
如果單純只是要接收到訊息後,回傳固定的文字,那 Client 給這些 Intent 就夠了
我們的 AccessToken 是放在 client.login 裡 |
再來是事件的監聽,我輸入 client.on('message,打到一半時發現
忘了在哪看到的,messageCreate 部份的 callback founction,它傳入的參數有一個欄位叫 channel,我們可以從它來取得發送訊息的那個頻道,然後再呼叫 channel 的 send 方法來傳送訊息
我在找解決辦法時,發現這個文章,他問的問題雖然跟我遇到的不一樣,但我注意到他程式碼有這部份
我看到這行的當下就明白,機器人自己回復的話也會被自己偵測到,所以才會無止盡的回覆下去。看來,我們還能從 message.author 來取得傳訊息的人是誰,那個 bot 是一個 boolean,如果訊息是機器人傳的,那它的值就會是 true。完整程式現在是這樣
測試結果
看來沒問題了,這篇就告一段落了,接下來還要研究更多其它的功能。
YO三小
回覆刪除