v0.5.0

Discord 訊息

最後更新


本頁說明如何用 core/discord 傳送與刪除訊息,以及上傳附件與音訊。
本頁所有方法都透過 ChannelMessageSendComplex(或對應的 REST 呼叫)並帶 discordgo.WithContext(ctx) 送出;channel ID 為空時回 channelID is required。replyTo 非空時訊息以 reply 方式掛在同 channel 的該訊息下;"" 為獨立訊息。

文字


  1. msg, err := bot.Send(ctx, channelID, replyTo, "**hello**")

Discord 對所有訊息都渲染 Markdown,因此沒有 parse mode 選項。
Delete(ctx, channelID, messageID) 刪除一則訊息;messageID 為空時回 messageID is required,API 錯誤包成 Session.ChannelMessageDelete: ...。

附件


  1. msg, err := bot.SendFiles(ctx, channelID, replyTo, []string{"a.png", "b.pdf"}, "files")

規則行為
數量1 到 10 個路徑,全部放在同一則訊息;否則回 paths must be 1-10
空路徑回 path is required
上傳每個檔案以 os.Open 開啟並串流;檔名為 filepath.Base(path);Discord 依副檔名判斷類型
Caption第一個 caption 字串作為訊息文字,所有附件共用

音訊


  1. msg, err := bot.SendVoice(ctx, channelID, replyTo, "./reply.ogg", "caption")

SendVoice 把既有檔案以 content type audio/ogg 上傳為單一附件。Discord 顯示為附播放器的音訊附件,而不是波形語音訊息:discordgo v0.29.0 無法送出語音訊息旗標所需的 duration_secs 與 waveform 欄位。空路徑回 path is required。
為 v0.4.x 撰寫的 SendVoice(ctx, channelID, replyTo, text, apiKey) 在 v0.5.0 仍可編譯,但會把 text 當成檔案路徑上傳,並把 apiKey 當成 caption 發出。見已移除 API。

相關頁面


EN