Documentation ¶
Overview ¶
Package gateway handles the Discord gateway (or Websocket) connection, its events, and everything related to it. This includes logging into the Websocket.
This package does not abstract events and function handlers; instead, it leaves that to the session package. This package exposes only a single Events channel.
Index ¶
- Variables
- func URL() (string, error)
- type ChannelCreateEvent
- type ChannelDeleteEvent
- type ChannelPinsUpdateEvent
- type ChannelUnreadUpdateEvent
- type ChannelUpdateEvent
- type Event
- type Gateway
- func (g *Gateway) Close() error
- func (g *Gateway) GuildSubscribe(data GuildSubscribeData) error
- func (g *Gateway) HandleOP(op *wsutil.OP) error
- func (g *Gateway) Heartbeat() error
- func (g *Gateway) Identify() error
- func (g *Gateway) Open() error
- func (g *Gateway) OpenContext(ctx context.Context) error
- func (g *Gateway) Reconnect() error
- func (g *Gateway) ReconnectContext(ctx context.Context) error
- func (g *Gateway) RequestGuildMembers(data RequestGuildMembersData) error
- func (g *Gateway) Resume() error
- func (g *Gateway) Send(code OPCode, v interface{}) error
- func (g *Gateway) Start() error
- func (g *Gateway) UpdateStatus(data UpdateStatusData) error
- func (g *Gateway) UpdateVoiceState(data UpdateVoiceStateData) error
- type GatewayBotData
- type GuildBanAddEvent
- type GuildBanRemoveEvent
- type GuildCreateEvent
- type GuildDeleteEvent
- type GuildEmojisUpdateEvent
- type GuildFolder
- type GuildIntegrationsUpdateEvent
- type GuildMemberAddEvent
- type GuildMemberListGroup
- type GuildMemberListOp
- type GuildMemberListOpItem
- type GuildMemberListUpdate
- type GuildMemberRemoveEvent
- type GuildMemberUpdateEvent
- type GuildMembersChunkEvent
- type GuildRoleCreateEvent
- type GuildRoleDeleteEvent
- type GuildRoleUpdateEvent
- type GuildSubscribeData
- type GuildUpdateEvent
- type HeartbeatData
- type HelloEvent
- type Identifier
- type IdentifyData
- type IdentifyProperties
- type Intents
- type InvalidSessionEvent
- type InviteCreateEvent
- type InviteDeleteEvent
- type MessageAckEvent
- type MessageCreateEvent
- type MessageDeleteBulkEvent
- type MessageDeleteEvent
- type MessageReactionAddEvent
- type MessageReactionRemoveAllEvent
- type MessageReactionRemoveEmoji
- type MessageReactionRemoveEvent
- type MessageUpdateEvent
- type OPCode
- type PresenceUpdateEvent
- type PresencesReplaceEvent
- type ReadState
- type ReadyEvent
- type Relationship
- type RelationshipAdd
- type RelationshipRemove
- type RelationshipType
- type RequestGuildMembersData
- type ResumeData
- type ResumedEvent
- type Sequence
- type SessionStartLimit
- type SessionsReplaceEvent
- type SettingsChannelOverride
- type Shard
- type TypingStartEvent
- type UpdateStatusData
- type UpdateVoiceStateData
- type UserGuildSettings
- type UserGuildSettingsUpdateEvent
- type UserNoteUpdateEvent
- type UserNotification
- type UserSettings
- type UserSettingsUpdateEvent
- type UserUpdateEvent
- type VoiceServerUpdateEvent
- type VoiceStateUpdateEvent
- type WebhooksUpdateEvent
Constants ¶
This section is empty.
Variables ¶
var ( EndpointGateway = api.Endpoint + "gateway" EndpointGatewayBot = api.EndpointGateway + "/bot" Version = "6" Encoding = "json" )
var ( ErrMissingForResume = errors.New("missing session ID or sequence for resuming") ErrWSMaxTries = errors.New("max tries reached") )
var EventCreator = map[string]func() Event{ "HELLO": func() Event { return new(HelloEvent) }, "READY": func() Event { return new(ReadyEvent) }, "RESUMED": func() Event { return new(ResumedEvent) }, "INVALID_SESSION": func() Event { return new(InvalidSessionEvent) }, "CHANNEL_CREATE": func() Event { return new(ChannelCreateEvent) }, "CHANNEL_UPDATE": func() Event { return new(ChannelUpdateEvent) }, "CHANNEL_DELETE": func() Event { return new(ChannelDeleteEvent) }, "CHANNEL_PINS_UPDATE": func() Event { return new(ChannelPinsUpdateEvent) }, "CHANNEL_UNREAD_UPDATE": func() Event { return new(ChannelUnreadUpdateEvent) }, "GUILD_CREATE": func() Event { return new(GuildCreateEvent) }, "GUILD_UPDATE": func() Event { return new(GuildUpdateEvent) }, "GUILD_DELETE": func() Event { return new(GuildDeleteEvent) }, "GUILD_BAN_ADD": func() Event { return new(GuildBanAddEvent) }, "GUILD_BAN_REMOVE": func() Event { return new(GuildBanRemoveEvent) }, "GUILD_EMOJIS_UPDATE": func() Event { return new(GuildEmojisUpdateEvent) }, "GUILD_INTEGRATIONS_UPDATE": func() Event { return new(GuildIntegrationsUpdateEvent) }, "GUILD_MEMBER_ADD": func() Event { return new(GuildMemberAddEvent) }, "GUILD_MEMBER_REMOVE": func() Event { return new(GuildMemberRemoveEvent) }, "GUILD_MEMBER_UPDATE": func() Event { return new(GuildMemberUpdateEvent) }, "GUILD_MEMBERS_CHUNK": func() Event { return new(GuildMembersChunkEvent) }, "GUILD_MEMBER_LIST_UPDATE": func() Event { return new(GuildMemberListUpdate) }, "GUILD_ROLE_CREATE": func() Event { return new(GuildRoleCreateEvent) }, "GUILD_ROLE_UPDATE": func() Event { return new(GuildRoleUpdateEvent) }, "GUILD_ROLE_DELETE": func() Event { return new(GuildRoleDeleteEvent) }, "INVITE_CREATE": func() Event { return new(InviteCreateEvent) }, "INVITE_DELETE": func() Event { return new(InviteDeleteEvent) }, "MESSAGE_CREATE": func() Event { return new(MessageCreateEvent) }, "MESSAGE_UPDATE": func() Event { return new(MessageUpdateEvent) }, "MESSAGE_DELETE": func() Event { return new(MessageDeleteEvent) }, "MESSAGE_DELETE_BULK": func() Event { return new(MessageDeleteBulkEvent) }, "MESSAGE_REACTION_ADD": func() Event { return new(MessageReactionAddEvent) }, "MESSAGE_REACTION_REMOVE": func() Event { return new(MessageReactionRemoveEvent) }, "MESSAGE_REACTION_REMOVE_ALL": func() Event { return new(MessageReactionRemoveAllEvent) }, "MESSAGE_ACK": func() Event { return new(MessageAckEvent) }, "PRESENCE_UPDATE": func() Event { return new(PresenceUpdateEvent) }, "PRESENCES_REPLACE": func() Event { return new(PresencesReplaceEvent) }, "SESSIONS_REPLACE": func() Event { return new(SessionsReplaceEvent) }, "TYPING_START": func() Event { return new(TypingStartEvent) }, "VOICE_STATE_UPDATE": func() Event { return new(VoiceStateUpdateEvent) }, "VOICE_SERVER_UPDATE": func() Event { return new(VoiceServerUpdateEvent) }, "WEBHOOKS_UPDATE": func() Event { return new(WebhooksUpdateEvent) }, "USER_UPDATE": func() Event { return new(UserUpdateEvent) }, "USER_SETTINGS_UPDATE": func() Event { return new(UserSettingsUpdateEvent) }, "USER_GUILD_SETTINGS_UPDATE": func() Event { return new(UserGuildSettingsUpdateEvent) }, "USER_NOTE_UPDATE": func() Event { return new(UserNoteUpdateEvent) }, }
var Identity = IdentifyProperties{ OS: runtime.GOOS, Browser: "Arikawa", Device: "Arikawa", }
Identity is used as the default identity when initializing a new Gateway.
Functions ¶
Types ¶
type ChannelPinsUpdateEvent ¶
type ChannelPinsUpdateEvent struct { GuildID discord.Snowflake `json:"guild_id,omitempty"` ChannelID discord.Snowflake `json:"channel_id,omitempty"` LastPin discord.Timestamp `json:"timestamp,omitempty"` }
https://discordapp.com/developers/docs/topics/gateway#channels
type ChannelUnreadUpdateEvent ¶
type ChannelUnreadUpdateEvent struct { GuildID discord.Snowflake `json:"guild_id"` ChannelUnreadUpdates []struct { ID discord.Snowflake `json:"id"` LastMessageID discord.Snowflake `json:"last_message_id"` } }
https://discordapp.com/developers/docs/topics/gateway#channels
type Event ¶
type Event = interface{}
Event is any event struct. They have an "Event" suffixed to them.
type Gateway ¶
type Gateway struct { WS *wsutil.Websocket WSTimeout time.Duration // All events sent over are pointers to Event structs (structs suffixed with // "Event"). This shouldn't be accessed if the Gateway is created with a // Session. Events chan Event SessionID string Identifier *Identifier Sequence *Sequence PacerLoop *wsutil.PacemakerLoop ErrorLog func(err error) // default to log.Println // AfterClose is called after each close. Error can be non-nil, as this is // called even when the Gateway is gracefully closed. It's used mainly for // reconnections or any type of connection interruptions. AfterClose func(err error) // noop by default // contains filtered or unexported fields }
func NewCustomGateway ¶
func NewGateway ¶
NewGateway starts a new Gateway with the default stdlib JSON driver. For more information, refer to NewGatewayWithDriver.
func (*Gateway) GuildSubscribe ¶
func (g *Gateway) GuildSubscribe(data GuildSubscribeData) error
func (*Gateway) Open ¶
Open connects to the Websocket and authenticate it. You should usually use this function over Start().
func (*Gateway) Reconnect ¶
Reconnect tries to reconnect forever. It will resume the connection if possible. If an Invalid Session is received, it will start a fresh one.
func (*Gateway) RequestGuildMembers ¶
func (g *Gateway) RequestGuildMembers(data RequestGuildMembersData) error
func (*Gateway) Resume ¶
Resume sends to the Websocket a Resume OP, but it doesn't actually resume from a dead connection. Start() resumes from a dead connection.
func (*Gateway) Start ¶
Start authenticates with the websocket, or resume from a dead Websocket connection. This function doesn't block. You wouldn't usually use this function, but Open() instead.
func (*Gateway) UpdateStatus ¶
func (g *Gateway) UpdateStatus(data UpdateStatusData) error
func (*Gateway) UpdateVoiceState ¶
func (g *Gateway) UpdateVoiceState(data UpdateVoiceStateData) error
type GatewayBotData ¶
type GatewayBotData struct { URL string `json:"url"` Shards int `json:"shards,omitempty"` StartLimit *SessionStartLimit `json:"session_start_limit"` }
GatewayBotData contains the GatewayURL as well as extra metadata on how to shard bots.
func BotURL ¶
func BotURL(token string) (*GatewayBotData, error)
BotURL fetches the Gateway URL along with extra metadata. The token passed in will NOT be prefixed with Bot.
type GuildBanAddEvent ¶
type GuildBanAddEvent struct { GuildID discord.Snowflake `json:"guild_id"` User discord.User `json:"user"` }
https://discordapp.com/developers/docs/topics/gateway#guilds
type GuildBanRemoveEvent ¶
type GuildBanRemoveEvent struct { GuildID discord.Snowflake `json:"guild_id"` User discord.User `json:"user"` }
https://discordapp.com/developers/docs/topics/gateway#guilds
type GuildCreateEvent ¶
type GuildCreateEvent struct { discord.Guild Joined discord.Timestamp `json:"timestamp,omitempty"` Large bool `json:"large,omitempty"` MemberCount uint64 `json:"member_count,omitempty"` VoiceStates []discord.VoiceState `json:"voice_states,omitempty"` Members []discord.Member `json:"members,omitempty"` Channels []discord.Channel `json:"channels,omitempty"` Presences []discord.Presence `json:"presences,omitempty"` }
https://discordapp.com/developers/docs/topics/gateway#guilds
type GuildDeleteEvent ¶
type GuildDeleteEvent struct { ID discord.Snowflake `json:"id"` Unavailable bool `json:"unavailable"` }
https://discordapp.com/developers/docs/topics/gateway#guilds
type GuildEmojisUpdateEvent ¶
type GuildEmojisUpdateEvent struct { GuildID discord.Snowflake `json:"guild_id"` Emojis []discord.Emoji `json:"emoji"` }
https://discordapp.com/developers/docs/topics/gateway#guilds
type GuildFolder ¶
type GuildFolder struct { Name string `json:"name"` ID discord.Snowflake `json:"id"` GuildIDs []discord.Snowflake `json:"guild_ids"` Color discord.Color `json:"color"` }
GuildFolder holds a single folder that you see in the left guild panel.
type GuildMemberListGroup ¶
type GuildMemberListGroup struct { ID string `json:"id"` // either discord.Snowflake Role IDs or "online" Count uint64 `json:"count"` }
https://discordapp.com/developers/docs/topics/gateway#guilds
type GuildMemberListOp ¶
type GuildMemberListOp struct { // Mysterious string, so far spotted to be [SYNC, INSERT, UPDATE, DELETE]. Op string `json:"op"` // NON-SYNC ONLY // Only available for Ops that aren't "SYNC". Index int `json:"index,omitempty"` Item GuildMemberListOpItem `json:"item,omitempty"` // SYNC ONLY // Range requested in GuildSubscribeData. Range [2]int `json:"range,omitempty"` // Items is basically a linear list of roles and members, similarly to // how the client renders it. No, it's not nested. Items []GuildMemberListOpItem `json:"items,omitempty"` }
https://discordapp.com/developers/docs/topics/gateway#guilds
type GuildMemberListOpItem ¶
type GuildMemberListOpItem struct { Group *GuildMemberListGroup `json:"group,omitempty"` Member *struct { discord.Member HoistedRole string `json:"hoisted_role"` Presence discord.Presence `json:"presence"` } `json:"member,omitempty"` }
GuildMemberListOpItem is an enum. Either of the fields are provided, but never both. Refer to (*GuildMemberListUpdate).Ops for more.
type GuildMemberListUpdate ¶
type GuildMemberListUpdate struct { ID string `json:"id"` GuildID discord.Snowflake `json:"guild_id"` MemberCount uint64 `json:"member_count"` OnlineCount uint64 `json:"online_count"` // Groups is all the visible role sections. Groups []GuildMemberListGroup `json:"groups"` Ops []GuildMemberListOp `json:"ops"` }
GuildMemberListUpdate is an undocumented event. It's received when the client sends over GuildSubscriptions with the Channels field used. The State package does not handle this event.
type GuildMemberRemoveEvent ¶
type GuildMemberRemoveEvent struct { GuildID discord.Snowflake `json:"guild_id"` User discord.User `json:"user"` }
https://discordapp.com/developers/docs/topics/gateway#guilds
type GuildMemberUpdateEvent ¶
type GuildMemberUpdateEvent struct { GuildID discord.Snowflake `json:"guild_id"` RoleIDs []discord.Snowflake `json:"roles"` User discord.User `json:"user"` Nick string `json:"nick"` }
https://discordapp.com/developers/docs/topics/gateway#guilds
func (GuildMemberUpdateEvent) Update ¶
func (u GuildMemberUpdateEvent) Update(m *discord.Member)
type GuildMembersChunkEvent ¶
type GuildMembersChunkEvent struct { GuildID discord.Snowflake `json:"guild_id"` Members []discord.Member `json:"members"` // Whatever's not found goes here NotFound []string `json:"not_found,omitempty"` // Only filled if requested Presences []discord.Presence `json:"presences,omitempty"` }
GuildMembersChunkEvent is sent when Guild Request Members is called.
type GuildRoleCreateEvent ¶
type GuildRoleCreateEvent struct { GuildID discord.Snowflake `json:"guild_id"` Role discord.Role `json:"role"` }
https://discordapp.com/developers/docs/topics/gateway#guilds
type GuildRoleDeleteEvent ¶
type GuildRoleDeleteEvent struct { GuildID discord.Snowflake `json:"guild_id"` RoleID discord.Snowflake `json:"role_id"` }
https://discordapp.com/developers/docs/topics/gateway#guilds
type GuildRoleUpdateEvent ¶
type GuildRoleUpdateEvent struct { GuildID discord.Snowflake `json:"guild_id"` Role discord.Role `json:"role"` }
https://discordapp.com/developers/docs/topics/gateway#guilds
type GuildSubscribeData ¶
type GuildSubscribeData struct { Typing bool `json:"typing"` Activities bool `json:"activities"` GuildID discord.Snowflake `json:"guild_id"` // Channels is not documented. It's used to fetch the right members sidebar. Channels map[discord.Snowflake][][2]int `json:"channels"` }
Undocumented
type HelloEvent ¶
type HelloEvent struct {
HeartbeatInterval discord.Milliseconds `json:"heartbeat_interval"`
}
https://discordapp.com/developers/docs/topics/gateway#connecting-and-resuming
type Identifier ¶
type Identifier struct { IdentifyData IdentifyShortLimit *rate.Limiter `json:"-"` IdentifyGlobalLimit *rate.Limiter `json:"-"` }
func DefaultIdentifier ¶
func DefaultIdentifier(token string) *Identifier
func NewIdentifier ¶
func NewIdentifier(data IdentifyData) *Identifier
type IdentifyData ¶
type IdentifyData struct { Token string `json:"token"` Properties IdentifyProperties `json:"properties"` Compress bool `json:"compress,omitempty"` // true LargeThreshold uint `json:"large_threshold,omitempty"` // 50 GuildSubscriptions bool `json:"guild_subscriptions"` // true Shard *Shard `json:"shard,omitempty"` // [ shard_id, num_shards ] Presence *UpdateStatusData `json:"presence,omitempty"` Intents Intents `json:"intents,omitempty"` }
func (*IdentifyData) SetShard ¶
func (i *IdentifyData) SetShard(id, num int)
type IdentifyProperties ¶
type IdentifyProperties struct { // Required OS string `json:"os"` // GOOS Browser string `json:"browser"` // Arikawa Device string `json:"device"` // Arikawa // Optional BrowserUserAgent string `json:"browser_user_agent,omitempty"` BrowserVersion string `json:"browser_version,omitempty"` OsVersion string `json:"os_version,omitempty"` Referrer string `json:"referrer,omitempty"` ReferringDomain string `json:"referring_domain,omitempty"` }
type Intents ¶
type Intents uint32
Intents is a new Discord API feature that's documented at https://discordapp.com/developers/docs/topics/gateway#gateway-intents.
const ( IntentGuilds Intents = 1 << iota IntentGuildMembers IntentGuildBans IntentGuildEmojis IntentGuildIntegrations IntentGuildWebhooks IntentGuildInvites IntentGuildVoiceStates IntentGuildPresences IntentGuildMessages IntentGuildMessageReactions IntentGuildMessageTyping IntentDirectMessages IntentDirectMessageReactions IntentDirectMessageTyping )
type InvalidSessionEvent ¶
type InvalidSessionEvent bool
InvalidSessionEvent indicates if the event is resumable.
type InviteCreateEvent ¶
type InviteCreateEvent struct { Code string `json:"code"` CreatedAt discord.Timestamp `json:"created_at"` ChannelID discord.Snowflake `json:"channel_id"` GuildID discord.Snowflake `json:"guild_id,omitempty"` // Similar to discord.Invite Inviter *discord.User `json:"inviter,omitempty"` Target *discord.User `json:"target_user,omitempty"` TargetType discord.InviteUserType `json:"target_user_type,omitempty"` discord.InviteMetadata }
type InviteDeleteEvent ¶
type MessageAckEvent ¶
type MessageAckEvent struct { MessageID discord.Snowflake `json:"message_id"` ChannelID discord.Snowflake `json:"channel_id"` }
https://discordapp.com/developers/docs/topics/gateway#messages
type MessageDeleteBulkEvent ¶
type MessageDeleteBulkEvent struct { IDs []discord.Snowflake `json:"ids"` ChannelID discord.Snowflake `json:"channel_id"` GuildID discord.Snowflake `json:"guild_id,omitempty"` }
https://discordapp.com/developers/docs/topics/gateway#messages
type MessageDeleteEvent ¶
type MessageDeleteEvent struct { ID discord.Snowflake `json:"id"` ChannelID discord.Snowflake `json:"channel_id"` GuildID discord.Snowflake `json:"guild_id,omitempty"` }
https://discordapp.com/developers/docs/topics/gateway#messages
type MessageReactionAddEvent ¶
type MessageReactionAddEvent struct { UserID discord.Snowflake `json:"user_id"` ChannelID discord.Snowflake `json:"channel_id"` MessageID discord.Snowflake `json:"message_id"` Emoji discord.Emoji `json:"emoji,omitempty"` GuildID discord.Snowflake `json:"guild_id,omitempty"` Member *discord.Member `json:"member,omitempty"` }
https://discordapp.com/developers/docs/topics/gateway#messages
type MessageReactionRemoveAllEvent ¶
type MessageReactionRemoveAllEvent struct { ChannelID discord.Snowflake `json:"channel_id"` MessageID discord.Snowflake `json:"message_id"` GuildID discord.Snowflake `json:"guild_id,omitempty"` }
https://discordapp.com/developers/docs/topics/gateway#messages
type MessageReactionRemoveEmoji ¶
type MessageReactionRemoveEmoji struct { ChannelID discord.Snowflake `json:"channel_id"` MessageID discord.Snowflake `json:"message_id"` Emoji discord.Emoji `json:"emoji"` GuildID discord.Snowflake `json:"guild_id,omitempty"` }
https://discordapp.com/developers/docs/topics/gateway#messages
type MessageReactionRemoveEvent ¶
type MessageReactionRemoveEvent struct { UserID discord.Snowflake `json:"user_id"` ChannelID discord.Snowflake `json:"channel_id"` MessageID discord.Snowflake `json:"message_id"` Emoji discord.Emoji `json:"emoji"` GuildID discord.Snowflake `json:"guild_id,omitempty"` }
https://discordapp.com/developers/docs/topics/gateway#messages
type OPCode ¶
const ( DispatchOP OPCode = 0 // recv HeartbeatOP OPCode = 1 // send/recv IdentifyOP OPCode = 2 // send... StatusUpdateOP OPCode = 3 // VoiceStateUpdateOP OPCode = 4 // VoiceServerPingOP OPCode = 5 // ResumeOP OPCode = 6 // ReconnectOP OPCode = 7 // recv RequestGuildMembersOP OPCode = 8 // send InvalidSessionOP OPCode = 9 // recv... HelloOP OPCode = 10 HeartbeatAckOP OPCode = 11 CallConnectOP OPCode = 13 GuildSubscriptionsOP OPCode = 14 )
type PresenceUpdateEvent ¶
Clients may only update their game status 5 times per 20 seconds.
type ReadyEvent ¶
type ReadyEvent struct { Version int `json:"version"` User discord.User `json:"user"` SessionID string `json:"session_id"` PrivateChannels []discord.Channel `json:"private_channels"` Guilds []GuildCreateEvent `json:"guilds"` Shard *Shard `json:"shard"` // Undocumented fields Settings *UserSettings `json:"user_settings,omitempty"` UserGuildSettings []UserGuildSettings `json:"user_guild_settings,omitempty"` ReadState []ReadState `json:"read_state,omitempty"` Presences []discord.Presence `json:"presences,omitempty"` Relationships []Relationship `json:"relationships,omitempty"` Notes map[discord.Snowflake]string `json:"notes,omitempty"` }
type Relationship ¶
type Relationship struct { ID string `json:"id"` User discord.User `json:"user"` Type RelationshipType `json:"type"` }
A Relationship between the logged in user and Relationship.User
type RelationshipAdd ¶
type RelationshipAdd struct {
Relationship
}
type RelationshipRemove ¶
type RelationshipRemove struct {
Relationship
}
type RelationshipType ¶
type RelationshipType uint8
const ( FriendRelationship RelationshipType BlockedRelationship IncomingFriendRequest SentFriendRequest )
type RequestGuildMembersData ¶
type ResumeData ¶
type ResumedEvent ¶
type ResumedEvent struct{}
https://discordapp.com/developers/docs/topics/gateway#connecting-and-resuming
type SessionStartLimit ¶
type SessionStartLimit struct { Total int `json:"total"` Remaining int `json:"remaining"` ResetAfter discord.Milliseconds `json:"reset_after"` }
SessionStartLimit is the information on the current session start limit. It's used in GatewayBotData.
type SessionsReplaceEvent ¶
type SessionsReplaceEvent []struct { Status discord.Status `json:"status"` SessionID string `json:"session_id"` Game *discord.Activity `json:"game"` Activities []discord.Activity `json:"activities"` ClientInfo struct { Version int `json:"version"` OS string `json:"os"` Client string `json:"client"` } `json:"client_info"` Active bool `json:"active"` }
SessionsReplaceEvent is an undocumented user event. It's likely used for current user's presence updates.
type SettingsChannelOverride ¶
type SettingsChannelOverride struct { Muted bool `json:"muted"` MessageNotifications UserNotification `json:"message_notifications"` ChannelID discord.Snowflake `json:"channel_id"` }
A UserGuildSettingsChannelOverride stores data for a channel override for a users guild settings.
type TypingStartEvent ¶
type TypingStartEvent struct { ChannelID discord.Snowflake `json:"channel_id"` UserID discord.Snowflake `json:"user_id"` Timestamp discord.UnixTimestamp `json:"timestamp"` GuildID discord.Snowflake `json:"guild_id,omitempty"` Member *discord.Member `json:"member,omitempty"` }
https://discordapp.com/developers/docs/topics/gateway#presence
type UpdateStatusData ¶
type UpdateStatusData struct { Since discord.UnixMsTimestamp `json:"since"` // 0 if not idle // Both fields are nullable. Game *discord.Activity `json:"game,omitempty"` Activities *[]discord.Activity `json:"activities,omitempty"` Status discord.Status `json:"status"` AFK bool `json:"afk"` }
var Presence *UpdateStatusData
Presence is used as the default presence when initializing a new Gateway.
type UpdateVoiceStateData ¶
type UserGuildSettings ¶
type UserGuildSettings struct { GuildID discord.Snowflake `json:"guild_id"` SupressEveryone bool `json:"suppress_everyone"` SupressRoles bool `json:"suppress_roles"` Muted bool `json:"muted"` MobilePush bool `json:"mobile_push"` MessageNotifications UserNotification `json:"message_notifications"` ChannelOverrides []SettingsChannelOverride `json:"channel_overrides"` }
A UserGuildSettings stores data for a users guild settings.
type UserGuildSettingsUpdateEvent ¶
type UserGuildSettingsUpdateEvent struct {
UserGuildSettings
}
Undocumented
type UserNoteUpdateEvent ¶
Undocumented
type UserNotification ¶
type UserNotification uint8
UserNotification is the notification setting for a channel or guild.
const ( AllNotifications UserNotification = iota OnlyMentions NoNotifications GuildDefaults )
type UserSettings ¶
type UserSettings struct { ShowCurrentGame bool `json:"show_current_game"` DefaultGuildsRestricted bool `json:"default_guilds_restricted"` InlineAttachmentMedia bool `json:"inline_attachment_media"` InlineEmbedMedia bool `json:"inline_embed_media"` GIFAutoPlay bool `json:"gif_auto_play"` RenderEmbeds bool `json:"render_embeds"` RenderReactions bool `json:"render_reactions"` AnimateEmoji bool `json:"animate_emoji"` EnableTTSCommand bool `json:"enable_tts_command"` MessageDisplayCompact bool `json:"message_display_compact"` ConvertEmoticons bool `json:"convert_emoticons"` ExplicitContentFilter uint8 `json:"explicit_content_filter"` // ??? DisableGamesTab bool `json:"disable_games_tab"` DeveloperMode bool `json:"developer_mode"` DetectPlatformAccounts bool `json:"detect_platform_accounts"` StreamNotification bool `json:"stream_notification_enabled"` AccessibilityDetection bool `json:"allow_accessbility_detection"` ContactSync bool `json:"contact_sync_enabled"` NativePhoneIntegration bool `json:"native_phone_integration_enabled"` Locale string `json:"locale"` Theme string `json:"theme"` GuildPositions []discord.Snowflake `json:"guild_positions"` GuildFolders []GuildFolder `json:"guild_folders"` RestrictedGuilds []discord.Snowflake `json:"restricted_guilds"` FriendSourceFlags struct { All bool `json:"all"` MutualGuilds bool `json:"mutual_guilds"` MutualFriends bool `json:"mutual_friends"` } `json:"friend_source_flags"` Status discord.Status `json:"status"` CustomStatus struct { Text string `json:"text"` ExpiresAt discord.Timestamp `json:"expires_at,omitempty"` EmojiID discord.Snowflake `json:"emoji_id,string"` EmojiName string `json:"emoji_name"` } `json:"custom_status"` }
type VoiceServerUpdateEvent ¶
type VoiceStateUpdateEvent ¶
type VoiceStateUpdateEvent struct {
discord.VoiceState
}
type WebhooksUpdateEvent ¶
type WebhooksUpdateEvent struct { GuildID discord.Snowflake `json:"guild_id"` ChannelID discord.Snowflake `json:"channel_id"` }
https://discordapp.com/developers/docs/topics/gateway#webhooks