Discord 設定
最後更新
本頁說明如何建立
core/discord bot、它要求的 gateway intents,以及 handler 收到的 Input。建構子
- bot, err := discord.New(token)
token 為空時
New 回 token is required。它以 Bot <token> 建立 discordgo.Session、註冊訊息與 interaction handler,不會連線。沒有任何選項。Gateway intents
| Intent | 要求原因 |
|---|---|
IntentGuilds | 讓 gateway 推送 GUILD_CREATE,填滿 discordgo 的 state cache;缺少時 Input.ChannelName 永遠是 "" |
IntentsGuildMessages | 伺服器頻道內的訊息 |
IntentDirectMessages | 傳給 bot 的私訊 |
IntentMessageContent | 訊息文字與附件 |
IntentMessageContent 屬於 privileged intent。請在 Discord Developer Portal 的 Bot 設定開啟 Message Content Intent;否則多數訊息的 Input.Text 會是空的(Discord 只對私訊與提及 bot 的訊息附上內容)。Start
Start(ctx) 先以 REST User("@me") 驗證 token,再以 Session.Open() 連上 WebSocket。token 錯誤會在第一步失敗,不會留下已開啟的連線。bot 自己送出的訊息會依 discordgo 的 session state 過濾,不會進到 handler。Input
| 欄位 | 型別 | 內容 |
|---|---|---|
ChannelID | string | 訊息或 prompt 所在 channel |
ChannelName | string | 從 state cache 讀取,不額外發 request;私訊或 cache 未命中為 "" |
GuildID | string | 伺服器 ID;私訊為 "" |
MessageID | string | 使用者的訊息;modal 與 select 答案時為 prompt 訊息 |
UserID / Username | string | 傳送者;interaction 時取自 guild member,私訊時取自 user |
Text | string | 訊息內容、modal 答案或單選結果 |
Attachments | []*discordgo.MessageAttachment | 所有上傳檔案(圖片、檔案、音訊);以 ContentType 區分 |
CallbackPicks | []string | SendMultiSelect 選單中選取的值 |
Raw | *discordgo.MessageCreate | 一般訊息的 SDK 事件;interaction 答案時為 nil |
所有 ID 都是 Discord snowflake 字串。