用 Heroku 託管 Discord bot

Rogerh.eth
誌瓜筆記
Published in
9 min readDec 17, 2019

前言

要求

正式開始前,我必須先聲明本篇教程的內容需要讀者有一定的基礎與先前的準備,我會提供連結讓讀者能夠順利完成這些要求:

💡如果沒有 Discord, Github, Heroku 帳號的讀者,請分別到以上前三個網站申請帳號。

完成以上要求後,現在讀者手邊應該備齊了 Discord、Github、Heroku 的帳號以及一個能夠在本地端運行且使用 node.js 開發的 Discord Bot,接著,我們可以進入教程,我將會透過一個個詳細的步驟帶領讀者將 Discord Bot 免費託管到 Heroku,讓其能夠保持 24/7 每天自動運行。

Heroku 簡介

首先我們先來簡單介紹 Heroku 是什麼?我們又應該如何使用?

Heroku 是一個能夠幫助開發者將應用程式佈建於他所提供的伺服器,能夠幫助我們將應用程式保持運行的狀態,而 Discord Bot 便是一個實際的應用例子。

Heroku Command Line Interface(CLI)讓開發者能夠使用終端機來操作託管於 Heroku 的應用程式,對於開發者來說,若希望能更方便且準確的管理與創建應用程式,使用 CLI 是非常好的選擇。

本篇教程將會帶您安裝 CLI 並佈建使用其的環境,在此之前,讀者必須對 git 有一定程度的瞭解(至少要知道 add, commit, branch, push 等名詞的涵義與用法),如此才能順利的完成接下來的教程。

Heroku CLI 環境部署

在終端機輸入以下指令便能成功安裝 Heroku:

$ brew tap heroku/brew && brew install heroku

接著需要認證您 Heroku 的版本,輸入以下指令來查看:

$ heroku --version
heroku/7.33.3 darwin-x64 node-v11.14.0

運行後會輸出 heroku/version ... ,如果沒有的話,您的系統可能使用到 heroku 的舊版本,可以選擇輸入以下指令刪除所有版本,再重新安裝一次 heroku:

$ gem uninstall heroku --all

完成安裝後,接著輸入以下指令來登入 heroku:

$ heroku login
heroku: Press any key to open up the browser to login or q to exit:
Opening browser to <https://cli-auth.heroku.com/auth/browser/862629fc-463c-4f02-aab9-89e980e202d8>
Logging in... done
Logged in as xxx@gmail.com

妳會被引導至 Heroku 的網站來完成登入,登入完成後會輸出 Logged in as xxx@gmail.com

現在讀者已經做好了創建應用程式的準備,將終端機的作業位置移動至您要創立應用程式的部分,並輸入以下指令便可以創建妳的第一個 Heroku 應用程式:

$ cd ~/myapp
$ heroku create

當讀者看到以下輸出便表示完成了 heroku 環境建置且創建了一個專案,接下來讀者就可以將您的應用程式佈建於 Heroku 上,讓應用程式保持 24/7 運行。

應用程式佈建準備

點擊 [documention] 便會看到以下畫面,選擇你的應用程式的開發語言,由於我的 Discord bot 是以 Node.js 開發,所以選擇 [Node.js],然後會出現許多教學文件。

如果讀者是想嘗試先佈置一個已經準備好佈置相關代碼庫的應用程式,可以輸入以下指令下載 Heroku 的範例:

$ git clone <https://github.com/heroku/node-js-getting-started.git>
$ cd node-js-getting-started

選擇此方式的可以直接跳到下一小節。

或者您可以選擇佈建自己的應用程式,但需要跟著以下步驟做一些準備:

Step1

將應用程式的代碼庫提交至 Git Repository,這邊就不多做說明,如果有問題的人可以參考 用 Sourcetree 實現基礎版本管控

💡上傳前需要注意你的 bot token 是否利用 .env 的相關 library 認證,並將其放置於 .gitignore 中,如若不是,token 將會被公開,而 Discord 官方會自動更改你的 bot token。如果對此不熟悉的讀者,可以參考:避免洩露 Token 的方式

Step2

輸入以下指令添加 Heroku Git remote,每個 Heroku 應用程式都會有自己的 Heroku-hosted Git repo,如此便能在變更新版本的同時,也能連接到 Heroku :

