切換
舊版
前往
大廳
主題

用萬能的樹莓派實現24h Discord Bot(Python)

PoiPoi | 2020-08-02 20:12:00 | 巴幣 2006 | 人氣 1686

前言

從我開始寫Discord Bot的時候,就一直缺少一個能讓程式24h運行的平台。由於Bot功能較多,沒辦法在雲端服務上部屬,最後只好找上樹莓派當作主機,因此近期購買了4B版本來實現我的需求。

Raspberry Pi 4 model B 4GB ver《技術規格》
* Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit SoC @ 1.5GHz
* 4GB LPDDR4-3200 SDRAM
* CYW43455 2.4 GHz/5.0 GHz IEEE 802.11ac wireless, Bluetooth 5.0, BLE
* Gigabit Ethernet
* 2x USB 3.0 ports; 2x USB 2.0 ports.
* Raspberry Pi standard 40 pin GPIO header
* 2 × micro-HDMI ports (up to 4kp60 supported)
* 2-lane MIPI DSI display port
* 2-lane MIPI CSI camera port
* 4-pole stereo audio and composite video port
* 265 (4kp60 decode), H264 (1080p60 decode, 1080p30 encode)
* OpenGL ES 3.0 graphics
* Micro-SD card slot for loading operating system and data storage
* 5V DC via USB-C connector (minimum 3A*)
* 5V DC via GPIO header (minimum 3A*)
* Power over Ethernet (PoE) enabled (requires separate PoE HAT)
* Operating temperature: 0 – 50 degrees C ambient


From 維基百科

正文

1.開機前的準備

由於樹莓派本身沒有自帶儲存裝置,所以我們會需要mircoSD卡作為他的儲存裝置(插槽在電路板背面),而在插入前必須先格式化並灌入作業系統(可參考這裡)。

在安裝OS這方面,我是利用樹莓派官網給的Imager跟Raspberry Pi OS(Raspbian)做安裝,如果不想這麼麻煩也可以用NOOBS,基本上結果是差不多的,但是用前者方法會快得多。

補充:Raspberry Pi OS是基於Debian的作業系統,把他想成Linux(Unbutu)就可以了,當中預裝了一些程式,像是Python跟輕量化版本的Chromium,使用起來算非常順暢。

上述作業完成後,就可以接上螢幕和鍵盤滑鼠準備開機(螢幕接口在這代改用micro HDMI,我只好跑去黃色鬼屋買一條1M的micro HDMI to HDMI,一條就將近500元.... )

2.環境的建置

開機確認過狀況以後,先到樹莓派設定中開啟ssh,再到cmd輸入

sudo apt-get install xrdp

來安裝xrdp,之後我們就可以利用這ssh和Windows的遠端桌面連線來操作樹莓派了(遠端桌面連線控制起來延遲感嚴重,如果需要長期操作建議乖乖接螢幕),另外,預設的使用者(pi)的密碼是raspberry,建議在一開始就改掉。
最後執行

sudo apt-get update
sudo apt-get upgrade

執行完以後發現Python版本還在3.7.3,那就只能接受他了。
再來安裝Visual Studio Code時會出現問題,目前找到最快的解決方法是這個,只要兩條指令就能解決,缺點是更新不像一般VS Code一樣方便,但是不影響我的使用,所以我還是裝了(只靠Vim對我來說實在是太難了)。

MySQL(MariaDB)與phpmyadmin安裝

參考這裡有非常詳盡的介紹,可配合程式儲存資料。

3.部屬Discord Bot

感覺環境都弄的差不多了,接下來就使用Git把原始碼pull下來就好,找個不錯的位置執行(自行替換repository URL)

git clone https://github.com/ppodds/Yue.git

接下來進入該資料夾把該弄的設定和雜務做完(我的路徑為~/Documents/Yue,請依上個步驟放置程式碼的路徑自行替換),再建立Python虛擬環境(Windows跟Linux的虛擬環境應該是不一樣的,推薦上傳時不要把venv的資料夾上傳上去)。

為了建立Python虛擬環境,要執行以下指令(自行替換路徑)

cd ~/Documents/Yue
python3 -m venv venv

稍等一下後就會在程式的目錄建立名稱為venv的虛擬環境資料夾。

補充:第二個venv可自行替換,影響虛擬環境資料夾的名稱。

若要執行程式時,要使用虛擬環境的Python,需要先啟動虛擬環境。執行(路徑自行替換)

source ~/Documents/Yue/venv/bin/activate

之後就會發現cmd的前面多了(venv),代表虛擬環境啟動中(如果是在VS Code中執行Python,如果設定正確就會自動進入venv)。

接下來就該開始安裝需要的套件了,這裡就用pip完成就好

python -m pip install discord.py
python -m pip install PyNaCl
...
...

最後測試執行(路徑自行替換為自己的Bot主程式)

python Bot/Yue.py

如果測試執行無誤的話就可以進行下一步。

4.隨時隨地的控制樹莓派!

說到隨時隨地都在用的電子產品,常常會想到手機,於是我想到要用手機控制樹莓派(有申辦固定IP使用起來會方便的多)。為了不受區域網路限制,要先調整好路由器設定,基本上要動以下兩項。

1.固定樹莓派的區網ip
2.設定外部連入時指向到樹梅派(ip forwarding ,  虛擬伺服器設定)

補充:預設的ssh port是22,沒有特別需求的話就設定22 -> 22

第二項和Minecraft等其他遊戲伺服器設定差不多,可以參考相關文章。

接下來需要在手機安裝ssh軟體,我採用JuiceSSH(軟體繁多大同小異,隨便選一個就好了)。

啟動JuiceSSH,選取快速連線,輸入

pi@ip位址

並輸入密碼就可以用pi的身分連入,使用狀況和cmd沒什麼差別,之後就可以利用ssh對樹莓派做操作了。

補充:在ssh執行的程式,只要ssh中斷連線就會被終止。

5.編寫Shell Script來快速啟動Bot

由於Python的venv啟動起來很麻煩,因此可以編寫腳本來解決問題,執行以下指令(自行替換名稱及路徑)

touch YueLauncher.sh
chmod +x YueLauncher.sh

解釋:建立名為YueLauncher.sh的檔案,並更改為可執行檔

接下來用Vim或是文字編輯器在檔案中加入以下內容(自行替換名稱及路徑)

source ~/Documents/Yue/venv/bin/activate
cd ~/Documents/Yue/
nohup python -W ignore Bot/Yue.py &> Log.txt &

解釋:啟動虛擬環境,在背景下利用Python執行Yue.py,且使用者登出時不關閉程式(包含ssh)

最後,啟動這個腳本來啟動程式(如果已經在家目錄下,不須執行cd,因此可以在剛登入ssh後就立刻執行)

cd ~
./YueLauncher.sh

之後cmd不會有任何提示,但是Bot就會默默啟動了,並且在關閉以後把紀錄丟到目錄裡面的Log.txt裡面。如果要關閉Bot可以從cmd用指令kill掉處理程序,或是在Discord Bot加入關閉或重啟的指令,就可以從Discord客戶端控制。

6.結語

樹莓派有非常多玩法,用來掛Discord Bot只是其中一種,各位有空也可以來玩玩看樹莓派喔!

創作回應

石頭吐司
當然是接顆硬碟拿來抓 BT(X
2020-08-02 22:49:53
PoiPoi
可以(#
2020-08-03 01:04:23
煞氣a野格炸彈
太猛了吧yue
2020-08-02 22:52:07
PoiPoi
菜雞如我弄不出什麼好東西,只好弄一個Bot來玩
2020-08-03 01:04:54

更多創作