mirror of
https://github.com/diamondburned/arikawa.git
synced 2024-12-01 03:03:48 +00:00
diamondburned
a2333996a2
This commit changes the gateway.Presence struct to be similar to commits prior to the last refactor, that is, the struct would have the User and GuildID fields. This is done so it's easier to store them.
393 lines
12 KiB
Go
393 lines
12 KiB
Go
package gateway
|
|
|
|
import "github.com/diamondburned/arikawa/v2/discord"
|
|
|
|
// Rules: VOICE_STATE_UPDATE -> VoiceStateUpdateEvent
|
|
|
|
// https://discord.com/developers/docs/topics/gateway#connecting-and-resuming
|
|
type (
|
|
HelloEvent struct {
|
|
HeartbeatInterval discord.Milliseconds `json:"heartbeat_interval"`
|
|
}
|
|
|
|
// Ready is too big, so it's moved to ready.go
|
|
|
|
ResumedEvent struct{}
|
|
|
|
// InvalidSessionEvent indicates if the event is resumable.
|
|
InvalidSessionEvent bool
|
|
)
|
|
|
|
// https://discord.com/developers/docs/topics/gateway#channels
|
|
type (
|
|
ChannelCreateEvent struct {
|
|
discord.Channel
|
|
}
|
|
ChannelUpdateEvent struct {
|
|
discord.Channel
|
|
}
|
|
ChannelDeleteEvent struct {
|
|
discord.Channel
|
|
}
|
|
ChannelPinsUpdateEvent struct {
|
|
GuildID discord.GuildID `json:"guild_id,omitempty"`
|
|
ChannelID discord.ChannelID `json:"channel_id,omitempty"`
|
|
LastPin discord.Timestamp `json:"timestamp,omitempty"`
|
|
}
|
|
|
|
ChannelUnreadUpdateEvent struct {
|
|
GuildID discord.GuildID `json:"guild_id"`
|
|
|
|
ChannelUnreadUpdates []struct {
|
|
ID discord.ChannelID `json:"id"`
|
|
LastMessageID discord.MessageID `json:"last_message_id"`
|
|
}
|
|
}
|
|
)
|
|
|
|
// https://discord.com/developers/docs/topics/gateway#guilds
|
|
type (
|
|
GuildCreateEvent struct {
|
|
discord.Guild
|
|
|
|
Joined discord.Timestamp `json:"timestamp,omitempty"`
|
|
Large bool `json:"large,omitempty"`
|
|
Unavailable bool `json:"unavailable,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 []Presence `json:"presences,omitempty"`
|
|
}
|
|
GuildUpdateEvent struct {
|
|
discord.Guild
|
|
}
|
|
GuildDeleteEvent struct {
|
|
ID discord.GuildID `json:"id"`
|
|
// Unavailable if false == removed
|
|
Unavailable bool `json:"unavailable"`
|
|
}
|
|
|
|
GuildBanAddEvent struct {
|
|
GuildID discord.GuildID `json:"guild_id"`
|
|
User discord.User `json:"user"`
|
|
}
|
|
GuildBanRemoveEvent struct {
|
|
GuildID discord.GuildID `json:"guild_id"`
|
|
User discord.User `json:"user"`
|
|
}
|
|
|
|
GuildEmojisUpdateEvent struct {
|
|
GuildID discord.GuildID `json:"guild_id"`
|
|
Emojis []discord.Emoji `json:"emoji"`
|
|
}
|
|
|
|
GuildIntegrationsUpdateEvent struct {
|
|
GuildID discord.GuildID `json:"guild_id"`
|
|
}
|
|
|
|
GuildMemberAddEvent struct {
|
|
discord.Member
|
|
GuildID discord.GuildID `json:"guild_id"`
|
|
}
|
|
GuildMemberRemoveEvent struct {
|
|
GuildID discord.GuildID `json:"guild_id"`
|
|
User discord.User `json:"user"`
|
|
}
|
|
GuildMemberUpdateEvent struct {
|
|
GuildID discord.GuildID `json:"guild_id"`
|
|
RoleIDs []discord.RoleID `json:"roles"`
|
|
User discord.User `json:"user"`
|
|
Nick string `json:"nick"`
|
|
}
|
|
|
|
// GuildMembersChunkEvent is sent when Guild Request Members is called.
|
|
GuildMembersChunkEvent struct {
|
|
GuildID discord.GuildID `json:"guild_id"`
|
|
Members []discord.Member `json:"members"`
|
|
|
|
ChunkIndex int `json:"chunk_index"`
|
|
ChunkCount int `json:"chunk_count"`
|
|
|
|
// Whatever's not found goes here
|
|
NotFound []string `json:"not_found,omitempty"`
|
|
|
|
// Only filled if requested
|
|
Presences []Presence `json:"presences,omitempty"`
|
|
Nonce string `json:"nonce,omitempty"`
|
|
}
|
|
|
|
// 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.
|
|
GuildMemberListUpdate struct {
|
|
ID string `json:"id"`
|
|
GuildID discord.GuildID `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"`
|
|
}
|
|
GuildMemberListGroup struct {
|
|
ID string `json:"id"` // either discord.RoleID, "online" or "offline"
|
|
Count uint64 `json:"count"`
|
|
}
|
|
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"`
|
|
}
|
|
// GuildMemberListOpItem is an enum. Either of the fields are provided, but
|
|
// never both. Refer to (*GuildMemberListUpdate).Ops for more.
|
|
GuildMemberListOpItem struct {
|
|
Group *GuildMemberListGroup `json:"group,omitempty"`
|
|
Member *struct {
|
|
discord.Member
|
|
HoistedRole string `json:"hoisted_role"`
|
|
Presence Presence `json:"presence"`
|
|
} `json:"member,omitempty"`
|
|
}
|
|
|
|
GuildRoleCreateEvent struct {
|
|
GuildID discord.GuildID `json:"guild_id"`
|
|
Role discord.Role `json:"role"`
|
|
}
|
|
GuildRoleUpdateEvent struct {
|
|
GuildID discord.GuildID `json:"guild_id"`
|
|
Role discord.Role `json:"role"`
|
|
}
|
|
GuildRoleDeleteEvent struct {
|
|
GuildID discord.GuildID `json:"guild_id"`
|
|
RoleID discord.RoleID `json:"role_id"`
|
|
}
|
|
)
|
|
|
|
func (u GuildMemberUpdateEvent) Update(m *discord.Member) {
|
|
m.RoleIDs = u.RoleIDs
|
|
m.User = u.User
|
|
m.Nick = u.Nick
|
|
}
|
|
|
|
// https://discord.com/developers/docs/topics/gateway#invites
|
|
type (
|
|
InviteCreateEvent struct {
|
|
Code string `json:"code"`
|
|
CreatedAt discord.Timestamp `json:"created_at"`
|
|
ChannelID discord.ChannelID `json:"channel_id"`
|
|
GuildID discord.GuildID `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
|
|
}
|
|
InviteDeleteEvent struct {
|
|
Code string `json:"code"`
|
|
ChannelID discord.ChannelID `json:"channel_id"`
|
|
GuildID discord.GuildID `json:"guild_id,omitempty"`
|
|
}
|
|
)
|
|
|
|
// https://discord.com/developers/docs/topics/gateway#messages
|
|
type (
|
|
MessageCreateEvent struct {
|
|
discord.Message
|
|
Member *discord.Member `json:"member,omitempty"`
|
|
}
|
|
MessageUpdateEvent struct {
|
|
discord.Message
|
|
Member *discord.Member `json:"member,omitempty"`
|
|
}
|
|
MessageDeleteEvent struct {
|
|
ID discord.MessageID `json:"id"`
|
|
ChannelID discord.ChannelID `json:"channel_id"`
|
|
GuildID discord.GuildID `json:"guild_id,omitempty"`
|
|
}
|
|
MessageDeleteBulkEvent struct {
|
|
IDs []discord.MessageID `json:"ids"`
|
|
ChannelID discord.ChannelID `json:"channel_id"`
|
|
GuildID discord.GuildID `json:"guild_id,omitempty"`
|
|
}
|
|
|
|
MessageReactionAddEvent struct {
|
|
UserID discord.UserID `json:"user_id"`
|
|
ChannelID discord.ChannelID `json:"channel_id"`
|
|
MessageID discord.MessageID `json:"message_id"`
|
|
|
|
Emoji discord.Emoji `json:"emoji,omitempty"`
|
|
|
|
GuildID discord.GuildID `json:"guild_id,omitempty"`
|
|
Member *discord.Member `json:"member,omitempty"`
|
|
}
|
|
MessageReactionRemoveEvent struct {
|
|
UserID discord.UserID `json:"user_id"`
|
|
ChannelID discord.ChannelID `json:"channel_id"`
|
|
MessageID discord.MessageID `json:"message_id"`
|
|
Emoji discord.Emoji `json:"emoji"`
|
|
GuildID discord.GuildID `json:"guild_id,omitempty"`
|
|
}
|
|
MessageReactionRemoveAllEvent struct {
|
|
ChannelID discord.ChannelID `json:"channel_id"`
|
|
MessageID discord.MessageID `json:"message_id"`
|
|
GuildID discord.GuildID `json:"guild_id,omitempty"`
|
|
}
|
|
MessageReactionRemoveEmojiEvent struct {
|
|
ChannelID discord.ChannelID `json:"channel_id"`
|
|
MessageID discord.MessageID `json:"message_id"`
|
|
Emoji discord.Emoji `json:"emoji"`
|
|
GuildID discord.GuildID `json:"guild_id,omitempty"`
|
|
}
|
|
|
|
MessageAckEvent struct {
|
|
MessageID discord.MessageID `json:"message_id"`
|
|
ChannelID discord.ChannelID `json:"channel_id"`
|
|
}
|
|
)
|
|
|
|
// Status is the enumerate type for a user's status.
|
|
type Status string
|
|
|
|
const (
|
|
UnknownStatus Status = ""
|
|
OnlineStatus Status = "online"
|
|
DoNotDisturbStatus Status = "dnd"
|
|
IdleStatus Status = "idle"
|
|
InvisibleStatus Status = "invisible"
|
|
OfflineStatus Status = "offline"
|
|
)
|
|
|
|
// https://discord.com/developers/docs/topics/gateway#presence
|
|
type (
|
|
// Presence represents a partial Presence structure used by other structs to be
|
|
// easily embedded. It does not contain any ID to identify who it belongs
|
|
// to. For more information, refer to the PresenceUpdateEvent struct.
|
|
Presence struct {
|
|
// User is the user presence is being updated for. Only the ID field is
|
|
// guaranteed to be valid per Discord documentation.
|
|
User discord.User `json:"user"`
|
|
// GuildID is the id of the guild
|
|
GuildID discord.GuildID `json:"guild_id"`
|
|
// Status is either "idle", "dnd", "online", or "offline".
|
|
Status Status `json:"status"`
|
|
// Activities are the user's current activities.
|
|
Activities []discord.Activity `json:"activities"`
|
|
// ClientStaus is the user's platform-dependent status.
|
|
ClientStatus ClientStatus `json:"client_status"`
|
|
}
|
|
|
|
// ClientStaus is the user's platform-dependent status.
|
|
//
|
|
// https://discord.com/developers/docs/topics/gateway#client-status-object
|
|
ClientStatus struct {
|
|
// Desktop is the user's status set for an active desktop (Windows,
|
|
// Linux, Mac) application session.
|
|
Desktop Status `json:"desktop,omitempty"`
|
|
// Mobile is the user's status set for an active mobile (iOS, Android)
|
|
// application session.
|
|
Mobile Status `json:"mobile,omitempty"`
|
|
// Web is the user's status set for an active web (browser, bot
|
|
// account) application session.
|
|
Web Status `json:"web,omitempty"`
|
|
}
|
|
|
|
// PresenceUpdateEvent represents the structure of the Presence Update Event
|
|
// object.
|
|
//
|
|
// https://discord.com/developers/docs/topics/gateway#presence-update-presence-update-event-fields
|
|
PresenceUpdateEvent struct {
|
|
Presence
|
|
}
|
|
|
|
PresencesReplaceEvent []PresenceUpdateEvent
|
|
|
|
// SessionsReplaceEvent is an undocumented user event. It's likely used for
|
|
// current user's presence updates.
|
|
SessionsReplaceEvent []struct {
|
|
Status Status `json:"status"`
|
|
SessionID string `json:"session_id"`
|
|
|
|
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"`
|
|
}
|
|
|
|
TypingStartEvent struct {
|
|
ChannelID discord.ChannelID `json:"channel_id"`
|
|
UserID discord.UserID `json:"user_id"`
|
|
Timestamp discord.UnixTimestamp `json:"timestamp"`
|
|
|
|
GuildID discord.GuildID `json:"guild_id,omitempty"`
|
|
Member *discord.Member `json:"member,omitempty"`
|
|
}
|
|
|
|
UserUpdateEvent struct {
|
|
discord.User
|
|
}
|
|
)
|
|
|
|
// https://discord.com/developers/docs/topics/gateway#voice
|
|
type (
|
|
VoiceStateUpdateEvent struct {
|
|
discord.VoiceState
|
|
}
|
|
VoiceServerUpdateEvent struct {
|
|
Token string `json:"token"`
|
|
GuildID discord.GuildID `json:"guild_id"`
|
|
Endpoint string `json:"endpoint"`
|
|
}
|
|
)
|
|
|
|
// https://discord.com/developers/docs/topics/gateway#webhooks
|
|
type (
|
|
WebhooksUpdateEvent struct {
|
|
GuildID discord.GuildID `json:"guild_id"`
|
|
ChannelID discord.ChannelID `json:"channel_id"`
|
|
}
|
|
)
|
|
|
|
// Undocumented
|
|
type (
|
|
UserGuildSettingsUpdateEvent struct {
|
|
UserGuildSettings
|
|
}
|
|
UserSettingsUpdateEvent struct {
|
|
UserSettings
|
|
}
|
|
UserNoteUpdateEvent struct {
|
|
ID discord.UserID `json:"id"`
|
|
Note string `json:"note"`
|
|
}
|
|
)
|
|
|
|
type (
|
|
RelationshipAddEvent struct {
|
|
discord.Relationship
|
|
}
|
|
RelationshipRemoveEvent struct {
|
|
discord.Relationship
|
|
}
|
|
)
|