gateway

package
v0.13.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 14, 2022 License: Apache-2.0 Imports: 16 Imported by: 69

Documentation

Index

Constants

View Source
const Version = 10

Version defines which discord API version disgo should use to connect to discord.

Variables

This section is empty.

Functions

This section is empty.

Types

type AddedThreadMember added in v0.13.0

type AddedThreadMember struct {
	discord.ThreadMember
	Member   discord.Member    `json:"member"`
	Presence *discord.Presence `json:"presence"`
}

type CloseEventCode added in v0.13.0

type CloseEventCode int
const (
	CloseEventCodeUnknownError CloseEventCode = iota + 4000
	CloseEventCodeUnknownOpcode
	CloseEventCodeDecodeError
	CloseEventCodeNotAuthenticated
	CloseEventCodeAuthenticationFailed
	CloseEventCodeAlreadyAuthenticated

	CloseEventCodeInvalidSeq
	CloseEventCodeRateLimited
	CloseEventCodeSessionTimedOut
	CloseEventCodeInvalidShard
	CloseEventCodeShardingRequired
	CloseEventCodeInvalidAPIVersion
	CloseEventCodeInvalidIntents
	CloseEventCodeDisallowedIntents
)

func (CloseEventCode) ShouldReconnect added in v0.13.0

func (c CloseEventCode) ShouldReconnect() bool

type CloseHandlerFunc added in v0.11.0

type CloseHandlerFunc func(gateway Gateway, err error)

CloseHandlerFunc is a function that is called when the Gateway is closed.

type Config

type Config struct {
	Logger                    log.Logger
	Dialer                    *websocket.Dialer
	LargeThreshold            int
	Intents                   Intents
	Compress                  bool
	URL                       string
	ShardID                   int
	ShardCount                int
	SessionID                 *string
	LastSequenceReceived      *int
	AutoReconnect             bool
	MaxReconnectTries         int
	EnableRawEvents           bool
	RateLimiter               RateLimiter
	RateRateLimiterConfigOpts []RateLimiterConfigOpt
	Presence                  *MessageDataPresenceUpdate
	OS                        string
	Browser                   string
	Device                    string
}

Config lets you configure your Gateway instance.

func DefaultConfig

func DefaultConfig() *Config

DefaultConfig returns a Config with sensible defaults.

func (*Config) Apply

func (c *Config) Apply(opts []ConfigOpt)

Apply applies the given ConfigOpt(s) to the Config

type ConfigOpt

type ConfigOpt func(config *Config)

ConfigOpt is a type alias for a function that takes a Config and is used to configure your Server.

func WithAutoReconnect

func WithAutoReconnect(autoReconnect bool) ConfigOpt

WithAutoReconnect sets whether the Gateway should automatically reconnect to Discord.

func WithBrowser

func WithBrowser(browser string) ConfigOpt

WithBrowser sets the browser the bot is running on. See here for more information: https://discord.com/developers/docs/topics/gateway#identify-identify-connection-properties

func WithCompress

func WithCompress(compress bool) ConfigOpt

WithCompress sets whether this Gateway supports compression. See here for more information: https://discord.com/developers/docs/topics/gateway#encoding-and-compression

func WithDevice

func WithDevice(device string) ConfigOpt

WithDevice sets the device the bot is running on. See here for more information: https://discord.com/developers/docs/topics/gateway#identify-identify-connection-properties

func WithDialer added in v0.10.0

func WithDialer(dialer *websocket.Dialer) ConfigOpt

WithDialer sets the websocket.Dialer for the Gateway.

func WithEnableRawEvents added in v0.13.0

func WithEnableRawEvents(enableRawEventEvents bool) ConfigOpt

WithEnableRawEvents enables/disables the EventTypeRaw.

func WithIntents added in v0.13.0

func WithIntents(intents ...Intents) ConfigOpt

WithIntents sets the Intents for the Gateway. See here for more information: https://discord.com/developers/docs/topics/gateway#gateway-intents

func WithLargeThreshold

func WithLargeThreshold(largeThreshold int) ConfigOpt

WithLargeThreshold sets the threshold for the Gateway. See here for more information: https://discord.com/developers/docs/topics/gateway#identify-identify-structure

func WithLogger

func WithLogger(logger log.Logger) ConfigOpt

WithLogger sets the Logger for the Gateway.

func WithMaxReconnectTries

func WithMaxReconnectTries(maxReconnectTries int) ConfigOpt

WithMaxReconnectTries sets the maximum number of reconnect attempts before stopping.

func WithOS

func WithOS(os string) ConfigOpt

WithOS sets the operating system the bot is running on. See here for more information: https://discord.com/developers/docs/topics/gateway#identify-identify-connection-properties

func WithPresence

func WithPresence(presence MessageDataPresenceUpdate) ConfigOpt

WithPresence sets the initial presence the bot should display.

func WithRateLimiter

func WithRateLimiter(rateLimiter RateLimiter) ConfigOpt

WithRateLimiter sets the grate.RateLimiter for the Gateway.

func WithRateRateLimiterConfigOpts added in v0.12.0

func WithRateRateLimiterConfigOpts(opts ...RateLimiterConfigOpt) ConfigOpt

