Discord Setup
Last updated
This page covers constructing the
core/discord bot, the gateway intents it requests, and the Input your handler receives.Constructor
- bot, err := discord.New(token)
New returns token is required for an empty token. It creates a discordgo.Session authenticated as Bot <token>, registers the message and interaction handlers, and does not connect. There are no options.Gateway intents
| Intent | Why it is requested |
|---|---|
IntentGuilds | Makes the gateway send GUILD_CREATE, which fills discordgo's state cache; without it Input.ChannelName is always "" |
IntentsGuildMessages | Messages in server channels |
IntentDirectMessages | Direct messages to the bot |
IntentMessageContent | Message text and attachments |
IntentMessageContent is privileged. Enable Message Content Intent under Bot settings in the Discord Developer Portal; otherwise Input.Text is empty for most messages (Discord only sends content for DMs and messages that mention the bot).Start
Start(ctx) first calls REST User("@me") to validate the token, then Session.Open() to connect the WebSocket. A bad token fails at the first step, before any connection is opened. Messages sent by the bot itself are filtered using discordgo's session state, so they never reach the handler.Input
| Field | Type | Content |
|---|---|---|
ChannelID | string | Channel of the message or prompt |
ChannelName | string | Read from the state cache with no extra request; "" for DMs or a cache miss |
GuildID | string | Server ID; "" for DMs |
MessageID | string | The user's message; for modal and select answers, the prompt message |
UserID / Username | string | Sender; for interactions, taken from the guild member or, in DMs, the user |
Text | string | Message content, the modal answer, or the single-select pick |
Attachments | []*discordgo.MessageAttachment | Every uploaded file (images, files, audio); tell them apart with ContentType |
CallbackPicks | []string | Values chosen in a SendMultiSelect menu |
Raw | *discordgo.MessageCreate | The SDK event for plain messages; nil for interaction answers |
All IDs are Discord snowflake strings.