本教學文是給三種人:
- 想在 Discord 有訊息內容收藏、書籤功能的人
- 想知道怎麼在最新的 Synology NAS DSM 7.2 Container Manager 部署機器人
- 想知道不會寫程式的人,怎麼全程用問 ChatGPT 把 Discord 機器人建置出來
💬 前言&需求
- 我的身分是內容創作者、Notion 教學講師和生活黑客社群經營者。
- 我們社群使用 Discord 經營已經好一段時間,從最初的 100 多人,到現在已經超過千人。社群的主要定位是探討「數位生活方案」——怎麼讓工作更聰明,讓生活更有掌控感,當然包含各類生活和工作主題;社群算是挺活躍的,平均每一個人一週會發 60 則訊息,根據 Discord 官方所提供的社群活躍平均值,我們每一項都超過 Benchmark。
- 因為我們是以一人公司的模式經營整個品牌,必須去思考怎麼最大幅度的減少人力,能讓工具做的瑣碎事就不要靠人。
- 這次的需求是因為社群成員不斷反應,Discord 裡面有很多好內容,但沒有「收藏功能」,沒辦法像是 Slack 一樣按個星星就能晚點回來看 Inbox,或者建立個人的精華庫,實在不太方便。於是我在 Google 上搜尋「Discord Bookmark」,有出現過一個機器人推薦,雖然可以加入伺服器,但永遠都是下線狀況無法使用:
- 既然別人的 Bookmarker 機器人壞掉了,那我們怎麼不自己打造?我雖然在大學時間有學過一些 Python 皮毛,但幾乎十年沒碰算是完全忘光了,所以這次我盡可能不去自己修程式碼,「全程靠問 ChatGPT」的方式,來把這個 Discord 機器人建置出來!
🔖 「書馬克先生」Discord 訊息收藏機器人展示
- 圖一:當你想收藏某條訊息,只要對該訊息按下
:bookmark:
反應(表情符號)- 圖二:書馬克先生(機器人)就會把這條訊息的內容&連結,發送一則私人訊息給你。
► 「書馬克先生」機器人介紹:
🤖 用 ChatGPT 寫程式、部署 Discord 機器人過程
- 因為我們的需求很簡單明確(對伺服器內的 A 訊息按上表情符號
:bookmark:
後,機器人則傳送一則私人訊息給我,訊息內容就是 A 訊息,以及這條訊息的 Discord 連結網址),所以只要清楚描述這個需求,直接告訴 ChatGPT,它就會列出我該執行的步驟。 - 果不其然,ChatGPT 一聽完我的需求,就立馬給了我一段 Python 程式碼,還有一堆執行步驟:
- 然而,整趟最困難的地方是:
- 「我該怎麼在 Discord 上建立機器人?」
- 「選擇部屬在哪個平台來運行(或者用我家的 NAS 虛擬機?)」
- 「怎麼試錯?將機器人的效果,程式碼迭代優化成我想要的模樣?」
- 第一個問題它會直接給你 Discord Developer Portal 的網址,並告訴你步驟,以及點哪些地方來建立你的機器人,取得 API Token,這部分大概只花我 5 分鐘,是最簡單的環節 ✅。
- 接下來就開始困難了,ChatGPT 告訴我該怎麼使用 Glitch 這個網頁服務來部署我的 Python 程式碼,甚至用文字來引導我該按下畫面上的哪一個鈕來檢查錯誤,但它可能不知道 Glitch 的 UI 介面有改,畢竟它的資料庫不是最新,是 2021 年,所以有些提示不在它所說的方位,需要一點時間自己去找。
- 把程式碼成功部署後,我遇到最大的問題是
{message.content}
一直出現錯誤,雖然整個程式運行正確,但機器人就是抓不出原有的訊息內容,回傳空白的內容給我。我不斷換方式問 ChatGPT 怎麼修正並把錯誤訊息貼給它,但它告訴我的方式卻不正確、無法使用。(我猜也是因為資料庫是 2021 年,而這兩年多 Discord 的隱私權政策有改) - 本來我打算要放棄了,因為時間有點晚了,用最後一絲精神力來地毯式逛逛 Discord Bot 的設定頁面,結果發現是
Server Members Intent
的關係,有些訪問權限沒有打開!原來是一開始最簡單的步驟,完全沒有自己去瞭解頁面,只靠 ChatGPT 指示我的方式去做,所以漏掉了一些它不知道的權限。 - 最終成功誕生了我們的「書馬克先生」,再用 Midjourney,Blend 了兩張圖片(收藏星星&機器人頭像)為它製作了一個符合形象的頭像,看起來直接人模人樣,質感 UPUP 😆
※ 關於此收藏機器人的程式碼(bot.py),放在文末
🥹 DSM 7.2 更新後 Docker 無法使用,改用 Container Manager 部署機器人
機器人上線一天後,發現免費版本的 Glitch 會因為程式碼一段時間沒運行就自動下線,所以當我們伺服器半夜都沒人使用 :bookmark:
功能的時候,我隔天早上起床還要到 Glitch 重啟這個程式,實在太麻煩。
所以我後來把整個程式碼部署在我家的 Synology NAS DS1522+ 的 Docker 上,就可以完全不用動它,大成功 🥳。
然而…喜悅總是短暫。在 5/31 時,我將 NAS 的作業系統 DSM 更新到 7.2,原有的 Docker 已被淘汰無法使用,必須轉移到新的 Container Manager,於是我們的書馬克先生直接離線掰掰,我又開始了跟 ChatGPT 來一段機器人修復之旅。
因為 ChatGPT 的資料只有到 2021,而 Container Manager 是 Synology NAS 2023.05 才推出的新工具,GPT 完全不知道這是啥東西,所以讓我這個程式小白搞超久頭超痛,讓我直接下結論:
- 原本在 Docker 裡的項目,會直接轉成 Container Manager 裡面的「容器」,雖然顯示「運行正常」但機器人會處於離線狀態。
- 因為網路上基本上查不到 Container Manager 的應用教學,所以即便使用 GPT-4 的 Web Browse Plugins ChatGPT 還是會一直繞圈圈告訴你用 Docker,但 DSM 7.2 無法使用 Docker,我後來在這上面搞了 4 個多小時才弄懂問題出在哪。
- 我們不能用它預設的容器,可以直接刪掉,重新建一個「專案」,映像檔選
python:latest
,接著我們需要寫一個yaml
檔案告訴這個專案的存放路徑,以及要執行的命令。這樣一來,容器會隨著你成功建立專案而產生,並開始運行整個程式碼。 - 其實長期來看用 yaml 來維護整個程式碼是更好的,更簡單明瞭,而且 Home Assistant 也是同邏輯,學一件事兩邊運用。但因為剛改版 ChatGPT 找不到任何有效資料,對於我們這種程式小白真的有夠困擾,但學完就是你的了。
✅ 感謝你看到這邊,以此文記錄著我和 ChatGPT 共同努力奮鬥約 10 個小時的簡要過程。
活用 ChatGPT 讓我們這種非專業人士,也能靠自己寫出自己需求的機器人,我也樂於其中。前陣子也寫了一個 Telegram Bot,能把 Telegram 的訊息一鍵傳到 Readwise。
在這提供給所有需要的朋友,這個 Discord 內容收藏機器人,所需要的兩個檔案(bot.py
、requirements.txt
),以及建立在 Synology NAS 的 Docker-compose.yml:點此前往 Notion 文檔