$ heroku git:remote -a your-project-id
## 將 "your-project-id" 替換為您的專案 id
set git remote heroku to <https://git.heroku.com/id.git>

添加完成後,系統會將 Heroku Remote 默認為 heroku ,讀者可以輸入以下指令來更改名稱:

$ git remote rename heroku heroku-staging

如此便能幫助讀者管理您的 Heroku 應用程式。

Step3

接著,輸入以下指令將資料由本地端 repository 的分支推送至 heroku remote ,如此便能將應用程式部署於 Heroku:

$ git push heroku master
## 將 "heroku" 要修改為您上面 rename 的名稱

此後當讀者要將修改 Discord Bot 版本或是做一點小修正,都是在本地端直接編碼後再 push 到 heroku remote ,而方法同以上指令。

Step4

完成部署後,可以輸入以下指令來確保至少有一個應用程式的實體在運行:

$ heroku ps:scale web-1
Scaling dynos... done, now running web at 0:Free

接著,便可以輸入以下指令運行您的 Heroku app:

$ heroku open

如果開啟後看到 application error 的畫面是正常的,因為我們還沒有完成架設,所以可以暫時擱置。

Step5

在本地端電腦運行應用程式,您可以呼叫(listen)任何公開、為保存的接口(port),但若想在 Heroku 上運行,必須呼叫特定接口。

這個特定接口會被 PORT 環境變數指定,當您的網路伺服器在 Heroku 上運行時,確保 PORT 環境變數指定到正確的 port number:

heroku config:set PORT=8000

新增 Package.json

接著,新增一個 package.json 檔案,參考內容如下:

{  "name": "Example",  "description": "Example",  "version": "0.0.0",  "main": "bot.js",  "scripts": {    "start": "node bot.js"  },  "dependencies": {    "discord.js": "11.1.0",    "request": "2.81.0"  }}

其中 namedescription 可以依照自己的 discord bot 設定來填,比較需要注意的是 dependencies 務必加上 bot.js 中使用到的 library,如果讀者只有使用到 discord.js 這個 library,那依照上面的內容即可。

如若讀者有使用到其他 library,在終端的工作區位置輸入 npm install packagename --save 即可將 library 及其版本輸入到 package.json 中的 "dependencies"。

新增 Procfile

添加一個文字檔,命名為 Procfile ,這個檔案會告訴 Heroku 哪一個指令是運行 app 的指令,會與您手動執行 app 的指令相同,因此該文檔內容如下:

注意 Procfile 的 “P” 是大寫,並且沒有任何副檔名!

web: node bot.js

如果您想要添加一些額外的可以參考以下網址的內容:Learn more about the Procfile

完成以上步驟後,輸入以下指令將本地端的更動更新至 git Repository:

$ git add.
$ git commit -m "Hosting discord.js on Heroku"
$ git push

Heroku 代管

最後,進入 Heroku Dashboard ,選取【Deploy】,並在 Deployment method 部分選取 【Github】,將其連接至你的 Github Repository,並勾選 Automatic Deploy,詳細介面如下圖所示:

在 Resources 的頁面下,將 web 和 worker 的狀態調整為如下所示:

確認你的應用程式會自動運行後,讀者就完成了所有步驟,恭喜你又成功學會了新技能,之後如果想要修改 bot 的內容,只需要在本地端修改再 push 到你的 Git Respository,Heroku 便會自動重啟,是不是很方便呢!

結論

如果讀者能夠依照以上步驟一一完成,並且確認沒有任何錯誤,你的 Discord Bot 便能夠順利保持自動運作,而本篇教程的目標也順利達成了。

相信完成的讀者會藉由操作的過程中學習到許多不同的知識,可能也會遇到許多不同的問題,但如果你能一一克服,將這裡學習到的基礎都融會貫通,會對未來的開發有許多幫助,如果有任何問題都歡迎於底下留言區發表,我會耐心一一解答,恭喜各位又學會了一項技術!

參考資料

The Heroku CLI

用Heroku部屬Messenger機器人(1/3)

Getting Started on Heroku with Node.js

Preparing a Codebase for Heroku Deployment

Why am I seeing “Application Error”?

HOW TO HOST YOUR DISCORD BOT FOR FREE! (Heroku)

--

--

Rogerh.eth
誌瓜筆記

Sharing what i have learned for becoming a great developer.