iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
8
AI & Data

用Node.js製作後台零負擔的DiscordBot系列 第 4

Day4 - 機器人的家

以下文章已於 2021/09/16 轉移至 微笑之家
對於discord.js更新,或是有其他問題,都歡迎到以下網址查看喔
本站
本主題
本文章


昨天我們成功創建了自己的機器人並且加入群組

4-1

可是機器人加入後怎麼都在睡覺,我怎麼找不到地方操作呢?

那是因為我們昨天做的事情是在Discord申請一個機器人帳戶而已~
就像我們的Discord帳戶需要透過Discord登入,Bot其實也需要登入喔

不過Bot的登入路口是要”自己寫”的,今天我們就來叫機器人起床吧!


環境安裝

首先請確保你已經安裝

Node.js
安裝教學

Node.js是我們機器人會使用到的後端語言
Node.js屬於弱型別語言,相較於其他語言,Node.js編譯前的限制較少,寫起來通常會感到較為自由
不過如果對於自己寫的東西不夠了解,弱型別語言並不一定能幫你抓出問題,導致你的問題直到實際運行時才會發生;
所以使用Node.js時、知道自己寫的東西具備甚麼效果是重要的

VSCode
下載路徑
中文化教學

VSCode是筆者愛用的編輯器
VSCode本身體積很小,同時又支援許多的擴充套件,上面的中文化教學正是其中之一
因此VSCode可以輕鬆的做到客製化,且不改變他的體積簡約。

如果同學們原本就有在使用的編輯器,VSCode可以跳過不安裝


蓋一個機器人的家

首先我們要先替機器人做一個”家”,我們先在自己喜歡的地方建一個資料夾,名字先取作DiscordBot就可以了

4-2

一個機器人的家裡面,我們基本需要…
機器人的工具箱(node_modules)
機器人與工具箱的說明書(package.json)
一隻機器人本體(bot.js)
門牌號碼(auth.json)
4-3

像這樣子
(看到package-lock.json是你業障重,別刪掉也別管他)

其中,node_modules跟package.json是透過node.js自動生成的,要生成這兩個東西,我們需要先在DiscordBot這個資料夾打開vscode

4-4
4-5

成功的話,左邊的路徑就會顯示資料夾名稱喔!
然後選擇上方的開啟終端機->新增終端
確認終端上面顯示的路徑是正確的後,在終端上面鍵入npm init

4-6

這是node的初始化行為
會要你輸入一些關於這個project的基本資料,之後輸出在package.json

4-7

就像這樣!

然後我們再手動創建bot.js檔與auth.json檔

4-8

4-9

如果說bot.js是機器人的本體,那auth.json就是機器人的內部授權碼
auth.json裡面的key代表的是機器人的啟動鑰匙,把鑰匙插進對應的地方才能啟動(有找到bot.js裡面有一行auth.key嗎?)

這邊我們把昨天在bot頁存下來的key放到your key value裡面,注意不要刪掉””

兩個檔案都創建好後記得存檔,我們回到終端機輸入
npm install discord.js

4-10

4-11

輸入 npm install discord.js後,node.js就會幫我們安裝discord.js這個工具
然後把檔案放在node_modules裡面,再到package.json底下紀錄我們使用了哪些工具

沒問題的話,最後我們在終端機輸入node bot

4-12

4-13

成功!明天我們會再針對今天的程式碼做講解


上一篇
Day3 - 你自己的...他叫甚麼名字?
下一篇
Day5 - 函式庫文檔與基本範例講解
系列文
用Node.js製作後台零負擔的DiscordBot31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
wifon
iT邦新手 5 級 ‧ 2020-12-07 23:04:05

請問上面的門牌號碼要去哪裡弄?

微笑 iT邦研究生 5 級 ‧ 2020-12-08 09:25:23 檢舉

昨天在Discord developers創建機器人時
Bot頁有一個Token,底下有個copy按鈕
點下去後就會把門牌號碼給你了喔,要記得存下來,放在這邊的auth.json裡面

0
wifon
iT邦新手 5 級 ‧ 2020-12-08 11:24:04

第4天的做完顯示這樣,為什麼一關掉VSC機器人就自動離線了?

微笑 iT邦研究生 5 級 ‧ 2020-12-08 15:01:10 檢舉

他說你的bot.js 第八行有問題
可以確定一下第八行的console.log(xxx);
1.最後面有沒有補上 ;
2.console.log()括弧中間確實有資料
3.附近的語法是否正確
4.重開機看看
因為console.log屬於js原生指令,語法正確的情況,重開機大概率可以解決此問題

建議路徑上不要有中文(你有一個資料夾叫做機器人)

因為當你執行bot.js時,bot.js就等同是在運作的機器人
關掉了程序、機器人自然也就不會有反應囉

wifon iT邦新手 5 級 ‧ 2020-12-08 22:54:39 檢舉

要怎麼讓機器人一直在線上呢?

0
wifon
iT邦新手 5 級 ‧ 2020-12-09 12:01:55
wifon iT邦新手 5 級 ‧ 2020-12-09 16:11:34 檢舉

抱歉,現在才發現DAY14的教學

