能夠讓 Discord 和 Line 訊息同步的機器人操作教學

by 邦卡
文章發布於 最後更新於
能夠讓 Discord 和 Line 訊息同步的機器人操作教學

在 GitHub 上有一位台灣網友 LD,分享了一段開源程式碼,能夠讓特定的 Discord 文字頻道和特定的 Line 群組做訊息同步,做到在 Discord 發佈訊息能夠在 Line 被看見,同時在 Line 發佈訊息也能夠在 Discord 被看見。

雖然 LD 在 GitHub 上的操作步驟已經寫的很詳細了,但是中間有跳過一些步驟,導致沒有任何程式背景的我還是摸索了大概 4 個多小時才在各種嘗試中實作成功,這篇文章我會詳細的把所有操作過程中所需的步驟分享出來,希望讓大家也可以照著步驟實現 Discord 和 Line 訊息同步的功能。



本文章節一覽

Discord 和 Line 訊息同步功能說明

目前能夠同步的內容,只有包含文字、圖片檔、影片檔以及音檔。

其他像是貼圖和 GIF 或是其他種類的檔案目前尚無法同步。


Discord 和 Line 訊息同步所需設定

要將這一整個訊息同步機制設定完成,涉及到 7 種不同部分的設定:

  1. Discord 伺服器
  2. Discord Bot(機器人)
  3. Line 群組
  4. Lline Bot(機器人)
  5. Line Notify
  6. Ngrok
  7. 此開源專案的 config.yml 文檔修改

需要先把前面 6 個部分都設定完成後,才能取得所有第 7 部分設定所需要的資訊,我個人在參考 GitHub 說明文檔進行操作時,卡關最久的是在第 6 部分的 Ngrok


第 1 部分:Discord 伺服器

為了達到同步訊息的目的,需要先選定一個想要與 Line 同步訊息的 Discord 文字頻道,因為會涉及到 Discord 機器人的邀請,在自己的 Discord 伺服器操作是最方便的,關於 Discord 伺服器的創建可以參考此篇如何新增、創建 Discord 伺服器

延伸閱讀:5 種主要的 Discord 頻道類型介紹


第 2 部分:Discord Bot(機器人)

在同步訊息的過程中,在 Discord 這一端,需要自製一個 Discord 機器人。

所需的操作步驟如下:

步驟 1:登入 Discord Developer Portal 

使用自己的 Discord 帳號登入 Discord Developer Portal。 

步驟 2:創建新的 Discord 機器人

點選畫面右上角的「New Application」按鈕。

需要先幫新的 Discord 機器人命名,建議取名為「Line 訊息」,當然也可以取成任何想要的名稱,然後勾選同意名稱下方的使用條款,接著按下「Create」(創建)。

點選「New Application 」按鈕

點選「New Application 」按鈕

步驟 3:Discord 機器人設定及邀請至伺服器中

替 Discord 機器人命名完成以後,會進入到 Discord 機器人的設定選單。

完成機器人命名

完成機器人命名

先選擇「Bot」,然後往下找到「Presence Intent」、「Server Members Intent」及 「Message Content Intent」這 3 個選項,接著全部打勾。

「Presence Intent」、開啟「Server Members Intent」及 「Message Content Intent」選項

「Presence Intent」、開啟「Server Members Intent」及 「Message Content Intent」選項

接下來切換到「OAuth2」選項,先勾選「Bot」,然後勾選「Administrator」(管理者權限)。

這邊的設定,是在邀請這個機器人進 Discord 伺服器的時候,所需要預先給予的權限,因為是自己創建的機器人,為了方便起見,直接給予 Discord 的最高權限「管理者」,可以避免後續操作的時候,因為機器人權限不足而產生錯誤的可能性。

設定邀請機器人加入伺服器前預先要求的權限

設定邀請機器人加入伺服器前預先要求的權限

接著在往畫面下方滑動,可以看到有系統產生的一組「GENERATED URL」,使用這組連結就可以將這個新創鍵的 Discord 機器人邀請到你所管理的 Discord 伺服器。

