Moving all structs to structs.go for now.
This commit is contained in:
parent
221e54ee5a
commit
3e605c64a6
6 changed files with 258 additions and 252 deletions
22
channel.go
22
channel.go
|
@ -1,27 +1,5 @@
|
|||
package discordgo
|
||||
|
||||
// A Channel holds all data related to an individual Discord channel.
|
||||
type Channel struct {
|
||||
ID string `json:"id"`
|
||||
GuildID string `json:"guild_id"`
|
||||
Name string `json:"name"`
|
||||
Topic string `json:"topic"`
|
||||
Position int `json:"position"`
|
||||
Type string `json:"type"`
|
||||
PermissionOverwrites []PermissionOverwrite `json:"permission_overwrites"`
|
||||
IsPrivate bool `json:"is_private"`
|
||||
LastMessageID string `json:"last_message_id"`
|
||||
Recipient User `json:"recipient"`
|
||||
}
|
||||
|
||||
// A PermissionOverwrite holds permission overwrite data for a Channel
|
||||
type PermissionOverwrite struct {
|
||||
ID string `json:"id"`
|
||||
Type string `json:"type"`
|
||||
Deny int `json:"deny"`
|
||||
Allow int `json:"allow"`
|
||||
}
|
||||
|
||||
/*
|
||||
func (c *Channel) Messages() (messages []Message) {
|
||||
}
|
||||
|
|
61
guild.go
61
guild.go
|
@ -1,66 +1,5 @@
|
|||
package discordgo
|
||||
|
||||
// A Guild holds all data related to a specific Discord Guild. Guilds are also
|
||||
// sometimes referred to as Servers in the Discord client.
|
||||
type Guild struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Icon string `json:"icon"`
|
||||
Region string `json:"region"`
|
||||
AfkTimeout int `json:"afk_timeout"`
|
||||
AfkChannelID string `json:"afk_channel_id"`
|
||||
EmbedChannelID string `json:"embed_channel_id"`
|
||||
EmbedEnabled bool `json:"embed_enabled"`
|
||||
OwnerID string `json:"owner_id"`
|
||||
Large bool `json:"large"` // ??
|
||||
JoinedAt string `json:"joined_at"` // make this a timestamp
|
||||
Roles []Role `json:"roles"`
|
||||
Members []Member `json:"members"`
|
||||
Presences []Presence `json:"presences"`
|
||||
Channels []Channel `json:"channels"`
|
||||
VoiceStates []VoiceState `json:"voice_states"`
|
||||
}
|
||||
|
||||
// A Role stores information about Discord guild member roles.
|
||||
type Role struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Managed bool `json:"managed"`
|
||||
Color int `json:"color"`
|
||||
Hoist bool `json:"hoist"`
|
||||
Position int `json:"position"`
|
||||
Permissions int `json:"permissions"`
|
||||
}
|
||||
|
||||
// A VoiceState stores the voice states of Guilds
|
||||
type VoiceState struct {
|
||||
UserID string `json:"user_id"`
|
||||
Suppress bool `json:"suppress"`
|
||||
SessionID string `json:"session_id"`
|
||||
SelfMute bool `json:"self_mute"`
|
||||
SelfDeaf bool `json:"self_deaf"`
|
||||
Mute bool `json:"mute"`
|
||||
Deaf bool `json:"deaf"`
|
||||
ChannelID string `json:"channel_id"`
|
||||
}
|
||||
|
||||
// A Presence stores the online, offline, or idle and game status of Guild members.
|
||||
type Presence struct {
|
||||
User User `json:"user"`
|
||||
Status string `json:"status"`
|
||||
GameID int `json:"game_id"`
|
||||
}
|
||||
|
||||
// A Member stores user information for Guild members.
|
||||
type Member struct {
|
||||
GuildID string `json:"guild_id"`
|
||||
JoinedAt string `json:"joined_at"`
|
||||
Deaf bool `json:"deaf"`
|
||||
Mute bool `json:"mute"`
|
||||
User User `json:"user"`
|
||||
Roles []string `json:"roles"`
|
||||
}
|
||||
|
||||
/*
|
||||
TODO: How to name these? If we make a variable to store
|
||||
channels from READY packet, etc. We can't have a Channel
|
||||
|
|
54
session.go
54
session.go
|
@ -17,57 +17,3 @@ import (
|
|||
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
// A Session represents a connection to the Discord REST API.
|
||||
// token : The authentication token returned from Discord
|
||||
// Debug : If set to ture debug logging will be displayed.
|
||||
type Session struct {
|
||||
Token string // Authentication token for this session
|
||||
Debug bool // Debug for printing JSON request/responses
|
||||
Cache int // number in X to cache some responses
|
||||
SessionID string // from websocket READY packet
|
||||
|
||||
// Settable Callback functions for Websocket Events
|
||||
OnEvent func(*Session, Event) // should Event be *Event?
|
||||
OnReady func(*Session, Ready)
|
||||
OnTypingStart func(*Session, TypingStart)
|
||||
OnMessageCreate func(*Session, Message)
|
||||
OnMessageUpdate func(*Session, Message)
|
||||
OnMessageDelete func(*Session, MessageDelete)
|
||||
OnMessageAck func(*Session, MessageAck)
|
||||
OnPresenceUpdate func(*Session, PresenceUpdate)
|
||||
OnVoiceStateUpdate func(*Session, VoiceState)
|
||||
OnChannelCreate func(*Session, Channel)
|
||||
OnChannelUpdate func(*Session, Channel)
|
||||
OnChannelDelete func(*Session, Channel)
|
||||
OnGuildCreate func(*Session, Guild)
|
||||
OnGuildUpdate func(*Session, Guild)
|
||||
OnGuildDelete func(*Session, Guild)
|
||||
OnGuildMemberAdd func(*Session, Member)
|
||||
OnGuildMemberRemove func(*Session, Member)
|
||||
OnGuildMemberDelete func(*Session, Member) // which is it?
|
||||
OnGuildMemberUpdate func(*Session, Member)
|
||||
OnGuildRoleCreate func(*Session, GuildRole)
|
||||
OnGuildRoleUpdate func(*Session, GuildRole)
|
||||
OnGuildRoleDelete func(*Session, GuildRoleDelete)
|
||||
OnGuildIntegrationsUpdate func(*Session, GuildIntegrationsUpdate)
|
||||
|
||||
wsConn *websocket.Conn
|
||||
//TODO, add bools for like.
|
||||
// are we connnected to websocket?
|
||||
// have we authenticated to login?
|
||||
// lets put all the general session
|
||||
// tracking and infos here.. clearly
|
||||
|
||||
// Everything below here is used for Voice testing.
|
||||
// This stuff is almost guarenteed to change a lot
|
||||
// and is even a bit hackish right now.
|
||||
VwsConn *websocket.Conn // new for voice
|
||||
VSessionID string
|
||||
VToken string
|
||||
VEndpoint string
|
||||
VGuildID string
|
||||
VChannelID string
|
||||
Vop2 VoiceOP2
|
||||
UDPConn *net.UDPConn
|
||||
}
|
||||
|
|
258
structs.go
258
structs.go
|
@ -1,5 +1,11 @@
|
|||
package discordgo
|
||||
|
||||
import (
|
||||
"net"
|
||||
|
||||
"golang.org/x/net/websocket"
|
||||
)
|
||||
|
||||
// TODO: Eventually everything here gets moved to a better place.
|
||||
|
||||
// A Message stores all data related to a specific Discord message.
|
||||
|
@ -60,3 +66,255 @@ type Invite struct {
|
|||
XkcdPass bool `json:"xkcdpass"`
|
||||
Channel Channel `json:"channel"`
|
||||
}
|
||||
|
||||
// A Channel holds all data related to an individual Discord channel.
|
||||
type Channel struct {
|
||||
ID string `json:"id"`
|
||||
GuildID string `json:"guild_id"`
|
||||
Name string `json:"name"`
|
||||
Topic string `json:"topic"`
|
||||
Position int `json:"position"`
|
||||
Type string `json:"type"`
|
||||
PermissionOverwrites []PermissionOverwrite `json:"permission_overwrites"`
|
||||
IsPrivate bool `json:"is_private"`
|
||||
LastMessageID string `json:"last_message_id"`
|
||||
Recipient User `json:"recipient"`
|
||||
}
|
||||
|
||||
// A PermissionOverwrite holds permission overwrite data for a Channel
|
||||
type PermissionOverwrite struct {
|
||||
ID string `json:"id"`
|
||||
Type string `json:"type"`
|
||||
Deny int `json:"deny"`
|
||||
Allow int `json:"allow"`
|
||||
}
|
||||
|
||||
// A Guild holds all data related to a specific Discord Guild. Guilds are also
|
||||
// sometimes referred to as Servers in the Discord client.
|
||||
type Guild struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Icon string `json:"icon"`
|
||||
Region string `json:"region"`
|
||||
AfkTimeout int `json:"afk_timeout"`
|
||||
AfkChannelID string `json:"afk_channel_id"`
|
||||
EmbedChannelID string `json:"embed_channel_id"`
|
||||
EmbedEnabled bool `json:"embed_enabled"`
|
||||
OwnerID string `json:"owner_id"`
|
||||
Large bool `json:"large"` // ??
|
||||
JoinedAt string `json:"joined_at"` // make this a timestamp
|
||||
Roles []Role `json:"roles"`
|
||||
Members []Member `json:"members"`
|
||||
Presences []Presence `json:"presences"`
|
||||
Channels []Channel `json:"channels"`
|
||||
VoiceStates []VoiceState `json:"voice_states"`
|
||||
}
|
||||
|
||||
// A Role stores information about Discord guild member roles.
|
||||
type Role struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Managed bool `json:"managed"`
|
||||
Color int `json:"color"`
|
||||
Hoist bool `json:"hoist"`
|
||||
Position int `json:"position"`
|
||||
Permissions int `json:"permissions"`
|
||||
}
|
||||
|
||||
// A VoiceState stores the voice states of Guilds
|
||||
type VoiceState struct {
|
||||
UserID string `json:"user_id"`
|
||||
Suppress bool `json:"suppress"`
|
||||
SessionID string `json:"session_id"`
|
||||
SelfMute bool `json:"self_mute"`
|
||||
SelfDeaf bool `json:"self_deaf"`
|
||||
Mute bool `json:"mute"`
|
||||
Deaf bool `json:"deaf"`
|
||||
ChannelID string `json:"channel_id"`
|
||||
}
|
||||
|
||||
// A Presence stores the online, offline, or idle and game status of Guild members.
|
||||
type Presence struct {
|
||||
User User `json:"user"`
|
||||
Status string `json:"status"`
|
||||
GameID int `json:"game_id"`
|
||||
}
|
||||
|
||||
// A Member stores user information for Guild members.
|
||||
type Member struct {
|
||||
GuildID string `json:"guild_id"`
|
||||
JoinedAt string `json:"joined_at"`
|
||||
Deaf bool `json:"deaf"`
|
||||
Mute bool `json:"mute"`
|
||||
User User `json:"user"`
|
||||
Roles []string `json:"roles"`
|
||||
}
|
||||
|
||||
// A Session represents a connection to the Discord REST API.
|
||||
// token : The authentication token returned from Discord
|
||||
// Debug : If set to ture debug logging will be displayed.
|
||||
type Session struct {
|
||||
Token string // Authentication token for this session
|
||||
Debug bool // Debug for printing JSON request/responses
|
||||
Cache int // number in X to cache some responses
|
||||
SessionID string // from websocket READY packet
|
||||
|
||||
// Settable Callback functions for Websocket Events
|
||||
OnEvent func(*Session, Event) // should Event be *Event?
|
||||
OnReady func(*Session, Ready)
|
||||
OnTypingStart func(*Session, TypingStart)
|
||||
OnMessageCreate func(*Session, Message)
|
||||
OnMessageUpdate func(*Session, Message)
|
||||
OnMessageDelete func(*Session, MessageDelete)
|
||||
OnMessageAck func(*Session, MessageAck)
|
||||
OnPresenceUpdate func(*Session, PresenceUpdate)
|
||||
OnVoiceStateUpdate func(*Session, VoiceState)
|
||||
OnChannelCreate func(*Session, Channel)
|
||||
OnChannelUpdate func(*Session, Channel)
|
||||
OnChannelDelete func(*Session, Channel)
|
||||
OnGuildCreate func(*Session, Guild)
|
||||
OnGuildUpdate func(*Session, Guild)
|
||||
OnGuildDelete func(*Session, Guild)
|
||||
OnGuildMemberAdd func(*Session, Member)
|
||||
OnGuildMemberRemove func(*Session, Member)
|
||||
OnGuildMemberDelete func(*Session, Member) // which is it?
|
||||
OnGuildMemberUpdate func(*Session, Member)
|
||||
OnGuildRoleCreate func(*Session, GuildRole)
|
||||
OnGuildRoleUpdate func(*Session, GuildRole)
|
||||
OnGuildRoleDelete func(*Session, GuildRoleDelete)
|
||||
OnGuildIntegrationsUpdate func(*Session, GuildIntegrationsUpdate)
|
||||
|
||||
wsConn *websocket.Conn
|
||||
//TODO, add bools for like.
|
||||
// are we connnected to websocket?
|
||||
// have we authenticated to login?
|
||||
// lets put all the general session
|
||||
// tracking and infos here.. clearly
|
||||
|
||||
// Everything below here is used for Voice testing.
|
||||
// This stuff is almost guarenteed to change a lot
|
||||
// and is even a bit hackish right now.
|
||||
VwsConn *websocket.Conn // new for voice
|
||||
VSessionID string
|
||||
VToken string
|
||||
VEndpoint string
|
||||
VGuildID string
|
||||
VChannelID string
|
||||
Vop2 VoiceOP2
|
||||
UDPConn *net.UDPConn
|
||||
}
|
||||
|
||||
// A User stores all data for an individual Discord user.
|
||||
type User struct {
|
||||
ID string `json:"id"`
|
||||
Email string `json:"email"`
|
||||
Username string `json:"username"`
|
||||
Avatar string `json:"Avatar"`
|
||||
Verified bool `json:"verified"`
|
||||
//Discriminator int `json:"discriminator,string"` // TODO: See below
|
||||
}
|
||||
|
||||
// Discriminator sometimes comes as a string
|
||||
// and sometimes it comes as a int. Weird.
|
||||
// to avoid errors I've just commented it out
|
||||
// but it doesn't seem to just kill the whole
|
||||
// program. Heartbeat is taken on READY even
|
||||
// with error and the system continues to read
|
||||
// it just doesn't seem able to handle this one
|
||||
// field correctly. Need to research this more.
|
||||
|
||||
// A PrivateChannel stores all data for a specific user private channel.
|
||||
type PrivateChannel struct {
|
||||
ID string `json:"id"`
|
||||
IsPrivate bool `json:"is_private"`
|
||||
LastMessageID string `json:"last_message_id"`
|
||||
Recipient User `json:"recipient"`
|
||||
} // merge with channel?
|
||||
|
||||
// A Settings stores data for a specific users Discord client settings.
|
||||
type Settings struct {
|
||||
RenderEmbeds bool `json:"render_embeds"`
|
||||
InlineEmbedMedia bool `json:"inline_embed_media"`
|
||||
EnableTtsCommand bool `json:"enable_tts_command"`
|
||||
MessageDisplayCompact bool `json:"message_display_compact"`
|
||||
Locale string `json:"locale"`
|
||||
ShowCurrentGame bool `json:"show_current_game"`
|
||||
Theme string `json:"theme"`
|
||||
MutedChannels []string `json:"muted_channels"`
|
||||
}
|
||||
|
||||
// An Event provides a basic initial struct for all websocket event.
|
||||
type Event struct {
|
||||
Type string `json:"t"`
|
||||
State int `json:"s"`
|
||||
Operation int `json:"o"`
|
||||
Direction int `json:"dir"`
|
||||
RawData json.RawMessage `json:"d"`
|
||||
}
|
||||
|
||||
// A Ready stores all data for the websocket READY event.
|
||||
type Ready struct {
|
||||
Version int `json:"v"`
|
||||
SessionID string `json:"session_id"`
|
||||
HeartbeatInterval time.Duration `json:"heartbeat_interval"`
|
||||
User User `json:"user"`
|
||||
ReadState []ReadState
|
||||
PrivateChannels []PrivateChannel
|
||||
Guilds []Guild
|
||||
}
|
||||
|
||||
// ReadState might need to move? Gives me the read status
|
||||
// of all my channels when first connecting. I think :)
|
||||
|
||||
// A ReadState stores data on the read state of channels.
|
||||
type ReadState struct {
|
||||
MentionCount int
|
||||
LastMessageID string `json:"last_message_id"`
|
||||
ID string `json:"id"`
|
||||
}
|
||||
|
||||
// A TypingStart stores data for the typing start websocket event.
|
||||
type TypingStart struct {
|
||||
UserID string `json:"user_id"`
|
||||
ChannelID string `json:"channel_id"`
|
||||
Timestamp int `json:"timestamp"`
|
||||
}
|
||||
|
||||
// A PresenceUpdate stores data for the pressence update websocket event.
|
||||
type PresenceUpdate struct {
|
||||
User User `json:"user"`
|
||||
Status string `json:"status"`
|
||||
Roles []string `json:"roles"`
|
||||
GuildID string `json:"guild_id"`
|
||||
GameID int `json:"game_id"`
|
||||
}
|
||||
|
||||
// A MessageAck stores data for the message ack websocket event.
|
||||
type MessageAck struct {
|
||||
MessageID string `json:"message_id"`
|
||||
ChannelID string `json:"channel_id"`
|
||||
}
|
||||
|
||||
// A MessageDelete stores data for the message delete websocket event.
|
||||
type MessageDelete struct {
|
||||
ID string `json:"id"`
|
||||
ChannelID string `json:"channel_id"`
|
||||
} // so much like MessageAck..
|
||||
|
||||
// A GuildIntegrationsUpdate stores data for the guild integrations update
|
||||
// websocket event.
|
||||
type GuildIntegrationsUpdate struct {
|
||||
GuildID string `json:"guild_id"`
|
||||
}
|
||||
|
||||
// A GuildRole stores data for guild role websocket events.
|
||||
type GuildRole struct {
|
||||
Role Role `json:"role"`
|
||||
GuildID string `json:"guild_id"`
|
||||
}
|
||||
|
||||
// A GuildRoleDelete stores data for the guild role delete websocket event.
|
||||
type GuildRoleDelete struct {
|
||||
RoleID string `json:"role_id"`
|
||||
GuildID string `json:"guild_id"`
|
||||
}
|
||||
|
|
39
users.go
39
users.go
|
@ -1,40 +1 @@
|
|||
package discordgo
|
||||
|
||||
// A User stores all data for an individual Discord user.
|
||||
type User struct {
|
||||
ID string `json:"id"`
|
||||
Email string `json:"email"`
|
||||
Username string `json:"username"`
|
||||
Avatar string `json:"Avatar"`
|
||||
Verified bool `json:"verified"`
|
||||
//Discriminator int `json:"discriminator,string"` // TODO: See below
|
||||
}
|
||||
|
||||
// Discriminator sometimes comes as a string
|
||||
// and sometimes it comes as a int. Weird.
|
||||
// to avoid errors I've just commented it out
|
||||
// but it doesn't seem to just kill the whole
|
||||
// program. Heartbeat is taken on READY even
|
||||
// with error and the system continues to read
|
||||
// it just doesn't seem able to handle this one
|
||||
// field correctly. Need to research this more.
|
||||
|
||||
// A PrivateChannel stores all data for a specific user private channel.
|
||||
type PrivateChannel struct {
|
||||
ID string `json:"id"`
|
||||
IsPrivate bool `json:"is_private"`
|
||||
LastMessageID string `json:"last_message_id"`
|
||||
Recipient User `json:"recipient"`
|
||||
} // merge with channel?
|
||||
|
||||
// A Settings stores data for a specific users Discord client settings.
|
||||
type Settings struct {
|
||||
RenderEmbeds bool `json:"render_embeds"`
|
||||
InlineEmbedMedia bool `json:"inline_embed_media"`
|
||||
EnableTtsCommand bool `json:"enable_tts_command"`
|
||||
MessageDisplayCompact bool `json:"message_display_compact"`
|
||||
Locale string `json:"locale"`
|
||||
ShowCurrentGame bool `json:"show_current_game"`
|
||||
Theme string `json:"theme"`
|
||||
MutedChannels []string `json:"muted_channels"`
|
||||
}
|
||||
|
|
76
wsapi.go
76
wsapi.go
|
@ -17,82 +17,6 @@ import (
|
|||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
// An Event provides a basic initial struct for all websocket event.
|
||||
type Event struct {
|
||||
Type string `json:"t"`
|
||||
State int `json:"s"`
|
||||
Operation int `json:"o"`
|
||||
Direction int `json:"dir"`
|
||||
RawData json.RawMessage `json:"d"`
|
||||
}
|
||||
|
||||
// A Ready stores all data for the websocket READY event.
|
||||
type Ready struct {
|
||||
Version int `json:"v"`
|
||||
SessionID string `json:"session_id"`
|
||||
HeartbeatInterval time.Duration `json:"heartbeat_interval"`
|
||||
User User `json:"user"`
|
||||
ReadState []ReadState
|
||||
PrivateChannels []PrivateChannel
|
||||
Guilds []Guild
|
||||
}
|
||||
|
||||
// ReadState might need to move? Gives me the read status
|
||||
// of all my channels when first connecting. I think :)
|
||||
|
||||
// A ReadState stores data on the read state of channels.
|
||||
type ReadState struct {
|
||||
MentionCount int
|
||||
LastMessageID string `json:"last_message_id"`
|
||||
ID string `json:"id"`
|
||||
}
|
||||
|
||||
// A TypingStart stores data for the typing start websocket event.
|
||||
type TypingStart struct {
|
||||
UserID string `json:"user_id"`
|
||||
ChannelID string `json:"channel_id"`
|
||||
Timestamp int `json:"timestamp"`
|
||||
}
|
||||
|
||||
// A PresenceUpdate stores data for the pressence update websocket event.
|
||||
type PresenceUpdate struct {
|
||||
User User `json:"user"`
|
||||
Status string `json:"status"`
|
||||
Roles []string `json:"roles"`
|
||||
GuildID string `json:"guild_id"`
|
||||
GameID int `json:"game_id"`
|
||||
}
|
||||
|
||||
// A MessageAck stores data for the message ack websocket event.
|
||||
type MessageAck struct {
|
||||
MessageID string `json:"message_id"`
|
||||
ChannelID string `json:"channel_id"`
|
||||
}
|
||||
|
||||
// A MessageDelete stores data for the message delete websocket event.
|
||||
type MessageDelete struct {
|
||||
ID string `json:"id"`
|
||||
ChannelID string `json:"channel_id"`
|
||||
} // so much like MessageAck..
|
||||
|
||||
// A GuildIntegrationsUpdate stores data for the guild integrations update
|
||||
// websocket event.
|
||||
type GuildIntegrationsUpdate struct {
|
||||
GuildID string `json:"guild_id"`
|
||||
}
|
||||
|
||||
// A GuildRole stores data for guild role websocket events.
|
||||
type GuildRole struct {
|
||||
Role Role `json:"role"`
|
||||
GuildID string `json:"guild_id"`
|
||||
}
|
||||
|
||||
// A GuildRoleDelete stores data for the guild role delete websocket event.
|
||||
type GuildRoleDelete struct {
|
||||
RoleID string `json:"role_id"`
|
||||
GuildID string `json:"guild_id"`
|
||||
}
|
||||
|
||||
// Open opens a websocket connection to Discord.
|
||||
func (s *Session) Open() (err error) {
|
||||
|
||||
|
|
Loading…
Reference in a new issue