WithRateRateLimiterConfigOpts lets you configure the default RateLimiter.

func WithSequence

func WithSequence(sequence int) ConfigOpt

WithSequence sets the last sequence received for the Gateway. If sessionID and lastSequence is present while connecting, the Gateway will try to resume the session.

func WithSessionID

func WithSessionID(sessionID string) ConfigOpt

WithSessionID sets the Session ID for the Gateway. If sessionID and lastSequence is present while connecting, the Gateway will try to resume the session.

func WithShardCount

func WithShardCount(shardCount int) ConfigOpt

WithShardCount sets the shard count for the Gateway. See here for more information on sharding: https://discord.com/developers/docs/topics/gateway#sharding

func WithShardID

func WithShardID(shardID int) ConfigOpt

WithShardID sets the shard ID for the Gateway. See here for more information on sharding: https://discord.com/developers/docs/topics/gateway#sharding

func WithURL added in v0.13.0

func WithURL(url string) ConfigOpt

WithURL sets the Gateway URL for the Gateway.

type CreateFunc

type CreateFunc func(token string, eventHandlerFunc EventHandlerFunc, closeHandlerFUnc CloseHandlerFunc, opts ...ConfigOpt) Gateway

CreateFunc is a type that is used to create a new Gateway(s).

type EventApplicationCommandPermissionsUpdate added in v0.13.0

type EventApplicationCommandPermissionsUpdate struct {
	discord.ApplicationCommandPermissions
}

type EventAutoModerationActionExecution added in v0.13.0

type EventAutoModerationActionExecution struct {
	GuildID              snowflake.ID                      `json:"guild_id"`
	Action               discord.AutoModerationAction      `json:"action"`
	RuleID               snowflake.ID                      `json:"rule_id"`
	RuleTriggerType      discord.AutoModerationTriggerType `json:"rule_trigger_type"`
	UserID               snowflake.ID                      `json:"user_id"`
	ChannelID            *snowflake.ID                     `json:"channel_id,omitempty"`
	MessageID            *snowflake.ID                     `json:"message_id,omitempty"`
	AlertSystemMessageID snowflake.ID                      `json:"alert_system_message_id"`
	Content              string                            `json:"content"`
	MatchedKeywords      *string                           `json:"matched_keywords"`
	MatchedContent       *string                           `json:"matched_content"`
}

type EventAutoModerationRuleCreate added in v0.13.0

type EventAutoModerationRuleCreate struct {
	discord.AutoModerationRule
}

type EventAutoModerationRuleDelete added in v0.13.0

type EventAutoModerationRuleDelete struct {
	discord.AutoModerationRule
}

type EventAutoModerationRuleUpdate added in v0.13.0

type EventAutoModerationRuleUpdate struct {
	discord.AutoModerationRule
}

type EventChannelCreate added in v0.13.0

type EventChannelCreate struct {
	discord.Channel
}

func (*EventChannelCreate) UnmarshalJSON added in v0.13.0

func (e *EventChannelCreate) UnmarshalJSON(data []byte) error

type EventChannelDelete added in v0.13.0

type EventChannelDelete struct {
	discord.Channel
}

func (*EventChannelDelete) UnmarshalJSON added in v0.13.0

func (e *EventChannelDelete) UnmarshalJSON(data []byte) error

type EventChannelPinsUpdate added in v0.13.0

type EventChannelPinsUpdate struct {
	GuildID          *snowflake.ID `json:"guild_id"`
	ChannelID        snowflake.ID  `json:"channel_id"`
	LastPinTimestamp *time.Time    `json:"last_pin_timestamp"`
}

type EventChannelUpdate added in v0.13.0

type EventChannelUpdate struct {
	discord.Channel
}

func (*EventChannelUpdate) UnmarshalJSON added in v0.13.0

func (e *EventChannelUpdate) UnmarshalJSON(data []byte) error

type EventData added in v0.13.0

type EventData interface {
	MessageData
	// contains filtered or unexported methods
}

func UnmarshalEventData added in v0.13.2

func UnmarshalEventData(data []byte, eventType EventType) (EventData, error)

type EventGuildBanAdd added in v0.13.0

type EventGuildBanAdd struct {
	GuildID snowflake.ID `json:"guild_id"`
	User    discord.User `json:"user"`
}

type EventGuildBanRemove added in v0.13.0

type EventGuildBanRemove struct {
	GuildID snowflake.ID `json:"guild_id"`
	User    discord.User `json:"user"`
}

type EventGuildCreate added in v0.13.0

type EventGuildCreate struct {
	discord.GatewayGuild
}

type EventGuildDelete added in v0.13.0

type EventGuildDelete struct {
	discord.GatewayGuild
}

type EventGuildEmojisUpdate added in v0.13.0

type EventGuildEmojisUpdate struct {
	GuildID snowflake.ID    `json:"guild_id"`
	Emojis  []discord.Emoji `json:"emojis"`
}

type EventGuildIntegrationsUpdate added in v0.13.0

type EventGuildIntegrationsUpdate struct {
	GuildID snowflake.ID `json:"guild_id"`
}

type EventGuildMemberAdd added in v0.13.0

