花了大約一週的時間開發一個專屬的 Discord 聊天機器人,名為「鴨講」。
趁著記憶猶新記錄一下重點。
開發之前,先規畫了想實現的功能,主要有這些:
先看成果,首先是聊天:
然後執行指令:
--
接著是開發工具與套件。
網路上搜尋到的教學大多使用 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
沒有留言:
張貼留言