在 GitHub 上有一位台灣網友 LD,分享了一段開源程式碼,能夠讓特定的 Discord 文字頻道和特定的 Line 群組做訊息同步,做到在 Discord 發佈訊息能夠在 Line 被看見,同時在 Line 發佈訊息也能夠在 Discord 被看見。
雖然 LD 在 GitHub 上的操作步驟已經寫的很詳細了,但是中間有跳過一些步驟,導致沒有任何程式背景的我還是摸索了大概 4 個多小時才在各種嘗試中實作成功,這篇文章我會詳細的把所有操作過程中所需的步驟分享出來,希望讓大家也可以照著步驟實現 Discord 和 Line 訊息同步的功能。
Discord 和 Line 訊息同步功能說明
目前能夠同步的內容,只有包含文字、圖片檔、影片檔以及音檔。
其他像是貼圖和 GIF 或是其他種類的檔案目前尚無法同步。
Discord 和 Line 訊息同步所需設定
要將這一整個訊息同步機制設定完成,涉及到 7 種不同部分的設定:
- Discord 伺服器
- Discord Bot(機器人)
- Line 群組
- Lline Bot(機器人)
- Line Notify
- Ngrok
- 此開源專案的 config.yml 文檔修改
需要先把前面 6 個部分都設定完成後,才能取得所有第 7 部分設定所需要的資訊,我個人在參考 GitHub 說明文檔進行操作時,卡關最久的是在第 6 部分的 Ngrok。
第 1 部分:Discord 伺服器
為了達到同步訊息的目的,需要先選定一個想要與 Line 同步訊息的 Discord 文字頻道,因為會涉及到 Discord 機器人的邀請,在自己的 Discord 伺服器操作是最方便的,關於 Discord 伺服器的創建可以參考此篇如何新增、創建 Discord 伺服器。
第 2 部分:Discord Bot(機器人)
在同步訊息的過程中,在 Discord 這一端,需要自製一個 Discord 機器人。
所需的操作步驟如下:
步驟 1:登入 Discord Developer Portal
使用自己的 Discord 帳號登入 Discord Developer Portal。
步驟 2:創建新的 Discord 機器人
點選畫面右上角的「New Application」按鈕。
需要先幫新的 Discord 機器人命名,建議取名為「Line 訊息」,當然也可以取成任何想要的名稱,然後勾選同意名稱下方的使用條款,接著按下「Create」(創建)。
點選「New Application 」按鈕
步驟 3:Discord 機器人設定及邀請至伺服器中
替 Discord 機器人命名完成以後,會進入到 Discord 機器人的設定選單。
完成機器人命名
先選擇「Bot」,然後往下找到「Presence Intent」、「Server Members Intent」及 「Message Content Intent」這 3 個選項,接著全部打勾。
「Presence Intent」、開啟「Server Members Intent」及 「Message Content Intent」選項
接下來切換到「OAuth2」選項,先勾選「Bot」,然後勾選「Administrator」(管理者權限)。
這邊的設定,是在邀請這個機器人進 Discord 伺服器的時候,所需要預先給予的權限,因為是自己創建的機器人,為了方便起見,直接給予 Discord 的最高權限「管理者」,可以避免後續操作的時候,因為機器人權限不足而產生錯誤的可能性。
設定邀請機器人加入伺服器前預先要求的權限
接著在往畫面下方滑動,可以看到有系統產生的一組「GENERATED URL」,使用這組連結就可以將這個新創鍵的 Discord 機器人邀請到你所管理的 Discord 伺服器。
複製機器人的邀請連結
步驟 4:取得 Discord 機器人的 Bot token
在 Discord 機器人的設定選單選擇「Bot」之後,可以在「Build-A-Bot」的這個區塊看到 Token,第一次點擊「Reset Token」就可以取得在第 7 部分 config.yml 文檔修改所需的 Discord 的 bot_token。
取得 Discord 機器人的 Bot token
第 3 部分:Line 群組
為了達到同步訊息的目的,需要先選定一個想要與 Discord 同步訊息的 Line 群組。
可以創建一個多人群組,或是創建「一人群組」,不過目前 Line 只允許每個帳號創建一個「一人群組」。創建的方式是在,選擇好友的階段不選擇任何人,直接按「下一步」,如此以來就可以創建一個只有自己一個人的 Line 群組。
第 4 部分:Lline Bot(機器人)
在同步訊息的過程中,在 Line 這一端,需要自製一個 Line 機器人以及 Line Notify(說明在第 5 部分)。
由於步驟 5 有一項資訊: Webhook URL,必須要先完成第 6 部分才能夠取得,可以先完成第 6 部分的步驟再回來設定這個部分。
所需的操作步驟如下:
步驟 1:登入 Line Developers
使用自己的 Line 帳號登入 Line Developers 。
步驟 2:創建新的開發者帳號
如果還沒有擁有 Line Developer 帳號的話,需要先創建一個。輸入名稱、填寫信箱並且勾選同意使用者條款即可創建。
創建新的開發者帳號
步驟 3:創建新的 Provider
進入 Line Developer 操作介面之後,點選「Create a new provider」進行創建。
創建新的 Provider
填寫 Provider 名稱,然後按下 Create 即可完成創建。
完成 Provider 創建
步驟 4:創建新的 Messaging API channel
接著會進入到 Provider 操作介面,選擇「Create a Messaging API channel」進行創建。
創建 Messaging API channel
填寫一系列 Messaging API channel 所需要的資訊,除了倒數 2 項的選填欄位之外,所有的欄位都不能是空白的:
- Channel Type: 設定為 Messaging API
- Provider: 填寫供應者的名稱(這個不是機器人的名稱)
- Company or owner’s country or region: 填寫公司或個人所在國家/地區
- Channel Name: 替這個機器人命名(會顯示為這個機器人的名稱)
- Channel description: 為這個機器人寫下一段描述(自己看的懂就可以)
- Category: 選擇這個機器人的類別(自行填寫適合的類別)
- Subcategory: 選擇這個機器人的子類別(自行填寫適合的子類別)
- Email address: 有重要更新資訊的時候會收到通知的信箱
- Privacy policy URL: 隱私政策的網址,此為選填資訊,可以空白
- Terms of use URL: 使用者條款的網址,此為選填資訊,可以空白
填寫完以上資訊之後,最後需要勾選同意 2 個使用者條款,接著按下「Create」即可創建 Lline 機器人。
步驟 5:Line 機器人設定(包含 Webhook URL 設定)
在 Line 機器人(Messaging API channel) 的主選單中,先前往 Basic settings 頁面,將 LINE Official Account features 下方的「Allow bot to join group chats」(允許機器人加入群組聊天)選項調整為「enabled」(啟用),並將「Auto-reply messages」(自動回覆訊息)選項調整為「Disabled」(不啟用)。
前往 Basic settings 頁面
調整選項
我們可以在第 6 部分的步驟 6 獲得「Webhook URL」,接著在 Basic settings 頁面的上方的「Webhook settings」的部分修改「Webhook URL」,並在尾端加上 /callback
在 Webhook URL 尾端加上 /callback
步驟 6:取得 Line 機器人的 channel secret 和 channel access token
在 Line 機器人(Messaging API channel) 的主選單中,可以取得在第 7 部分 config.yml 文檔修改所需的 channel secret 和 channel access token。
- 在 Basic settings 頁面的下方,可以找到「channel secret」。
前往 Basic settings 頁面
- 在 Message API 頁面的下方,可以找到「channel access token」 ,第一次需要先點擊「Issue」按鈕,才會生成一組新的 channel access token。
前往 Message API 頁面
第 5 部分:Line Notify
在同步訊息的過程中,在 Line 這一端,需要自製一個 Line 機器人(說明在第 4 部分)以及 Line Notify。
由於有一項資訊: Webhook URL,必須要先完成第 6 部分才能夠取得,可以先完成第 6 部分的步驟再回來設定這個部分。
步驟 1:登入 Line Notify
使用自己的 Line 帳號登入 Line Notify。
步驟 2:登錄服務
創建新的服務(Line Notify),填寫以下資訊:
- 服務名稱: 建議填寫的名稱為【Discord訊息】,也可以填寫其他容易辨識的名稱
- 服務概要: 為這個服務寫下一段描述(自己看的懂就可以)
- 服務網址: 填寫所屬公司或個人的網址,這部分填寫的資訊不會影響功能
- 企業/經營者名稱: 填寫所屬公司或個人的名稱
- 負責人姓名: 填寫個人姓名
- 電子郵件帳號: 填寫公司或個人的電子郵件
- Callback URL: 輸入在第 6 部分步驟 6 會獲得的 Webhook URL,並在尾端加上 /notify
以上資訊都填寫完以後,選擇「同意並前往下一步」,照著指示完成「登錄服務」的設定。
步驟 3:取得 Line Notify 的 Client ID 及 Client Secret
「登錄服務」完成後,即可在服務的最上方 2 行的資訊找到 Client ID 及 Client Secret,這也是在第 7 部分 config.yml 文檔修改所需的資訊。
第 6 部分:Ngrok
Ngrok 是一個轉服伺服器的服務,透過 Ngrok 取得的 Webhook URL 是能夠讓 Discord 和 Line 訊息同步能夠運作的最關鍵要素,只要使用免費版的 Ngrok 即可達成這篇文章說明的訊息同步效果。如果你不明白 Webhook 的原理,可以參考這一篇前半部的說明:Webhook 是什麼?
步驟 1:註冊 Ngrok 帳號
首先到 Ngrok 官網註冊一個新的帳號。
步驟 2:建立新的網域名稱
接著在網域儀表版頁面創建一個新的網域名稱,點選畫面右上的「+ New Domain」按鈕,接著系統會生成一個隨機的網域,外觀會長成這個樣子「XXXXX.ngrok-free.app」,XXXXX 的部分會是系統隨機給予的英文字串。
點選畫面右上的「 + New Domain」按鈕
步驟 3:下載最新版本的 Ngrok 程式
到 Ngrok 官網下載頁面下載 Ngrok 程式,載下來會是一個壓縮檔案,裡面只有一個 Ngrok 執行檔(是一個 .exe 檔案),把執行檔進行解壓縮。
步驟 4:安裝並啟動 Ngrok 程式
接著到網域的操作首頁,開啟「Setup & Installation」這個選項,然後選擇「Download」,因為我使用的是 Windows,因此接下來都以 Windows 的步驟做說明。
選擇對應你使用電腦的位元數(64 位元或 32 位元),然後可以在下方第 1 排的「Run the following command to add your authtoken to the default ngrok.yml configuration file.」下方看到一串代碼,先把這串代碼複製起來。
複製預設代碼
接著開啟 Ngrok 執行檔,然後把上面複製的那串代碼貼上,並且按下 enter 鍵進行安裝。
步驟 5:修改 Ngrok config 檔
完成安裝後,接著輸入 ngrok config edit 這段指令(只有 3 個英文單字),會開啟一個文字編輯器。
將原本文字編輯器內所顯示的內容,替換成以下的文字:
authtoken: <your_auth_token>
version: 2
tunnels:
app:
proto: http
hostname: <domain_name>
addr: 127.0.0.1:5000
其中的<your_auth_token>可以在這個 Your Authtoken 的頁面的最上方找到,而<domain_name>則是在「步驟 2:建立新的網域名稱」由系統生成的那個網域名稱。
修改完成後,將這個文字檔進行儲存後關閉。
步驟 6:取得 Ngrok 生成的 Webhook URL
接著上面的步驟,在 Ngrok 執行檔輸入 ngrok start app 這段指令(只有 3 個英文單字),然後在接下來的畫面中,複製 Fowarding 文字後方的 URL,它應該會與你在「步驟 2:建立新的網域名稱」中創建的網域名稱相同。這一段 URL 就是你所需要的 Webhook URL。
第 7 部分:此開源專案的 config.yml 文檔修改及操作
完成前面 6 個部分的所有操作後,你已經備齊所有需要的資訊了,接著讓我們照著 GitHub 上面所寫的步驟走一次所有流程。
步驟 1:下載此開源專案的檔案
先到 Discord-Line-Message-Sync 檔案頁下載最新版本的檔案。
步驟 2:解壓縮檔案並開啟 config.yml 檔案
將下載下來的檔案解壓縮,並開啟其中的 config.yml 檔案。
步驟 3:填寫 config.yml 檔案所需的資訊(以下紅字的部分)
config.yml 檔案一共有 7 個資訊是必須填寫的,原文可以參考 Discord-Line-Message-Sync 專案頁的關於 config.yml。
- bot_owner: 填寫你的名字,此處不可為空白
- webhook_url: 在第 6 部分的步驟 6 所取得的資訊
- channel_access_token: 在第 4 部分的步驟 6 所取得的資訊
- channel_secret: 在第 4 部分的步驟 6 所取得的資訊
- client_id: 在第 5 部分的步驟 3 所取得的資訊
- client_secret: 在第 5 部分的步驟 3 所取得的資訊
- bot_token: 在第 2 部分的步驟 4 所取得的資訊
填寫完以上資訊後,將 config.yml 檔案進行存檔。
步驟 4:運行 run.bat
在步驟 2 解壓縮的檔案裡找到 run.bat 檔案,然後執行它。
請注意如果要讓 Discord 頻道和 Line 群組的訊息同步,你必須一直保持執行 run.bat 檔案的視窗,如果將其關閉,那麼訊息同步將會失效,直到你重新執行 run.bat 檔案。
步驟 5:將對應的機器人邀請至對應的群組中
在 Discord 的部分,需要把在「第 2 部分創建的 Discord 機器人」邀請到「第 1 部分創建的 Discord 伺服器」中,步驟可以參考第 2 部分的步驟 3。
在 Line 的部分需要分別將在「第 4 部分創建的 Line 機器人」以及「Line Notify 」邀請到「第 3 部分的 Line 群組」中,邀請方式是在 Line 機器人(Messaging API channel) 的主選單中開啟 Message API 頁面,可以在下方找到 Line 機器人的邀請 QR code,掃描以後即可邀請該機器人至群組中。
完成邀請後,在要同步的 Line 群組中至少會有 3 位成員,包含你自己、第 4 部分創建的 Line 機器人以及 Line Notify 帳號。
Line 群組中至少會有 3 位成員
步驟 6:將對應的機器人邀請至對應的群組中
以上步驟都完成後,接著在 Line 群組發佈「!綁定」這則訊息,運作正常的情況下,你會收到你所創建的 Line 機器人發佈一個帶有連結的訊息給你,要求你選擇要接收通知的聊天室,這時候請選擇要同步訊息的那個 Line 群組。
選擇要同步訊息的那個 Line 群組
步驟 7:在要同步訊息的 Discord 頻道輸入綁定代碼
成功完成上一個步驟後,代表你的 Line Notify 以及和你的 Line 群組綁定,接下來 Line Notify 會發送一組 6 個數字的綁定代碼,形式上會長成這個樣子「/link XXXXXX」。
這時候請到要同步訊息的那個 Discord 頻道去輸入「/link XXXXXX」這組指令(XXXXXX 的實際數字請輸入 Line Notify 當下給你的實際數字)。
如果綁定成功的話,可以同步在 Discord 頻道和 Line 群組看到以下的訊息:
【Discord <> Line 訊息同步機器人 – 綁定成功!】
Discord頻道:一般
Line群組 :個人筆記
========================================
目前支援同步:文字訊息、圖片、影片、音訊
步驟 8:恭喜你完成了 Discord 頻道和 Line 群組的訊息同步
接下來 2 個不同平台的訊息就可以同步發佈了。