type EventGuildMemberAdd struct {
	discord.Member
}

type EventGuildMemberRemove added in v0.13.0

type EventGuildMemberRemove struct {
	GuildID snowflake.ID `json:"guild_id"`
	User    discord.User `json:"user"`
}

type EventGuildMemberUpdate added in v0.13.0

type EventGuildMemberUpdate struct {
	discord.Member
}

type EventGuildMembersChunk added in v0.13.0

type EventGuildMembersChunk struct {
	GuildID    snowflake.ID       `json:"guild_id"`
	Members    []discord.Member   `json:"members"`
	ChunkIndex int                `json:"chunk_index"`
	ChunkCount int                `json:"chunk_count"`
	NotFound   []snowflake.ID     `json:"not_found"`
	Presences  []discord.Presence `json:"presences"`
	Nonce      string             `json:"nonce"`
}

type EventGuildRoleCreate added in v0.13.0

type EventGuildRoleCreate struct {
	GuildID snowflake.ID `json:"guild_id"`
	Role    discord.Role `json:"role"`
}

type EventGuildRoleDelete added in v0.13.0

type EventGuildRoleDelete struct {
	GuildID snowflake.ID `json:"guild_id"`
	RoleID  snowflake.ID `json:"role_id"`
}

type EventGuildRoleUpdate added in v0.13.0

type EventGuildRoleUpdate struct {
	GuildID snowflake.ID `json:"guild_id"`
	Role    discord.Role `json:"role"`
}

type EventGuildScheduledEventCreate added in v0.13.0

type EventGuildScheduledEventCreate struct {
	discord.GuildScheduledEvent
}

type EventGuildScheduledEventDelete added in v0.13.0

type EventGuildScheduledEventDelete struct {
	discord.GuildScheduledEvent
}

type EventGuildScheduledEventUpdate added in v0.13.0

type EventGuildScheduledEventUpdate struct {
	discord.GuildScheduledEvent
}

type EventGuildScheduledEventUserAdd added in v0.13.0

type EventGuildScheduledEventUserAdd struct {
	GuildScheduledEventID snowflake.ID `json:"guild_scheduled_event_id"`
	UserID                snowflake.ID `json:"user_id"`
	GuildID               snowflake.ID `json:"guild_id"`
}

type EventGuildScheduledEventUserRemove added in v0.13.0

type EventGuildScheduledEventUserRemove struct {
	GuildScheduledEventID snowflake.ID `json:"guild_scheduled_event_id"`
	UserID                snowflake.ID `json:"user_id"`
	GuildID               snowflake.ID `json:"guild_id"`
}

type EventGuildStickersUpdate added in v0.13.0

type EventGuildStickersUpdate struct {
	GuildID  snowflake.ID      `json:"guild_id"`
	Stickers []discord.Sticker `json:"stickers"`
}

type EventGuildUpdate added in v0.13.0

type EventGuildUpdate struct {
	discord.GatewayGuild
}

type EventHandlerFunc

type EventHandlerFunc func(gatewayEventType EventType, sequenceNumber int, shardID int, event EventData)

EventHandlerFunc is a function that is called when an event is received.

type EventIntegrationCreate added in v0.13.0

type EventIntegrationCreate struct {
	discord.Integration
	GuildID snowflake.ID `json:"guild_id"`
}

func (*EventIntegrationCreate) UnmarshalJSON added in v0.13.0

func (e *EventIntegrationCreate) UnmarshalJSON(data []byte) error

type EventIntegrationDelete added in v0.13.0

type EventIntegrationDelete struct {
	ID            snowflake.ID  `json:"id"`
	GuildID       snowflake.ID  `json:"guild_id"`
	ApplicationID *snowflake.ID `json:"application_id"`
}

type EventIntegrationUpdate added in v0.13.0

type EventIntegrationUpdate struct {
	discord.Integration
	GuildID snowflake.ID `json:"guild_id"`
}

func (*EventIntegrationUpdate) UnmarshalJSON added in v0.13.0

func (e *EventIntegrationUpdate) UnmarshalJSON(data []byte) error

type EventInteractionCreate added in v0.13.0

type EventInteractionCreate struct {
	discord.Interaction
}

func (*EventInteractionCreate) UnmarshalJSON added in v0.13.0

func (e *EventInteractionCreate) UnmarshalJSON(data []byte) error

type EventInviteCreate added in v0.13.0

type EventInviteCreate struct {
	discord.Invite
}

type EventInviteDelete added in v0.13.0

type EventInviteDelete struct {
	ChannelID snowflake.ID  `json:"channel_id"`
	GuildID   *snowflake.ID `json:"guild_id"`
	Code      string        `json:"code"`
}

type EventMessageCreate added in v0.13.0

type EventMessageCreate struct {
	discord.Message
}

type EventMessageDelete added in v0.13.0

type EventMessageDelete struct {
	ID        snowflake.ID  `json:"id"`
	ChannelID snowflake.ID  `json:"channel_id"`
	GuildID   *snowflake.ID `json:"guild_id,omitempty"`
}

type EventMessageDeleteBulk added in v0.13.0