1
wen648
iT邦新手 5 級 ‧ 2021-02-04 01:27:36

請問一下,這該怎麼解決?https://ithelp.ithome.com.tw/upload/images/20210204/20134948xPLxBl7ZD4.png

微笑 iT邦研究生 5 級 ‧ 2021-02-04 09:18:19 檢舉

你的常數宣告是config
const config = new Discord.Client();

所以client.login應該改成config.login
或是反過來,把config改回client,因為你下面都是用client做調用的

vsCode對已宣告但未使用的變數,顯示顏色會比較淡
之後有看到其他變數像現在的config一樣特別暗的話,有可能就是設置錯誤了喔

wen648 iT邦新手 5 級 ‧ 2021-02-04 11:14:02 檢舉

好的,把config改成client就可以了,感謝幫忙

微笑 iT邦研究生 5 級 ‧ 2021-02-04 16:41:53 檢舉

加油喔/images/emoticon/emoticon37.gif

2
luke0216
iT邦新手 5 級 ‧ 2021-08-06 12:06:32

請問一下這該怎麼辦ouohttps://ithelp.ithome.com.tw/upload/images/20210806/20140322APyrQQtJtJ.png

luke0216 iT邦新手 5 級 ‧ 2021-08-06 13:52:52 檢舉

這是我第一次學DC機器人

微笑 iT邦研究生 5 級 ‧ 2021-08-06 14:38:46 檢舉

"main": "bot.js" 後面要有一個 ,

luke0216 iT邦新手 5 級 ‧ 2021-08-06 18:03:45 檢舉

啊啊啊我竟然沒看到XD
謝謝

2
luke0216
iT邦新手 5 級 ‧ 2021-08-06 20:38:46

可以再請教你一下為甚麼終端輸入node bot之後會出現這個該怎麼解決嗎?
https://ithelp.ithome.com.tw/upload/images/20210806/20140322n8lQxAE89I.png

luke0216 iT邦新手 5 級 ‧ 2021-08-07 11:33:45 檢舉

喔耶可以了XD

cubeeseal iT邦新手 5 級 ‧ 2021-08-26 11:25:02 檢舉

請問一下 你是如何解決的? 我也卡在這個部分

1
awwwolf
iT邦新手 5 級 ‧ 2021-08-20 01:10:10

請問一下,這個怎麼處理? QAQ
https://ithelp.ithome.com.tw/upload/images/20210820/201408333p2yT94dJi.png

看更多先前的回應...收起先前的回應...
微笑 iT邦研究生 5 級 ‧ 2021-08-20 09:55:16 檢舉

你沒遇到問題
你可以看最後三行,意思是他幫你裝了discord.js,花了多久

awwwolf iT邦新手 5 級 ‧ 2021-08-20 12:24:23 檢舉

再問一下,我輸入node bot之後出現這個狀況,且機器人沒有被喚醒,這要怎麼處理?
https://ithelp.ithome.com.tw/upload/images/20210820/20140833CnNXlriDn8.png

微笑 iT邦研究生 5 級 ‧ 2021-08-20 20:30:10 檢舉

我猜想原因是13版的discord.js,再度改寫了許多實例

const { Client, Intents } = require('discord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS] });

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

client.on('interactionCreate', async interaction => {
  if (!interaction.isCommand()) return;

  if (interaction.commandName === 'ping') {
    await interaction.reply('Pong!');
  }
});

client.login('token');

以上是截至官方文件的範例
可以看到宣告方法變了很多,如果要使用本教學的話建議以discord.js 12版為準

awwwolf iT邦新手 5 級 ‧ 2021-08-21 00:24:21 檢舉

好的謝謝

0
cubeeseal
iT邦新手 5 級 ‧ 2021-08-22 17:53:07

https://ithelp.ithome.com.tw/upload/images/20210822/20140894BlQIQYzFL4.png
請問一下 打完node bot之後出現這串怎麼處理

0
棕熊
iT邦新手 5 級 ‧ 2021-12-04 14:29:06

微笑您好,我依照您的文章,在終端機輸入了 npm init的指令,但是當我將後來系統提供的程式碼貼上後,卻出現這個問題(如圖)!https://ithelp.ithome.com.tw/upload/images/20211204/20144427GCGnCojGnR.png
系統偵測到一堆錯誤,請問該如何解決?另外,因為我使用的是較新版本的VSCode,因此終端機所要我輸入的資訊似乎不同於您的文章所寫的,請問我又該保留哪些系統跑出來的資訊呢?是全部複製貼上嗎?還是有其他作法?(圖片所示是我全部複製貼上之後)

微笑 iT邦研究生 5 級 ‧ 2021-12-06 14:25:09 檢舉

搬運一下後來樓主得到的解答

0
Zeyrox
iT邦新手 5 級 ‧ 2023-03-18 20:04:48

請問這個狀況怎麼處理?
https://ithelp.ithome.com.tw/upload/images/20230318/20158839BpX87J0LVP.png

微笑 iT邦研究生 5 級 ‧ 2023-04-26 19:45:07 檢舉

他說找不到auth.json,檢查一下根目錄下是否有創件這個檔案

我要留言

立即登入留言