Discord 訊息
最後更新
本頁說明如何用
core/discord 傳送與刪除訊息,以及上傳附件與音訊。本頁所有方法都透過
ChannelMessageSendComplex(或對應的 REST 呼叫)並帶 discordgo.WithContext(ctx) 送出;channel ID 為空時回 channelID is required。replyTo 非空時訊息以 reply 方式掛在同 channel 的該訊息下;"" 為獨立訊息。文字
- msg, err := bot.Send(ctx, channelID, replyTo, "**hello**")
Discord 對所有訊息都渲染 Markdown,因此沒有 parse mode 選項。
Delete(ctx, channelID, messageID) 刪除一則訊息;messageID 為空時回 messageID is required,API 錯誤包成 Session.ChannelMessageDelete: ...。附件
- 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 字串作為訊息文字,所有附件共用 |
音訊
- 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。