type EventMessageDeleteBulk struct {
	IDs       []snowflake.ID `json:"id"`
	ChannelID snowflake.ID   `json:"channel_id"`
	GuildID   *snowflake.ID  `json:"guild_id,omitempty"`
}

type EventMessageReactionAdd added in v0.13.0

type EventMessageReactionAdd struct {
	UserID    snowflake.ID          `json:"user_id"`
	ChannelID snowflake.ID          `json:"channel_id"`
	MessageID snowflake.ID          `json:"message_id"`
	GuildID   *snowflake.ID         `json:"guild_id"`
	Member    *discord.Member       `json:"member"`
	Emoji     discord.ReactionEmoji `json:"emoji"`
}

type EventMessageReactionRemove added in v0.13.0

type EventMessageReactionRemove struct {
	UserID    snowflake.ID          `json:"user_id"`
	ChannelID snowflake.ID          `json:"channel_id"`
	MessageID snowflake.ID          `json:"message_id"`
	GuildID   *snowflake.ID         `json:"guild_id"`
	Emoji     discord.ReactionEmoji `json:"emoji"`
}

type EventMessageReactionRemoveAll added in v0.13.0

type EventMessageReactionRemoveAll struct {
	ChannelID snowflake.ID  `json:"channel_id"`
	MessageID snowflake.ID  `json:"message_id"`
	GuildID   *snowflake.ID `json:"guild_id"`
}

type EventMessageReactionRemoveEmoji added in v0.13.0

type EventMessageReactionRemoveEmoji struct {
	ChannelID snowflake.ID          `json:"channel_id"`
	MessageID snowflake.ID          `json:"message_id"`
	GuildID   *snowflake.ID         `json:"guild_id"`
	Emoji     discord.ReactionEmoji `json:"emoji"`
}

type EventMessageUpdate added in v0.13.0

type EventMessageUpdate struct {
	discord.Message
}

type EventPresenceUpdate added in v0.13.0

type EventPresenceUpdate struct {
	discord.Presence
}

type EventRaw added in v0.13.0

type EventRaw struct {
	EventType EventType
	Payload   io.Reader
}

type EventReady added in v0.13.0

type EventReady struct {
	Version     int                        `json:"v"`
	User        discord.OAuth2User         `json:"user"`
	Guilds      []discord.UnavailableGuild `json:"guilds"`
	SessionID   string                     `json:"session_id"`
	Shard       []int                      `json:"shard,omitempty"`
	Application discord.PartialApplication `json:"application"`
}

EventReady is the event sent by discord when you successfully Identify

type EventStageInstanceCreate added in v0.13.0

type EventStageInstanceCreate struct {
	discord.StageInstance
}

type EventStageInstanceDelete added in v0.13.0

type EventStageInstanceDelete struct {
	discord.StageInstance
}

type EventStageInstanceUpdate added in v0.13.0

type EventStageInstanceUpdate struct {
	discord.StageInstance
}

type EventThreadCreate added in v0.13.0

type EventThreadCreate struct {
	discord.GuildThread
	ThreadMember discord.ThreadMember `json:"thread_member"`
}

type EventThreadDelete added in v0.13.0

type EventThreadDelete struct {
	ID       snowflake.ID        `json:"id"`
	GuildID  snowflake.ID        `json:"guild_id"`
	ParentID snowflake.ID        `json:"parent_id"`
	Type     discord.ChannelType `json:"type"`
}

type EventThreadListSync added in v0.13.0

type EventThreadListSync struct {
	GuildID    snowflake.ID           `json:"guild_id"`
	ChannelIDs []snowflake.ID         `json:"channel_ids"`
	Threads    []discord.GuildThread  `json:"threads"`
	Members    []discord.ThreadMember `json:"members"`
}

type EventThreadMemberUpdate added in v0.13.0

type EventThreadMemberUpdate struct {
	discord.ThreadMember
}

type EventThreadMembersUpdate added in v0.13.0

type EventThreadMembersUpdate struct {
	ID               snowflake.ID        `json:"id"`
	GuildID          snowflake.ID        `json:"guild_id"`
	MemberCount      int                 `json:"member_count"`
	AddedMembers     []AddedThreadMember `json:"added_members"`
	RemovedMemberIDs []snowflake.ID      `json:"removed_member_ids"`
}

type EventThreadUpdate added in v0.13.0

type EventThreadUpdate struct {
	discord.GuildThread
}

type EventType added in v0.13.0

type EventType string

EventType wraps all EventType types