複製機器人的邀請連結

複製機器人的邀請連結

延伸閱讀:如何邀請 Discord 機器人加入伺服器?

步驟 4:取得 Discord 機器人的 Bot token

在 Discord 機器人的設定選單選擇「Bot」之後,可以在「Build-A-Bot」的這個區塊看到 Token,第一次點擊「Reset Token」就可以取得在第 7 部分 config.yml 文檔修改所需的 Discord 的 bot_token。

取得 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

填寫 Provider 名稱,然後按下 Create 即可完成創建。

完成 Provider 創建

完成 Provider 創建

步驟 4:創建新的 Messaging API channel

接著會進入到 Provider 操作介面,選擇「Create a Messaging API channel」進行創建。

創建 Messaging API channel

創建 Messaging API channel

填寫一系列 Messaging API channel 所需要的資訊,除了倒數 2 項的選填欄位之外,所有的欄位都不能是空白的:

  1. Channel Type: 設定為 Messaging API
  2. Provider: 填寫供應者的名稱(這個不是機器人的名稱)
  3. Company or owner’s country or region: 填寫公司或個人所在國家/地區
  4. Channel Name: 替這個機器人命名(會顯示為這個機器人的名稱)
  5. Channel description: 為這個機器人寫下一段描述(自己看的懂就可以)
  6. Category: 選擇這個機器人的類別(自行填寫適合的類別)
  7. Subcategory: 選擇這個機器人的子類別(自行填寫適合的子類別)
  8. Email address: 有重要更新資訊的時候會收到通知的信箱
  9. Privacy policy URL: 隱私政策的網址,此為選填資訊,可以空白
  10. 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 頁面

前往 Basic settings 頁面

調整選項

調整選項

我們可以在第 6 部分的步驟 6 獲得「Webhook URL」,接著在 Basic settings 頁面的上方的「Webhook settings」的部分修改「Webhook URL」,並在尾端加上 /callback

在 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 頁面

前往 Basic settings 頁面

  • 在 Message API 頁面的下方,可以找到「channel access token」 ,第一次需要先點擊「Issue」按鈕,才會生成一組新的 channel access token。

前往 Message API 頁面

前往 Message API 頁面


第 5 部分:Line Notify

在同步訊息的過程中,在 Line 這一端,需要自製一個 Line 機器人(說明在第 4 部分)以及 Line Notify。

由於有一項資訊: Webhook URL,必須要先完成第 6 部分才能夠取得,可以先完成第 6 部分的步驟再回來設定這個部分。

步驟 1:登入 Line Notify

使用自己的 Line 帳號登入 Line Notify

步驟 2:登錄服務

創建新的服務(Line Notify),填寫以下資訊:

  1. 服務名稱: 建議填寫的名稱為【Discord訊息】,也可以填寫其他容易辨識的名稱
  2. 服務概要: 為這個服務寫下一段描述(自己看的懂就可以)
  3. 服務網址: 填寫所屬公司或個人的網址,這部分填寫的資訊不會影響功能
  4. 企業/經營者名稱: 填寫所屬公司或個人的名稱
  5. 負責人姓名: 填寫個人姓名
  6. 電子郵件帳號: 填寫公司或個人的電子郵件
  7. 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」按鈕

點選畫面右上的「 + 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

  1. bot_owner: 填寫你的名字,此處不可為空白
  2. webhook_url: 在第 6 部分的步驟 6 所取得的資訊
  3. channel_access_token: 在第 4 部分的步驟 6 所取得的資訊
  4. channel_secret: 在第 4 部分的步驟 6 所取得的資訊
  5. client_id: 在第 5 部分的步驟 3 所取得的資訊
  6. client_secret: 在第 5 部分的步驟 3 所取得的資訊
  7. 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 位成員

Line 群組中至少會有 3 位成員

步驟 6:將對應的機器人邀請至對應的群組中

以上步驟都完成後,接著在 Line 群組發佈「!綁定」這則訊息,運作正常的情況下,你會收到你所創建的 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 個不同平台的訊息就可以同步發佈了。

You may also like