123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979 |
- // Discordgo - Discord bindings for Go
- // Available at https://github.com/bwmarrin/discordgo
- // Copyright 2015-2016 Bruce Marriner <bruce@sqls.net>. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- // This file contains all structures for the discordgo package. These
- // may be moved about later into separate files but I find it easier to have
- // them all located together.
- package discordgo
- import (
- "encoding/json"
- "fmt"
- "net/http"
- "sync"
- "time"
- "github.com/gorilla/websocket"
- )
- // A Session represents a connection to the Discord API.
- type Session struct {
- sync.RWMutex
- // General configurable settings.
- // Authentication token for this session
- Token string
- MFA bool
- // Debug for printing JSON request/responses
- Debug bool // Deprecated, will be removed.
- LogLevel int
- // Should the session reconnect the websocket on errors.
- ShouldReconnectOnError bool
- // Should the session request compressed websocket data.
- Compress bool
- // Sharding
- ShardID int
- ShardCount int
- // Should state tracking be enabled.
- // State tracking is the best way for getting the the users
- // active guilds and the members of the guilds.
- StateEnabled bool
- // Whether or not to call event handlers synchronously.
- // e.g false = launch event handlers in their own goroutines.
- SyncEvents bool
- // Exposed but should not be modified by User.
- // Whether the Data Websocket is ready
- DataReady bool // NOTE: Maye be deprecated soon
- // Max number of REST API retries
- MaxRestRetries int
- // Status stores the currect status of the websocket connection
- // this is being tested, may stay, may go away.
- status int32
- // Whether the Voice Websocket is ready
- VoiceReady bool // NOTE: Deprecated.
- // Whether the UDP Connection is ready
- UDPReady bool // NOTE: Deprecated
- // Stores a mapping of guild id's to VoiceConnections
- VoiceConnections map[string]*VoiceConnection
- // Managed state object, updated internally with events when
- // StateEnabled is true.
- State *State
- // The http client used for REST requests
- Client *http.Client
- // Stores the last HeartbeatAck that was recieved (in UTC)
- LastHeartbeatAck time.Time
- // Stores the last Heartbeat sent (in UTC)
- LastHeartbeatSent time.Time
- // used to deal with rate limits
- Ratelimiter *RateLimiter
- // Event handlers
- handlersMu sync.RWMutex
- handlers map[string][]*eventHandlerInstance
- onceHandlers map[string][]*eventHandlerInstance
- // The websocket connection.
- wsConn *websocket.Conn
- // When nil, the session is not listening.
- listening chan interface{}
- // sequence tracks the current gateway api websocket sequence number
- sequence *int64
- // stores sessions current Discord Gateway
- gateway string
- // stores session ID of current Gateway connection
- sessionID string
- // used to make sure gateway websocket writes do not happen concurrently
- wsMutex sync.Mutex
- }
- // UserConnection is a Connection returned from the UserConnections endpoint
- type UserConnection struct {
- ID string `json:"id"`
- Name string `json:"name"`
- Type string `json:"type"`
- Revoked bool `json:"revoked"`
- Integrations []*Integration `json:"integrations"`
- }
- // Integration stores integration information
- type Integration struct {
- ID string `json:"id"`
- Name string `json:"name"`
- Type string `json:"type"`
- Enabled bool `json:"enabled"`
- Syncing bool `json:"syncing"`
- RoleID string `json:"role_id"`
- ExpireBehavior int `json:"expire_behavior"`
- ExpireGracePeriod int `json:"expire_grace_period"`
- User *User `json:"user"`
- Account IntegrationAccount `json:"account"`
- SyncedAt Timestamp `json:"synced_at"`
- }
- // IntegrationAccount is integration account information
- // sent by the UserConnections endpoint
- type IntegrationAccount struct {
- ID string `json:"id"`
- Name string `json:"name"`
- }
- // A VoiceRegion stores data for a specific voice region server.
- type VoiceRegion struct {
- ID string `json:"id"`
- Name string `json:"name"`
- Hostname string `json:"sample_hostname"`
- Port int `json:"sample_port"`
- }
- // A VoiceICE stores data for voice ICE servers.
- type VoiceICE struct {
- TTL string `json:"ttl"`
- Servers []*ICEServer `json:"servers"`
- }
- // A ICEServer stores data for a specific voice ICE server.
- type ICEServer struct {
- URL string `json:"url"`
- Username string `json:"username"`
- Credential string `json:"credential"`
- }
- // A Invite stores all data related to a specific Discord Guild or Channel invite.
- type Invite struct {
- Guild *Guild `json:"guild"`
- Channel *Channel `json:"channel"`
- Inviter *User `json:"inviter"`
- Code string `json:"code"`
- CreatedAt Timestamp `json:"created_at"`
- MaxAge int `json:"max_age"`
- Uses int `json:"uses"`
- MaxUses int `json:"max_uses"`
- Revoked bool `json:"revoked"`
- Temporary bool `json:"temporary"`
- Unique bool `json:"unique"`
- // will only be filled when using InviteWithCounts
- ApproximatePresenceCount int `json:"approximate_presence_count"`
- ApproximateMemberCount int `json:"approximate_member_count"`
- }
- // ChannelType is the type of a Channel
- type ChannelType int
- // Block contains known ChannelType values
- const (
- ChannelTypeGuildText ChannelType = iota
- ChannelTypeDM
- ChannelTypeGuildVoice
- ChannelTypeGroupDM
- ChannelTypeGuildCategory
- )
- // A Channel holds all data related to an individual Discord channel.
- type Channel struct {
- // The ID of the channel.
- ID string `json:"id"`
- // The ID of the guild to which the channel belongs, if it is in a guild.
- // Else, this ID is empty (e.g. DM channels).
- GuildID string `json:"guild_id"`
- // The name of the channel.
- Name string `json:"name"`
- // The topic of the channel.
- Topic string `json:"topic"`
- // The type of the channel.
- Type ChannelType `json:"type"`
- // The ID of the last message sent in the channel. This is not
- // guaranteed to be an ID of a valid message.
- LastMessageID string `json:"last_message_id"`
- // Whether the channel is marked as NSFW.
- NSFW bool `json:"nsfw"`
- // Icon of the group DM channel.
- Icon string `json:"icon"`
- // The position of the channel, used for sorting in client.
- Position int `json:"position"`
- // The bitrate of the channel, if it is a voice channel.
- Bitrate int `json:"bitrate"`
- // The recipients of the channel. This is only populated in DM channels.
- Recipients []*User `json:"recipients"`
- // The messages in the channel. This is only present in state-cached channels,
- // and State.MaxMessageCount must be non-zero.
- Messages []*Message `json:"-"`
- // A list of permission overwrites present for the channel.
- PermissionOverwrites []*PermissionOverwrite `json:"permission_overwrites"`
- // The user limit of the voice channel.
- UserLimit int `json:"user_limit"`
- // The ID of the parent channel, if the channel is under a category
- ParentID string `json:"parent_id"`
- }
- // Mention returns a string which mentions the channel
- func (c *Channel) Mention() string {
- return fmt.Sprintf("<#%s>", c.ID)
- }
- // A ChannelEdit holds Channel Field data for a channel edit.
- type ChannelEdit struct {
- Name string `json:"name,omitempty"`
- Topic string `json:"topic,omitempty"`
- NSFW bool `json:"nsfw,omitempty"`
- Position int `json:"position"`
- Bitrate int `json:"bitrate,omitempty"`
- UserLimit int `json:"user_limit,omitempty"`
- PermissionOverwrites []*PermissionOverwrite `json:"permission_overwrites,omitempty"`
- ParentID string `json:"parent_id,omitempty"`
- RateLimitPerUser int `json:"rate_limit_per_user,omitempty"`
- }
- // 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"`
- }
- // Emoji struct holds data related to Emoji's
- type Emoji struct {
- ID string `json:"id"`
- Name string `json:"name"`
- Roles []string `json:"roles"`
- Managed bool `json:"managed"`
- RequireColons bool `json:"require_colons"`
- Animated bool `json:"animated"`
- }
- // MessageFormat returns a correctly formatted Emoji for use in Message content and embeds
- func (e *Emoji) MessageFormat() string {
- if e.ID != "" && e.Name != "" {
- if e.Animated {
- return "<a:" + e.APIName() + ">"
- }
- return "<:" + e.APIName() + ">"
- }
- return e.APIName()
- }
- // APIName returns an correctly formatted API name for use in the MessageReactions endpoints.
- func (e *Emoji) APIName() string {
- if e.ID != "" && e.Name != "" {
- return e.Name + ":" + e.ID
- }
- if e.Name != "" {
- return e.Name
- }
- return e.ID
- }
- // VerificationLevel type definition
- type VerificationLevel int
- // Constants for VerificationLevel levels from 0 to 3 inclusive
- const (
- VerificationLevelNone VerificationLevel = iota
- VerificationLevelLow
- VerificationLevelMedium
- VerificationLevelHigh
- )
- // ExplicitContentFilterLevel type definition
- type ExplicitContentFilterLevel int
- // Constants for ExplicitContentFilterLevel levels from 0 to 2 inclusive
- const (
- ExplicitContentFilterDisabled ExplicitContentFilterLevel = iota
- ExplicitContentFilterMembersWithoutRoles
- ExplicitContentFilterAllMembers
- )
- // MfaLevel type definition
- type MfaLevel int
- // Constants for MfaLevel levels from 0 to 1 inclusive
- const (
- MfaLevelNone MfaLevel = iota
- MfaLevelElevated
- )
- // 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 {
- // The ID of the guild.
- ID string `json:"id"`
- // The name of the guild. (2–100 characters)
- Name string `json:"name"`
- // The hash of the guild's icon. Use Session.GuildIcon
- // to retrieve the icon itself.
- Icon string `json:"icon"`
- // The voice region of the guild.
- Region string `json:"region"`
- // The ID of the AFK voice channel.
- AfkChannelID string `json:"afk_channel_id"`
- // The ID of the embed channel ID, used for embed widgets.
- EmbedChannelID string `json:"embed_channel_id"`
- // The user ID of the owner of the guild.
- OwnerID string `json:"owner_id"`
- // The time at which the current user joined the guild.
- // This field is only present in GUILD_CREATE events and websocket
- // update events, and thus is only present in state-cached guilds.
- JoinedAt Timestamp `json:"joined_at"`
- // The hash of the guild's splash.
- Splash string `json:"splash"`
- // The timeout, in seconds, before a user is considered AFK in voice.
- AfkTimeout int `json:"afk_timeout"`
- // The number of members in the guild.
- // This field is only present in GUILD_CREATE events and websocket
- // update events, and thus is only present in state-cached guilds.
- MemberCount int `json:"member_count"`
- // The verification level required for the guild.
- VerificationLevel VerificationLevel `json:"verification_level"`
- // Whether the guild has embedding enabled.
- EmbedEnabled bool `json:"embed_enabled"`
- // Whether the guild is considered large. This is
- // determined by a member threshold in the identify packet,
- // and is currently hard-coded at 250 members in the library.
- Large bool `json:"large"`
- // The default message notification setting for the guild.
- // 0 == all messages, 1 == mentions only.
- DefaultMessageNotifications int `json:"default_message_notifications"`
- // A list of roles in the guild.
- Roles []*Role `json:"roles"`
- // A list of the custom emojis present in the guild.
- Emojis []*Emoji `json:"emojis"`
- // A list of the members in the guild.
- // This field is only present in GUILD_CREATE events and websocket
- // update events, and thus is only present in state-cached guilds.
- Members []*Member `json:"members"`
- // A list of partial presence objects for members in the guild.
- // This field is only present in GUILD_CREATE events and websocket
- // update events, and thus is only present in state-cached guilds.
- Presences []*Presence `json:"presences"`
- // A list of channels in the guild.
- // This field is only present in GUILD_CREATE events and websocket
- // update events, and thus is only present in state-cached guilds.
- Channels []*Channel `json:"channels"`
- // A list of voice states for the guild.
- // This field is only present in GUILD_CREATE events and websocket
- // update events, and thus is only present in state-cached guilds.
- VoiceStates []*VoiceState `json:"voice_states"`
- // Whether this guild is currently unavailable (most likely due to outage).
- // This field is only present in GUILD_CREATE events and websocket
- // update events, and thus is only present in state-cached guilds.
- Unavailable bool `json:"unavailable"`
- // The explicit content filter level
- ExplicitContentFilter ExplicitContentFilterLevel `json:"explicit_content_filter"`
- // The list of enabled guild features
- Features []string `json:"features"`
- // Required MFA level for the guild
- MfaLevel MfaLevel `json:"mfa_level"`
- // Whether or not the Server Widget is enabled
- WidgetEnabled bool `json:"widget_enabled"`
- // The Channel ID for the Server Widget
- WidgetChannelID string `json:"widget_channel_id"`
- // The Channel ID to which system messages are sent (eg join and leave messages)
- SystemChannelID string `json:"system_channel_id"`
- }
- // A UserGuild holds a brief version of a Guild
- type UserGuild struct {
- ID string `json:"id"`
- Name string `json:"name"`
- Icon string `json:"icon"`
- Owner bool `json:"owner"`
- Permissions int `json:"permissions"`
- }
- // A GuildParams stores all the data needed to update discord guild settings
- type GuildParams struct {
- Name string `json:"name,omitempty"`
- Region string `json:"region,omitempty"`
- VerificationLevel *VerificationLevel `json:"verification_level,omitempty"`
- DefaultMessageNotifications int `json:"default_message_notifications,omitempty"` // TODO: Separate type?
- AfkChannelID string `json:"afk_channel_id,omitempty"`
- AfkTimeout int `json:"afk_timeout,omitempty"`
- Icon string `json:"icon,omitempty"`
- OwnerID string `json:"owner_id,omitempty"`
- Splash string `json:"splash,omitempty"`
- }
- // A Role stores information about Discord guild member roles.
- type Role struct {
- // The ID of the role.
- ID string `json:"id"`
- // The name of the role.
- Name string `json:"name"`
- // Whether this role is managed by an integration, and
- // thus cannot be manually added to, or taken from, members.
- Managed bool `json:"managed"`
- // Whether this role is mentionable.
- Mentionable bool `json:"mentionable"`
- // Whether this role is hoisted (shows up separately in member list).
- Hoist bool `json:"hoist"`
- // The hex color of this role.
- Color int `json:"color"`
- // The position of this role in the guild's role hierarchy.
- Position int `json:"position"`
- // The permissions of the role on the guild (doesn't include channel overrides).
- // This is a combination of bit masks; the presence of a certain permission can
- // be checked by performing a bitwise AND between this int and the permission.
- Permissions int `json:"permissions"`
- }
- // Mention returns a string which mentions the role
- func (r *Role) Mention() string {
- return fmt.Sprintf("<@&%s>", r.ID)
- }
- // Roles are a collection of Role
- type Roles []*Role
- func (r Roles) Len() int {
- return len(r)
- }
- func (r Roles) Less(i, j int) bool {
- return r[i].Position > r[j].Position
- }
- func (r Roles) Swap(i, j int) {
- r[i], r[j] = r[j], r[i]
- }
- // A VoiceState stores the voice states of Guilds
- type VoiceState struct {
- UserID string `json:"user_id"`
- SessionID string `json:"session_id"`
- ChannelID string `json:"channel_id"`
- GuildID string `json:"guild_id"`
- Suppress bool `json:"suppress"`
- SelfMute bool `json:"self_mute"`
- SelfDeaf bool `json:"self_deaf"`
- Mute bool `json:"mute"`
- Deaf bool `json:"deaf"`
- }
- // A Presence stores the online, offline, or idle and game status of Guild members.
- type Presence struct {
- User *User `json:"user"`
- Status Status `json:"status"`
- Game *Game `json:"game"`
- Nick string `json:"nick"`
- Roles []string `json:"roles"`
- Since *int `json:"since"`
- }
- // GameType is the type of "game" (see GameType* consts) in the Game struct
- type GameType int
- // Valid GameType values
- const (
- GameTypeGame GameType = iota
- GameTypeStreaming
- GameTypeListening
- GameTypeWatching
- )
- // A Game struct holds the name of the "playing .." game for a user
- type Game struct {
- Name string `json:"name"`
- Type GameType `json:"type"`
- URL string `json:"url,omitempty"`
- Details string `json:"details,omitempty"`
- State string `json:"state,omitempty"`
- TimeStamps TimeStamps `json:"timestamps,omitempty"`
- Assets Assets `json:"assets,omitempty"`
- ApplicationID string `json:"application_id,omitempty"`
- Instance int8 `json:"instance,omitempty"`
- // TODO: Party and Secrets (unknown structure)
- }
- // A TimeStamps struct contains start and end times used in the rich presence "playing .." Game
- type TimeStamps struct {
- EndTimestamp int64 `json:"end,omitempty"`
- StartTimestamp int64 `json:"start,omitempty"`
- }
- // UnmarshalJSON unmarshals JSON into TimeStamps struct
- func (t *TimeStamps) UnmarshalJSON(b []byte) error {
- temp := struct {
- End float64 `json:"end,omitempty"`
- Start float64 `json:"start,omitempty"`
- }{}
- err := json.Unmarshal(b, &temp)
- if err != nil {
- return err
- }
- t.EndTimestamp = int64(temp.End)
- t.StartTimestamp = int64(temp.Start)
- return nil
- }
- // An Assets struct contains assets and labels used in the rich presence "playing .." Game
- type Assets struct {
- LargeImageID string `json:"large_image,omitempty"`
- SmallImageID string `json:"small_image,omitempty"`
- LargeText string `json:"large_text,omitempty"`
- SmallText string `json:"small_text,omitempty"`
- }
- // A Member stores user information for Guild members. A guild
- // member represents a certain user's presence in a guild.
- type Member struct {
- // The guild ID on which the member exists.
- GuildID string `json:"guild_id"`
- // The time at which the member joined the guild, in ISO8601.
- JoinedAt Timestamp `json:"joined_at"`
- // The nickname of the member, if they have one.
- Nick string `json:"nick"`
- // Whether the member is deafened at a guild level.
- Deaf bool `json:"deaf"`
- // Whether the member is muted at a guild level.
- Mute bool `json:"mute"`
- // The underlying user on which the member is based.
- User *User `json:"user"`
- // A list of IDs of the roles which are possessed by the member.
- Roles []string `json:"roles"`
- }
- // Mention creates a member mention
- func (m *Member) Mention() string {
- return "<@!" + m.User.ID + ">"
- }
- // 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"`
- InlineAttachmentMedia bool `json:"inline_attachment_media"`
- EnableTtsCommand bool `json:"enable_tts_command"`
- MessageDisplayCompact bool `json:"message_display_compact"`
- ShowCurrentGame bool `json:"show_current_game"`
- ConvertEmoticons bool `json:"convert_emoticons"`
- Locale string `json:"locale"`
- Theme string `json:"theme"`
- GuildPositions []string `json:"guild_positions"`
- RestrictedGuilds []string `json:"restricted_guilds"`
- FriendSourceFlags *FriendSourceFlags `json:"friend_source_flags"`
- Status Status `json:"status"`
- DetectPlatformAccounts bool `json:"detect_platform_accounts"`
- DeveloperMode bool `json:"developer_mode"`
- }
- // Status type definition
- type Status string
- // Constants for Status with the different current available status
- const (
- StatusOnline Status = "online"
- StatusIdle Status = "idle"
- StatusDoNotDisturb Status = "dnd"
- StatusInvisible Status = "invisible"
- StatusOffline Status = "offline"
- )
- // FriendSourceFlags stores ... TODO :)
- type FriendSourceFlags struct {
- All bool `json:"all"`
- MutualGuilds bool `json:"mutual_guilds"`
- MutualFriends bool `json:"mutual_friends"`
- }
- // A Relationship between the logged in user and Relationship.User
- type Relationship struct {
- User *User `json:"user"`
- Type int `json:"type"` // 1 = friend, 2 = blocked, 3 = incoming friend req, 4 = sent friend req
- ID string `json:"id"`
- }
- // A TooManyRequests struct holds information received from Discord
- // when receiving a HTTP 429 response.
- type TooManyRequests struct {
- Bucket string `json:"bucket"`
- Message string `json:"message"`
- RetryAfter time.Duration `json:"retry_after"`
- }
- // A ReadState stores data on the read state of channels.
- type ReadState struct {
- MentionCount int `json:"mention_count"`
- LastMessageID string `json:"last_message_id"`
- ID string `json:"id"`
- }
- // An Ack is used to ack messages
- type Ack struct {
- Token string `json:"token"`
- }
- // A GuildRole stores data for guild roles.
- type GuildRole struct {
- Role *Role `json:"role"`
- GuildID string `json:"guild_id"`
- }
- // A GuildBan stores data for a guild ban.
- type GuildBan struct {
- Reason string `json:"reason"`
- User *User `json:"user"`
- }
- // A GuildEmbed stores data for a guild embed.
- type GuildEmbed struct {
- Enabled bool `json:"enabled"`
- ChannelID string `json:"channel_id"`
- }
- // A GuildAuditLog stores data for a guild audit log.
- type GuildAuditLog struct {
- Webhooks []struct {
- ChannelID string `json:"channel_id"`
- GuildID string `json:"guild_id"`
- ID string `json:"id"`
- Avatar string `json:"avatar"`
- Name string `json:"name"`
- } `json:"webhooks,omitempty"`
- Users []struct {
- Username string `json:"username"`
- Discriminator string `json:"discriminator"`
- Bot bool `json:"bot"`
- ID string `json:"id"`
- Avatar string `json:"avatar"`
- } `json:"users,omitempty"`
- AuditLogEntries []struct {
- TargetID string `json:"target_id"`
- Changes []struct {
- NewValue interface{} `json:"new_value"`
- OldValue interface{} `json:"old_value"`
- Key string `json:"key"`
- } `json:"changes,omitempty"`
- UserID string `json:"user_id"`
- ID string `json:"id"`
- ActionType int `json:"action_type"`
- Options struct {
- DeleteMembersDay string `json:"delete_member_days"`
- MembersRemoved string `json:"members_removed"`
- ChannelID string `json:"channel_id"`
- Count string `json:"count"`
- ID string `json:"id"`
- Type string `json:"type"`
- RoleName string `json:"role_name"`
- } `json:"options,omitempty"`
- Reason string `json:"reason"`
- } `json:"audit_log_entries"`
- }
- // Block contains Discord Audit Log Action Types
- const (
- AuditLogActionGuildUpdate = 1
- AuditLogActionChannelCreate = 10
- AuditLogActionChannelUpdate = 11
- AuditLogActionChannelDelete = 12
- AuditLogActionChannelOverwriteCreate = 13
- AuditLogActionChannelOverwriteUpdate = 14
- AuditLogActionChannelOverwriteDelete = 15
- AuditLogActionMemberKick = 20
- AuditLogActionMemberPrune = 21
- AuditLogActionMemberBanAdd = 22
- AuditLogActionMemberBanRemove = 23
- AuditLogActionMemberUpdate = 24
- AuditLogActionMemberRoleUpdate = 25
- AuditLogActionRoleCreate = 30
- AuditLogActionRoleUpdate = 31
- AuditLogActionRoleDelete = 32
- AuditLogActionInviteCreate = 40
- AuditLogActionInviteUpdate = 41
- AuditLogActionInviteDelete = 42
- AuditLogActionWebhookCreate = 50
- AuditLogActionWebhookUpdate = 51
- AuditLogActionWebhookDelete = 52
- AuditLogActionEmojiCreate = 60
- AuditLogActionEmojiUpdate = 61
- AuditLogActionEmojiDelete = 62
- AuditLogActionMessageDelete = 72
- )
- // A UserGuildSettingsChannelOverride stores data for a channel override for a users guild settings.
- type UserGuildSettingsChannelOverride struct {
- Muted bool `json:"muted"`
- MessageNotifications int `json:"message_notifications"`
- ChannelID string `json:"channel_id"`
- }
- // A UserGuildSettings stores data for a users guild settings.
- type UserGuildSettings struct {
- SupressEveryone bool `json:"suppress_everyone"`
- Muted bool `json:"muted"`
- MobilePush bool `json:"mobile_push"`
- MessageNotifications int `json:"message_notifications"`
- GuildID string `json:"guild_id"`
- ChannelOverrides []*UserGuildSettingsChannelOverride `json:"channel_overrides"`
- }
- // A UserGuildSettingsEdit stores data for editing UserGuildSettings
- type UserGuildSettingsEdit struct {
- SupressEveryone bool `json:"suppress_everyone"`
- Muted bool `json:"muted"`
- MobilePush bool `json:"mobile_push"`
- MessageNotifications int `json:"message_notifications"`
- ChannelOverrides map[string]*UserGuildSettingsChannelOverride `json:"channel_overrides"`
- }
- // An APIErrorMessage is an api error message returned from discord
- type APIErrorMessage struct {
- Code int `json:"code"`
- Message string `json:"message"`
- }
- // Webhook stores the data for a webhook.
- type Webhook struct {
- ID string `json:"id"`
- GuildID string `json:"guild_id"`
- ChannelID string `json:"channel_id"`
- User *User `json:"user"`
- Name string `json:"name"`
- Avatar string `json:"avatar"`
- Token string `json:"token"`
- }
- // WebhookParams is a struct for webhook params, used in the WebhookExecute command.
- type WebhookParams struct {
- Content string `json:"content,omitempty"`
- Username string `json:"username,omitempty"`
- AvatarURL string `json:"avatar_url,omitempty"`
- TTS bool `json:"tts,omitempty"`
- File string `json:"file,omitempty"`
- Embeds []*MessageEmbed `json:"embeds,omitempty"`
- }
- // MessageReaction stores the data for a message reaction.
- type MessageReaction struct {
- UserID string `json:"user_id"`
- MessageID string `json:"message_id"`
- Emoji Emoji `json:"emoji"`
- ChannelID string `json:"channel_id"`
- GuildID string `json:"guild_id,omitempty"`
- }
- // GatewayBotResponse stores the data for the gateway/bot response
- type GatewayBotResponse struct {
- URL string `json:"url"`
- Shards int `json:"shards"`
- }
- // Constants for the different bit offsets of text channel permissions
- const (
- PermissionReadMessages = 1 << (iota + 10)
- PermissionSendMessages
- PermissionSendTTSMessages
- PermissionManageMessages
- PermissionEmbedLinks
- PermissionAttachFiles
- PermissionReadMessageHistory
- PermissionMentionEveryone
- PermissionUseExternalEmojis
- )
- // Constants for the different bit offsets of voice permissions
- const (
- PermissionVoiceConnect = 1 << (iota + 20)
- PermissionVoiceSpeak
- PermissionVoiceMuteMembers
- PermissionVoiceDeafenMembers
- PermissionVoiceMoveMembers
- PermissionVoiceUseVAD
- )
- // Constants for general management.
- const (
- PermissionChangeNickname = 1 << (iota + 26)
- PermissionManageNicknames
- PermissionManageRoles
- PermissionManageWebhooks
- PermissionManageEmojis
- )
- // Constants for the different bit offsets of general permissions
- const (
- PermissionCreateInstantInvite = 1 << iota
- PermissionKickMembers
- PermissionBanMembers
- PermissionAdministrator
- PermissionManageChannels
- PermissionManageServer
- PermissionAddReactions
- PermissionViewAuditLogs
- PermissionAllText = PermissionReadMessages |
- PermissionSendMessages |
- PermissionSendTTSMessages |
- PermissionManageMessages |
- PermissionEmbedLinks |
- PermissionAttachFiles |
- PermissionReadMessageHistory |
- PermissionMentionEveryone
- PermissionAllVoice = PermissionVoiceConnect |
- PermissionVoiceSpeak |
- PermissionVoiceMuteMembers |
- PermissionVoiceDeafenMembers |
- PermissionVoiceMoveMembers |
- PermissionVoiceUseVAD
- PermissionAllChannel = PermissionAllText |
- PermissionAllVoice |
- PermissionCreateInstantInvite |
- PermissionManageRoles |
- PermissionManageChannels |
- PermissionAddReactions |
- PermissionViewAuditLogs
- PermissionAll = PermissionAllChannel |
- PermissionKickMembers |
- PermissionBanMembers |
- PermissionManageServer |
- PermissionAdministrator |
- PermissionManageWebhooks |
- PermissionManageEmojis
- )
- // Block contains Discord JSON Error Response codes
- const (
- ErrCodeUnknownAccount = 10001
- ErrCodeUnknownApplication = 10002
- ErrCodeUnknownChannel = 10003
- ErrCodeUnknownGuild = 10004
- ErrCodeUnknownIntegration = 10005
- ErrCodeUnknownInvite = 10006
- ErrCodeUnknownMember = 10007
- ErrCodeUnknownMessage = 10008
- ErrCodeUnknownOverwrite = 10009
- ErrCodeUnknownProvider = 10010
- ErrCodeUnknownRole = 10011
- ErrCodeUnknownToken = 10012
- ErrCodeUnknownUser = 10013
- ErrCodeUnknownEmoji = 10014
- ErrCodeUnknownWebhook = 10015
- ErrCodeBotsCannotUseEndpoint = 20001
- ErrCodeOnlyBotsCanUseEndpoint = 20002
- ErrCodeMaximumGuildsReached = 30001
- ErrCodeMaximumFriendsReached = 30002
- ErrCodeMaximumPinsReached = 30003
- ErrCodeMaximumGuildRolesReached = 30005
- ErrCodeTooManyReactions = 30010
- ErrCodeUnauthorized = 40001
- ErrCodeMissingAccess = 50001
- ErrCodeInvalidAccountType = 50002
- ErrCodeCannotExecuteActionOnDMChannel = 50003
- ErrCodeEmbedCisabled = 50004
- ErrCodeCannotEditFromAnotherUser = 50005
- ErrCodeCannotSendEmptyMessage = 50006
- ErrCodeCannotSendMessagesToThisUser = 50007
- ErrCodeCannotSendMessagesInVoiceChannel = 50008
- ErrCodeChannelVerificationLevelTooHigh = 50009
- ErrCodeOAuth2ApplicationDoesNotHaveBot = 50010
- ErrCodeOAuth2ApplicationLimitReached = 50011
- ErrCodeInvalidOAuthState = 50012
- ErrCodeMissingPermissions = 50013
- ErrCodeInvalidAuthenticationToken = 50014
- ErrCodeNoteTooLong = 50015
- ErrCodeTooFewOrTooManyMessagesToDelete = 50016
- ErrCodeCanOnlyPinMessageToOriginatingChannel = 50019
- ErrCodeCannotExecuteActionOnSystemMessage = 50021
- ErrCodeMessageProvidedTooOldForBulkDelete = 50034
- ErrCodeInvalidFormBody = 50035
- ErrCodeInviteAcceptedToGuildApplicationsBotNotIn = 50036
- ErrCodeReactionBlocked = 90001
- )
|