const (
	// EventTypeRaw is not a real event type, but is used to pass raw payloads to the bot.EventManager
	EventTypeRaw                                 EventType = "__RAW__"
	EventTypeReady                               EventType = "READY"
	EventTypeResumed                             EventType = "RESUMED"
	EventTypeApplicationCommandPermissionsUpdate EventType = "APPLICATION_COMMAND_PERMISSIONS_UPDATE"
	EventTypeAutoModerationRuleCreate            EventType = "AUTO_MODERATION_RULE_CREATE"
	EventTypeAutoModerationRuleUpdate            EventType = "AUTO_MODERATION_RULE_UPDATE"
	EventTypeAutoModerationRuleDelete            EventType = "AUTO_MODERATION_RULE_DELETE"
	EventTypeAutoModerationActionExecution       EventType = "AUTO_MODERATION_ACTION_EXECUTION"
	EventTypeChannelCreate                       EventType = "CHANNEL_CREATE"
	EventTypeChannelUpdate                       EventType = "CHANNEL_UPDATE"
	EventTypeChannelDelete                       EventType = "CHANNEL_DELETE"
	EventTypeChannelPinsUpdate                   EventType = "CHANNEL_PINS_UPDATE"
	EventTypeThreadCreate                        EventType = "THREAD_CREATE"
	EventTypeThreadUpdate                        EventType = "THREAD_UPDATE"
	EventTypeThreadDelete                        EventType = "THREAD_DELETE"
	EventTypeThreadListSync                      EventType = "THREAD_LIST_SYNC"
	EventTypeThreadMemberUpdate                  EventType = "THREAD_MEMBER_UPDATE"
	EventTypeThreadMembersUpdate                 EventType = "THREAD_MEMBERS_UPDATE"
	EventTypeGuildCreate                         EventType = "GUILD_CREATE"
	EventTypeGuildUpdate                         EventType = "GUILD_UPDATE"
	EventTypeGuildDelete                         EventType = "GUILD_DELETE"
	EventTypeGuildBanAdd                         EventType = "GUILD_BAN_ADD"
	EventTypeGuildBanRemove                      EventType = "GUILD_BAN_REMOVE"
	EventTypeGuildEmojisUpdate                   EventType = "GUILD_EMOJIS_UPDATE"
	EventTypeGuildStickersUpdate                 EventType = "GUILD_STICKERS_UPDATE"
	EventTypeGuildIntegrationsUpdate             EventType = "GUILD_INTEGRATIONS_UPDATE"
	EventTypeGuildMemberAdd                      EventType = "GUILD_MEMBER_ADD"
	EventTypeGuildMemberRemove                   EventType = "GUILD_MEMBER_REMOVE"
	EventTypeGuildMemberUpdate                   EventType = "GUILD_MEMBER_UPDATE"
	EventTypeGuildMembersChunk                   EventType = "GUILD_MEMBERS_CHUNK"
	EventTypeGuildRoleCreate                     EventType = "GUILD_ROLE_CREATE"
	EventTypeGuildRoleUpdate                     EventType = "GUILD_ROLE_UPDATE"
	EventTypeGuildRoleDelete                     EventType = "GUILD_ROLE_DELETE"
	EventTypeGuildScheduledEventCreate           EventType = "GUILD_SCHEDULED_EVENT_CREATE"
	EventTypeGuildScheduledEventUpdate           EventType = "GUILD_SCHEDULED_EVENT_UPDATE"
	EventTypeGuildScheduledEventDelete           EventType = "GUILD_SCHEDULED_EVENT_DELETE"
	EventTypeGuildScheduledEventUserAdd          EventType = "GUILD_SCHEDULED_EVENT_USER_ADD"
	EventTypeGuildScheduledEventUserRemove       EventType = "GUILD_SCHEDULED_EVENT_USER_REMOVE"
	EventTypeIntegrationCreate                   EventType = "INTEGRATION_CREATE"
	EventTypeIntegrationUpdate                   EventType = "INTEGRATION_UPDATE"
	EventTypeIntegrationDelete                   EventType = "INTEGRATION_DELETE"
	EventTypeInteractionCreate                   EventType = "INTERACTION_CREATE"
	EventTypeInviteCreate                        EventType = "INVITE_CREATE"
	EventTypeInviteDelete                        EventType = "INVITE_DELETE"
	EventTypeMessageCreate                       EventType = "MESSAGE_CREATE"
	EventTypeMessageUpdate                       EventType = "MESSAGE_UPDATE"
	EventTypeMessageDelete                       EventType = "MESSAGE_DELETE"
	EventTypeMessageDeleteBulk                   EventType = "MESSAGE_DELETE_BULK"
	EventTypeMessageReactionAdd                  EventType = "MESSAGE_REACTION_ADD"
	EventTypeMessageReactionRemove               EventType = "MESSAGE_REACTION_REMOVE"
	EventTypeMessageReactionRemoveAll            EventType = "MESSAGE_REACTION_REMOVE_ALL"
	EventTypeMessageReactionRemoveEmoji          EventType = "MESSAGE_REACTION_REMOVE_EMOJI"
	EventTypePresenceUpdate                      EventType = "PRESENCE_UPDATE"
	EventTypeStageInstanceCreate                 EventType = "STAGE_INSTANCE_CREATE"
	EventTypeStageInstanceDelete                 EventType = "STAGE_INSTANCE_DELETE"
	EventTypeStageInstanceUpdate                 EventType = "STAGE_INSTANCE_UPDATE"
	EventTypeTypingStart                         EventType = "TYPING_START"
	EventTypeUserUpdate                          EventType = "USER_UPDATE"
	EventTypeVoiceStateUpdate                    EventType = "VOICE_STATE_UPDATE"
	EventTypeVoiceServerUpdate                   EventType = "VOICE_SERVER_UPDATE"
	EventTypeWebhooksUpdate                      EventType = "WEBHOOKS_UPDATE"
)

