頂置文

========================= [頂置文開始] =========================
獨立遊戲「蠟筆大冒險」專頁

JJKid 常出沒地點:




========================= [頂置文結束] =========================

2020年3月21日 星期六

Discord Bot 開發筆記,使用 DSharpPlus

花了大約一週的時間開發一個專屬的 Discord 聊天機器人,名為「鴨講」。
趁著記憶猶新記錄一下重點。

開發之前,先規畫了想實現的功能,主要有這些:

  1. 針對特定關鍵字觸發回應,例如看到「早安」就會回覆「某某人早安」,就像機器人在跟你聊天一樣。
  2. 執行特定的指令。

先看成果,首先是聊天:


然後執行指令:



--

接著是開發工具與套件。
網路上搜尋到的教學大多使用 node.js/discord.js 框架,以 javaScript 開發。
但是我不熟 javaScript,所以找了使用 C# 的工具,也就是這次使用的 DSharpPlus。
它是跑在 .NET Core 上面的,所以目前只能做出終端機介面,沒有漂亮的圖形視窗。
註:還有另一套也是使用 C# 的工具:Discord.Net。不過我這次用的是 DSharpPlus 就是了。

開發流程大致上分為:
1) 註冊Bot帳號 (極簡單)
2) 取得Bot專屬Token (極簡單)
3) 實做Bot基本框架,讓Bot活起來 (難度普通)
4) 邀請Bot到Discord群組 (極簡單)
5) 實做Bot的功能 (就是寫程式)

關於「註冊帳號」與「取得Token」,網路上的分享非常多就不重覆了。重點只有一個就是 Token 那串字千萬要保密不可外洩。
而實做的部份我都是看這位的教學,講得很完整:



基本上有在用 C# 開發的人應該都看得懂。

--

最後就是自己的一些心得筆記。

Discord 裡面常常查到一個名為 Guild(公會) 的東西,這個 Guild 指的就是 Discord 群組。取這名字真有遊戲感。

Discord 裡各種項目皆有一個專屬id,長度是 ulong。無論是使用者(user)、頻道(channel)、身份組(role)……通通都是這樣的觀念。想要查詢某個東西的 id 最簡單的方式就是在 Discord 的該項目上面(例如使用者)按右鍵,選「複製ID」即可。

想要處理收到的訊息,只要向 Client 註冊 MessageCreated 即可,這是一個 delegate。收到訊息後會傳入 MessageCreateEventArgs 型態的參數,裡面會有這一筆訊息的完整資訊,包括訊息內文、從哪個頻道傳來的、發話者是誰、提及了哪些人等等應有盡有。

如果上傳了自訂的表符emoji,都會生成由二個冒號包住的語法,例如 :hello:
Bot發送訊息到群組時,這種emoji語法不會被自動轉成圖案,所以發送前記得如果有emoji要先透過 DiscordEmoji.FromName() 轉成正確的語法。

想模擬機器人正在打字,也就是顯示「xxx正在輸入…」的訊息。只要對指定的 Channel 呼叫 TriggerTypingAsync() 即可。

需要使用 C# 的 async 語法,也就是非同步的寫法。不熟悉的話建議先作點功課。

以上,開發自己的 Discord Bot 沒那麼難。


--

本篇相關連結。

DSharpPlus
https://github.com/DSharpPlus/DSharpPlus

以 DSharpPlus 實作 Discord Bot 影片教學
https://www.youtube.com/watch?v=7-tyLCAO4mY&list=PLS6sInD7ThM0Zb8F_KBl4T_jGF1e3apsc&index=2

Discord.Net
https://github.com/discord-net/Discord.Net

async 等待與不等待的觀念釐清
https://dotblogs.com.tw/JesperLai/2018/04/06/022428

沒有留言:

張貼留言