Constants for the gateway events

type EventTypingStart added in v0.13.0

type EventTypingStart struct {
	ChannelID snowflake.ID    `json:"channel_id"`
	GuildID   *snowflake.ID   `json:"guild_id,omitempty"`
	UserID    snowflake.ID    `json:"user_id"`
	Timestamp time.Time       `json:"timestamp"`
	Member    *discord.Member `json:"member,omitempty"`
	User      discord.User    `json:"user"`
}

func (*EventTypingStart) UnmarshalJSON added in v0.13.0

func (e *EventTypingStart) UnmarshalJSON(data []byte) error

type EventUserUpdate added in v0.13.0

type EventUserUpdate struct {
	discord.OAuth2User
}

type EventVoiceServerUpdate added in v0.13.0

type EventVoiceServerUpdate struct {
	Token    string       `json:"token"`
	GuildID  snowflake.ID `json:"guild_id"`
	Endpoint *string      `json:"endpoint"`
}

type EventVoiceStateUpdate added in v0.13.0

type EventVoiceStateUpdate struct {
	discord.VoiceState
	Member discord.Member `json:"member"`
}

type EventWebhooksUpdate added in v0.13.0

type EventWebhooksUpdate struct {
	GuildID   snowflake.ID `json:"guild_id"`
	ChannelID snowflake.ID `json:"channel_id"`
}

type Gateway

type Gateway interface {
	// Logger returns the logger that is used by the Gateway.
	Logger() log.Logger

	// ShardID returns the shard ID that this Gateway is configured to use.
	ShardID() int

	// ShardCount returns the total number of shards that this Gateway is configured to use.
	ShardCount() int

	// SessionID returns the session ID that is used by this Gateway.
	// This may be nil if the Gateway was never connected to Discord, was gracefully closed with websocket.CloseNormalClosure or websocket.CloseGoingAway.
	SessionID() *string

	// LastSequenceReceived returns the last sequence number that was received by the Gateway.
	// This may be nil if the Gateway was never connected to Discord, was gracefully closed with websocket.CloseNormalClosure or websocket.CloseGoingAway.
	LastSequenceReceived() *int

	// Intents returns the Intents that are used by this Gateway.
	Intents() Intents

	// Open connects this Gateway to the Discord API.
	Open(ctx context.Context) error

	// Close gracefully closes the Gateway with the websocket.CloseNormalClosure code.
	// If the context is done, the Gateway connection will be killed.
	Close(ctx context.Context)

	// CloseWithCode closes the Gateway with the given code & message.
	// If the context is done, the Gateway connection will be killed.
	CloseWithCode(ctx context.Context, code int, message string)

	// Status returns the Status of the Gateway.
	Status() Status

	// Send sends a message to the Discord gateway with the opCode and data.
	// If context is deadline exceeds, the message sending will be aborted.
	Send(ctx context.Context, op Opcode, data MessageData) error

	// Latency returns the latency of the Gateway.
	// This is calculated by the time it takes to send a heartbeat and receive a heartbeat ack by discord.
	Latency() time.Duration
}

Gateway is what is used to connect to discord.

func New

func New(token string, eventHandlerFunc EventHandlerFunc, closeHandlerFunc CloseHandlerFunc, opts ...ConfigOpt) Gateway

New creates a new Gateway instance with the provided token, eventHandlerFunc, closeHandlerFunc and ConfigOpt(s).

type IdentifyCommandDataProperties added in v0.13.0

type IdentifyCommandDataProperties struct {
	OS      string `json:"os"`      // user OS
	Browser string `json:"browser"` // library name
	Device  string `json:"device"`  // library name
}

IdentifyCommandDataProperties is used for specifying to discord which library and OS the bot is using, is automatically handled by the library and should rarely be used.

type Intents added in v0.13.0

type Intents int64

Intents is an extension of the Bit structure used when identifying with discord

const (
	IntentGuilds Intents = 1 << iota
	IntentGuildMembers
	IntentGuildBans
	IntentGuildEmojisAndStickers
	IntentGuildIntegrations
	IntentGuildWebhooks
	IntentGuildInvites
	IntentGuildVoiceStates
	IntentGuildPresences
	IntentGuildMessages
	IntentGuildMessageReactions
	IntentGuildMessageTyping
	IntentDirectMessages
	IntentDirectMessageReactions
	IntentDirectMessageTyping
	IntentMessageContent
	IntentGuildScheduledEvents

	IntentAutoModerationConfiguration
	IntentAutoModerationExecution

	IntentsGuild = IntentGuilds |
		IntentGuildMembers |
		IntentGuildBans |
		IntentGuildEmojisAndStickers |
		IntentGuildIntegrations |
		IntentGuildWebhooks |
		IntentGuildInvites |
		IntentGuildVoiceStates |
		IntentGuildPresences |
		IntentGuildMessages |
		IntentGuildMessageReactions |
		IntentGuildMessageTyping |
		IntentGuildScheduledEvents

	IntentsDirectMessage = IntentDirectMessages |
		IntentDirectMessageReactions |
		IntentDirectMessageTyping

	IntentsNonPrivileged = IntentGuilds |
		IntentGuildBans |
		IntentGuildEmojisAndStickers |
		IntentGuildIntegrations |
		IntentGuildWebhooks |
		IntentGuildInvites |
		IntentGuildVoiceStates |
		IntentGuildMessages |
		IntentGuildMessageReactions |
		IntentGuildMessageTyping |
		IntentDirectMessages |
		IntentDirectMessageReactions |
		IntentDirectMessageTyping |
		IntentGuildScheduledEvents |
		IntentAutoModerationConfiguration |
		IntentAutoModerationExecution

	IntentsPrivileged = IntentGuildMembers |
		IntentGuildPresences | IntentMessageContent

	IntentsAll = IntentsNonPrivileged |
		IntentsPrivileged

	IntentsDefault = IntentsNone

	IntentsNone Intents = 0
)

Constants for the different bit offsets of Intents

func (Intents) Add added in v0.13.0

func (i Intents) Add(bits ...Intents) Intents

Add allows you to add multiple bits together, producing a new bit

func (Intents) Has added in v0.13.0

func (i Intents) Has(bits ...Intents) bool

Has will ensure that the bit includes all the bits entered

func (Intents) Missing added in v0.13.0

func (i Intents) Missing(bits ...Intents) bool

Missing will check whether the bit is missing any one of the bits

func (Intents) Remove added in v0.13.0

func (i Intents) Remove(bits ...Intents) Intents

Remove allows you to subtract multiple bits from the first, producing a new bit

type Message added in v0.13.0

type Message struct {
	Op   Opcode          `json:"op"`
	S    int             `json:"s,omitempty"`
	T    EventType       `json:"t,omitempty"`
	D    MessageData     `json:"d,omitempty"`
	RawD json.RawMessage `json:"-"`
}

Message raw Message type

func (*Message) UnmarshalJSON added in v0.13.0

func (e *Message) UnmarshalJSON(data []byte) error

type MessageData added in v0.13.0

type MessageData interface {
	// contains filtered or unexported methods
}

type MessageDataHeartbeat added in v0.13.0

type MessageDataHeartbeat int

MessageDataHeartbeat is used to ensure the websocket connection remains open, and disconnect if not.

type MessageDataHello added in v0.13.0

type MessageDataHello struct {
	HeartbeatInterval int `json:"heartbeat_interval"`
}

type MessageDataIdentify added in v0.13.0

type MessageDataIdentify struct {
	Token          string                        `json:"token"`
	Properties     IdentifyCommandDataProperties `json:"properties"`
	Compress       bool                          `json:"compress,omitempty"`
	LargeThreshold int                           `json:"large_threshold,omitempty"`
	Shard          *[2]int                       `json:"shard,omitempty"`
	Intents        Intents                       `json:"intents"`
	Presence       *MessageDataPresenceUpdate    `json:"presence,omitempty"`
}

MessageDataIdentify is the data used in IdentifyCommandData

type MessageDataInvalidSession added in v0.13.0

type MessageDataInvalidSession bool

type MessageDataPresenceUpdate added in v0.13.0

type MessageDataPresenceUpdate struct {
	Since      *int64               `json:"since"`
	Activities []discord.Activity   `json:"activities"`
	Status     discord.OnlineStatus `json:"status"`
	AFK        bool                 `json:"afk"`
}

MessageDataPresenceUpdate is used for updating Client's presence

func NewCompetingPresence added in v0.13.0

func NewCompetingPresence(name string, status discord.OnlineStatus, afk bool) MessageDataPresenceUpdate

NewCompetingPresence creates a new Presence of type ActivityTypeCompeting

func NewGamePresence added in v0.13.0

func NewGamePresence(name string, status discord.OnlineStatus, afk bool) MessageDataPresenceUpdate

NewGamePresence creates a new Presence of type ActivityTypeGame

func NewListeningPresence added in v0.13.0

func NewListeningPresence(name string, status discord.OnlineStatus, afk bool) MessageDataPresenceUpdate

NewListeningPresence creates a new Presence of type ActivityTypeListening

func NewPresence added in v0.13.0

func NewPresence(activityType discord.ActivityType, name string, url string, status discord.OnlineStatus, afk bool) MessageDataPresenceUpdate

NewPresence creates a new Presence with the provided properties

func NewStreamingPresence added in v0.13.0

func NewStreamingPresence(name string, url string, status discord.OnlineStatus, afk bool) MessageDataPresenceUpdate

NewStreamingPresence creates a new Presence of type ActivityTypeStreaming

func NewWatchingPresence added in v0.13.0

func NewWatchingPresence(name string, status discord.OnlineStatus, afk bool) MessageDataPresenceUpdate

NewWatchingPresence creates a new Presence of type ActivityTypeWatching

type MessageDataRequestGuildMembers added in v0.13.0

type MessageDataRequestGuildMembers struct {
	GuildID   snowflake.ID   `json:"guild_id"`
	Query     *string        `json:"query,omitempty"` //If specified, user_ids must not be entered
	Limit     *int           `json:"limit,omitempty"` //Must be >=1 if query/user_ids is used, otherwise 0
	Presences bool           `json:"presences,omitempty"`
	UserIDs   []snowflake.ID `json:"user_ids,omitempty"` //If specified, query must not be entered
	Nonce     string         `json:"nonce,omitempty"`    //All responses are hashed with this nonce, optional
}

MessageDataRequestGuildMembers is used for fetching all the members of a guild_events. It is recommended you have a strict member caching policy when using this.

type MessageDataResume added in v0.13.0

type MessageDataResume struct {
	Token     string `json:"token"`
	SessionID string `json:"session_id"`
	Seq       int    `json:"seq"`
}

MessageDataResume is used to resume a connection to discord in the case that you are disconnected. Is automatically handled by the library and should rarely be used.

type MessageDataVoiceStateUpdate added in v0.13.0

type MessageDataVoiceStateUpdate struct {
	GuildID   snowflake.ID  `json:"guild_id"`
	ChannelID *snowflake.ID `json:"channel_id"`
	SelfMute  bool          `json:"self_mute"`
	SelfDeaf  bool          `json:"self_deaf"`
}

MessageDataVoiceStateUpdate is used for updating the bots voice state in a guild

type Opcode added in v0.13.0

type Opcode int

Opcode are opcodes used by discord

const (
	OpcodeDispatch Opcode = iota
	OpcodeHeartbeat
	OpcodeIdentify
	OpcodePresenceUpdate
	OpcodeVoiceStateUpdate

	OpcodeResume
	OpcodeReconnect
	OpcodeRequestGuildMembers
	OpcodeInvalidSession
	OpcodeHello
	OpcodeHeartbeatACK
)

https://discord.com/developers/docs/topics/opcodes-and-status-codes#gateway-gateway-opcodes

type RateLimiter added in v0.12.0

type RateLimiter interface {
	// Logger returns the logger used by the RateLimiter.
	Logger() log.Logger

	// Close gracefully closes the RateLimiter.
	// If the context deadline is exceeded, the RateLimiter will be closed immediately.
	Close(ctx context.Context)

	// Reset resets the RateLimiter to its initial state.
	Reset()

	// Wait waits for the RateLimiter to be ready to send a new message.
	// If the context deadline is exceeded, Wait will return immediately and no message will be sent.
	Wait(ctx context.Context) error

	// Unlock unlocks the RateLimiter and allows the next message to be sent.
	Unlock()
}

RateLimiter provides handles the rate limiting logic for connecting to Discord's Gateway.

func NewRateLimiter added in v0.12.0

func NewRateLimiter(opts ...RateLimiterConfigOpt) RateLimiter

NewRateLimiter creates a new default RateLimiter with the given RateLimiterConfigOpt(s).

type RateLimiterConfig added in v0.12.0

type RateLimiterConfig struct {
	Logger            log.Logger
	CommandsPerMinute int
}

RateLimiterConfig lets you configure your Gateway instance.

func DefaultRateLimiterConfig added in v0.12.0

func DefaultRateLimiterConfig() *RateLimiterConfig

DefaultRateLimiterConfig returns a RateLimiterConfig with sensible defaults.

func (*RateLimiterConfig) Apply added in v0.12.0

func (c *RateLimiterConfig) Apply(opts []RateLimiterConfigOpt)

Apply applies the given RateLimiterConfigOpt(s) to the RateLimiterConfig

type RateLimiterConfigOpt added in v0.12.0

type RateLimiterConfigOpt func(config *RateLimiterConfig)

RateLimiterConfigOpt is a type alias for a function that takes a RateLimiterConfig and is used to configure your Server.

func WithCommandsPerMinute added in v0.12.0

func WithCommandsPerMinute(commandsPerMinute int) RateLimiterConfigOpt

WithCommandsPerMinute sets the number of commands per minute that the Gateway will allow.

func WithRateLimiterLogger added in v0.12.0

func WithRateLimiterLogger(logger log.Logger) RateLimiterConfigOpt

WithRateLimiterLogger sets the Logger for the Gateway.

type Status

type Status int

Status is the state that the client is currently in.

const (
	// StatusUnconnected is the initial state when a new Gateway is created.
	StatusUnconnected Status = iota

	// StatusConnecting is the state when the client is connecting to the Discord gateway.
	StatusConnecting

	// StatusWaitingForHello is the state when the Gateway is waiting for the first OpcodeHello packet.
	StatusWaitingForHello

	// StatusIdentifying is the state when the Gateway received its first OpcodeHello packet and now sends a OpcodeIdentify packet.
	StatusIdentifying

	// StatusResuming is the state when the Gateway received its first OpcodeHello packet and now sends a OpcodeResume packet.
	StatusResuming

	// StatusWaitingForReady is the state when the Gateway received sent a OpcodeIdentify or OpcodeResume packet and now waits for a OpcodeDispatch with EventTypeReady packet.
	StatusWaitingForReady

	// StatusReady is the state when the Gateway received a OpcodeDispatch with EventTypeReady packet.
	StatusReady

	// StatusDisconnected is the state when the Gateway is disconnected.
	// Either due to an error or because the Gateway was closed gracefully.
	StatusDisconnected
)

Indicates how far along the client is too connecting.

func (Status) IsConnected

func (s Status) IsConnected() bool

IsConnected returns whether the Gateway is connected.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL