1
0
Fork 0
mirror of https://github.com/diamondburned/arikawa.git synced 2025-03-22 18:09:21 +00:00

Discord: optimize struct sizes; add missing fields

This commit is contained in:
mavolin 2020-11-22 15:48:36 +01:00 committed by diamondburned
parent a616eae7f0
commit fc5d10ced8
8 changed files with 130 additions and 107 deletions

View file

@ -26,7 +26,7 @@ type AuditLogEntry struct {
// ID is the id of the entry.
ID AuditLogEntryID `json:"id"`
// TargetID is the id of the affected entity (webhook, user, role, etc.).
TargetID string `json:"target_id,omitempty"`
TargetID Snowflake `json:"target_id"`
// Changes are the changes made to the TargetID.
Changes []AuditLogChange `json:"changes,omitempty"`
// UserID is the id of the user who made the changes.

View file

@ -8,11 +8,14 @@ import (
// https://discord.com/developers/docs/resources/channel#channel-object
type Channel struct {
// ID is the id of this channel.
ID ChannelID `json:"id,string"`
ID ChannelID `json:"id"`
// GuildID is the id of the guild.
GuildID GuildID `json:"guild_id,omitempty"`
// Type is the type of channel.
Type ChannelType `json:"type,omitempty"`
// GuildID is the id of the guild.
GuildID GuildID `json:"guild_id,string,omitempty"`
// NSFW specifies whether the channel is nsfw.
NSFW bool `json:"nsfw,omitempty"`
// Position is the sorting position of the channel.
Position int `json:"position,omitempty"`
@ -23,12 +26,10 @@ type Channel struct {
Name string `json:"name,omitempty"`
// Topic is the channel topic (0-1024 characters).
Topic string `json:"topic,omitempty"`
// NSFW specifies whether the channel is nsfw.
NSFW bool `json:"nsfw,omitempty"`
// LastMessageID is the id of the last message sent in this channel (may
// not point to an existing or valid message).
LastMessageID MessageID `json:"last_message_id,string,omitempty"`
LastMessageID MessageID `json:"last_message_id,omitempty"`
// VoiceBitrate is the bitrate (in bits) of the voice channel.
VoiceBitrate uint `json:"bitrate,omitempty"`
@ -45,15 +46,15 @@ type Channel struct {
// Icon is the icon hash.
Icon Hash `json:"icon,omitempty"`
// DMOwnerID is the id of the DM creator.
DMOwnerID UserID `json:"owner_id,string,omitempty"`
DMOwnerID UserID `json:"owner_id,omitempty"`
// AppID is the application id of the group DM creator if it is
// bot-created.
AppID AppID `json:"application_id,string,omitempty"`
AppID AppID `json:"application_id,omitempty"`
// CategoryID is the id of the parent category for a channel (each parent
// category can contain up to 50 channels).
CategoryID ChannelID `json:"parent_id,string,omitempty"`
CategoryID ChannelID `json:"parent_id,omitempty"`
// LastPinTime is when the last pinned message was pinned.
LastPinTime Timestamp `json:"last_pin_timestamp,omitempty"`
}

View file

@ -4,7 +4,7 @@
package discord
// HasFlag is returns true if has is in the flag. In other words, it checks if
// has is OR'd into flag. This function could be used for different constants
// has is OR'ed into flag. This function could be used for different constants
// such as Permission.
func HasFlag(flag, has uint64) bool {
return flag&has == has

View file

@ -2,18 +2,40 @@ package discord
import "strings"
// https://discord.com/developers/docs/resources/emoji#emoji-object
type Emoji struct {
ID EmojiID `json:"id,string"` // NullSnowflake for unicode emojis
Name string `json:"name"`
// These fields are optional
// ID is the ID of the Emoji.
// The ID will be NullSnowflake, if the Emoji is a Unicode emoji.
ID EmojiID `json:"id"`
// Name is the name of the emoji.
Name string `json:"name"`
// RoleIDs are the roles the emoji is whitelisted to.
//
// This field is only available for custom emojis.
RoleIDs []RoleID `json:"roles,omitempty"`
User User `json:"user,omitempty"`
// User is the user that created the emoji.
//
// This field is only available for custom emojis.
User User `json:"user,omitempty"`
// RequireColons specifies whether the emoji must be wrapped in colons.
//
// This field is only available for custom emojis.
RequireColons bool `json:"require_colons,omitempty"`
Managed bool `json:"managed,omitempty"`
Animated bool `json:"animated,omitempty"`
// Managed specifies whether the emoji is managed.
//
// This field is only available for custom emojis.
Managed bool `json:"managed,omitempty"`
// Animated specifies whether the emoji is animated.
//
// This field is only available for custom emojis.
Animated bool `json:"animated,omitempty"`
// Available specifies whether the emoji can be used.
// This may be false tue to loss of Server Boosts.
//
// This field is only available for custom emojis.
Available bool `json:"available,omitempty"`
}
// EmojiURL returns the URL of the emoji and auto-detects a suitable type.

View file

@ -3,7 +3,7 @@ package discord
// https://discord.com/developers/docs/resources/guild#guild-object
type Guild struct {
// ID is the guild id.
ID GuildID `json:"id,string"`
ID GuildID `json:"id"`
// Name is the guild name (2-100 characters, excluding trailing and leading
// whitespace).
Name string `json:"name"`
@ -18,27 +18,42 @@ type Guild struct {
// Owner is true if the user is the owner of the guild.
Owner bool `json:"owner,omitempty"`
// OwnerID is the id of owner.
OwnerID UserID `json:"owner_id,string"`
// Permissions are the total permissions for the user in the guild
// (excludes overrides).
Permissions Permissions `json:"permissions,string,omitempty"`
// VoiceRegion is the voice region id for the guild.
VoiceRegion string `json:"region"`
// AFKChannelID is the id of the afk channel.
AFKChannelID ChannelID `json:"afk_channel_id,string,omitempty"`
// AFKTimeout is the afk timeout in seconds.
AFKTimeout Seconds `json:"afk_timeout"`
// Widget is true if the server widget is enabled.
Widget bool `json:"widget_enabled,omitempty"`
// SystemChannelFlags are the system channel flags.
SystemChannelFlags SystemChannelFlags `json:"system_channel_flags"`
// Verification is the verification level required for the guild.
Verification Verification `json:"verification_level"`
// Notification is the default message notifications level.
Notification Notification `json:"default_message_notifications"`
// ExplicitFilter is the explicit content filter level.
ExplicitFilter ExplicitFilter `json:"explicit_content_filter"`
// NitroBoost is the premium tier (Server Boost level).
NitroBoost NitroBoost `json:"premium_tier"`
// MFA is the required MFA level for the guild.
MFA MFALevel `json:"mfa"`
// OwnerID is the id of owner.
OwnerID UserID `json:"owner_id"`
// WidgetChannelID is the channel id that the widget will generate an
// invite to, or null if set to no invite.
WidgetChannelID ChannelID `json:"widget_channel_id,omitempty"`
// SystemChannelID is the the id of the channel where guild notices such as
// welcome messages and boost events are posted.
SystemChannelID ChannelID `json:"system_channel_id,omitempty"`
// Permissions are the total permissions for the user in the guild
// (excludes overrides).
Permissions Permissions `json:"permissions,omitempty"`
// VoiceRegion is the voice region id for the guild.
VoiceRegion string `json:"region"`
// AFKChannelID is the id of the afk channel.
AFKChannelID ChannelID `json:"afk_channel_id,omitempty"`
// AFKTimeout is the afk timeout in seconds.
AFKTimeout Seconds `json:"afk_timeout"`
// Roles are the roles in the guild.
Roles []Role `json:"roles"`
@ -47,25 +62,10 @@ type Guild struct {
// Features are the enabled guild features.
Features []GuildFeature `json:"guild_features"`
// MFA is the required MFA level for the guild.
MFA MFALevel `json:"mfa"`
// AppID is the application id of the guild creator if it is bot-created.
//
// This field is nullable.
AppID AppID `json:"application_id,string,omitempty"`
// Widget is true if the server widget is enabled.
Widget bool `json:"widget_enabled,omitempty"`
// WidgetChannelID is the channel id that the widget will generate an
// invite to, or null if set to no invite.
WidgetChannelID ChannelID `json:"widget_channel_id,string,omitempty"`
// SystemChannelID is the the id of the channel where guild notices such as
// welcome messages and boost events are posted.
SystemChannelID ChannelID `json:"system_channel_id,string,omitempty"`
// SystemChannelFlags are the system channel flags.
SystemChannelFlags SystemChannelFlags `json:"system_channel_flags"`
AppID AppID `json:"application_id,omitempty"`
// RulesChannelID is the id of the channel where guilds with the "PUBLIC"
// feature can display rules and/or guidelines.
@ -87,8 +87,6 @@ type Guild struct {
// Banner is the banner hash.
Banner Hash `json:"banner,omitempty"`
// NitroBoost is the premium tier (Server Boost level).
NitroBoost NitroBoost `json:"premium_tier"`
// NitroBoosters is the number of boosts this guild currently has.
NitroBoosters uint64 `json:"premium_subscription_count,omitempty"`
@ -276,20 +274,20 @@ func (g GuildPreview) DiscoverySplashURLWithType(t ImageType) string {
// https://discord.com/developers/docs/topics/permissions#role-object
type Role struct {
// ID is the role id.
ID RoleID `json:"id,string"`
ID RoleID `json:"id"`
// Name is the role name.
Name string `json:"name"`
// Color is the integer representation of hexadecimal color code.
Color Color `json:"color"`
// Hoist specifies if this role is pinned in the user listing.
Hoist bool `json:"hoist"`
// Permissions is the permission bit set.
Permissions Permissions `json:"permissions"`
// Position is the position of this role.
Position int `json:"position"`
// Color is the integer representation of hexadecimal color code.
Color Color `json:"color"`
// Permissions is the permission bit set.
Permissions Permissions `json:"permissions,string"`
// Hoist specifies if this role is pinned in the user listing.
Hoist bool `json:"hoist"`
// Manages specifies whether this role is managed by an integration.
Managed bool `json:"managed"`
// Mentionable specifies whether this role is mentionable.

View file

@ -11,13 +11,42 @@ import (
// https://discord.com/developers/docs/resources/channel#message-object
type Message struct {
// ID is the id of the message.
ID MessageID `json:"id,string"`
ID MessageID `json:"id"`
// ChannelID is the id of the channel the message was sent in.
ChannelID ChannelID `json:"channel_id"`
// GuildID is the id of the guild the message was sent in.
GuildID GuildID `json:"guild_id,omitempty"`
// Type is the type of message.
Type MessageType `json:"type"`
// ChannelID is the id of the channel the message was sent in.
ChannelID ChannelID `json:"channel_id,string"`
// GuildID is the id of the guild the message was sent in.
GuildID GuildID `json:"guild_id,string,omitempty"`
// Flags are the MessageFlags.
Flags MessageFlags `json:"flags"`
// TTS specifies whether the was a TTS message.
TTS bool `json:"tts"`
// Pinned specifies whether the message is pinned.
Pinned bool `json:"pinned"`
// MentionEveryone specifies whether the message mentions everyone.
MentionEveryone bool `json:"mention_everyone"`
// Mentions contains the users specifically mentioned in the message.
//
// The user objects in the mentions array will only have the partial
// member field present in MESSAGE_CREATE and MESSAGE_UPDATE events from
// text-based guild channels.
Mentions []GuildUser `json:"mentions"`
// MentionRoleIDs contains the ids of the roles specifically mentioned in
// the message.
MentionRoleIDs []RoleID `json:"mention_roles"`
// MentionChannels are the channels specifically mentioned in the message.
//
// Not all channel mentions in a message will appear in mention_channels.
// Only textual channels that are visible to everyone in a lurkable guild
// will ever be included. Only crossposted messages (via Channel Following)
// currently include mention_channels at all. If no mentions in the message
// meet these requirements, the slice will be empty.
MentionChannels []ChannelMention `json:"mention_channels,omitempty"`
// Author is the author of the message.
//
@ -39,32 +68,6 @@ type Message struct {
// IsValid() will return false, if the messages hasn't been edited.
EditedTimestamp Timestamp `json:"edited_timestamp,omitempty"`
// TTS specifies whether the was a TTS message.
TTS bool `json:"tts"`
// Pinned specifies whether the message is pinned.
Pinned bool `json:"pinned"`
// Mentions contains the users specifically mentioned in the message.
//
// The user objects in the mentions array will only have the partial
// member field present in MESSAGE_CREATE and MESSAGE_UPDATE events from
// text-based guild channels.
Mentions []GuildUser `json:"mentions"`
// MentionEveryone specifies whether the message mentions everyone.
MentionEveryone bool `json:"mention_everyone"`
// MentionRoleIDs contains the ids of the roles specifically mentioned in
// the message.
MentionRoleIDs []RoleID `json:"mention_roles"`
// MentionChannels are the channels specifically mentioned in the message.
//
// Not all channel mentions in a message will appear in mention_channels.
// Only textual channels that are visible to everyone in a lurkable guild
// will ever be included. Only crossposted messages (via Channel Following)
// currently include mention_channels at all. If no mentions in the message
// meet these requirements, the slice will be empty.
MentionChannels []ChannelMention `json:"mention_channels,omitempty"`
// Attachments contains any attached files.
Attachments []Attachment `json:"attachments"`
// Embeds contains any embedded content.
@ -77,7 +80,7 @@ type Message struct {
// WebhookID contains the ID of the webhook, if the message was generated
// by a webhook.
WebhookID WebhookID `json:"webhook_id,string,omitempty"`
WebhookID WebhookID `json:"webhook_id,omitempty"`
// Activity is sent with Rich Presence-related chat embeds.
Activity *MessageActivity `json:"activity,omitempty"`
@ -93,8 +96,6 @@ type Message struct {
// non-null, it is a message object
ReferencedMessage *Message `json:"referenced_message,omitempty"`
// Flags are the MessageFlags.
Flags MessageFlags `json:"flags"`
// Stickers contains the sticker sent with the message.
Stickers []Sticker `json:"stickers,omitempty"`
}
@ -321,7 +322,7 @@ type MessageReference struct {
// https://discord.com/developers/docs/resources/channel#attachment-object
type Attachment struct {
// ID is the attachment id.
ID AttachmentID `json:"id,string"`
ID AttachmentID `json:"id"`
// Filename is the name of file attached.
Filename string `json:"filename"`
// Size is the size of file in bytes.

View file

@ -5,7 +5,7 @@ import (
)
type User struct {
ID UserID `json:"id,string"`
ID UserID `json:"id"`
Username string `json:"username"`
Discriminator string `json:"discriminator"`
Avatar Hash `json:"avatar"`
@ -15,15 +15,15 @@ type User struct {
Bot bool `json:"bot,omitempty"`
MFA bool `json:"mfa_enabled,omitempty"`
Nitro UserNitro `json:"premium_type,omitempty"`
Flags UserFlags `json:"flags,omitempty"`
PublicFlags UserFlags `json:"public_flags,omitempty"`
DiscordSystem bool `json:"system,omitempty"`
EmailVerified bool `json:"verified,omitempty"`
Locale string `json:"locale,omitempty"`
Email string `json:"email,omitempty"`
Flags UserFlags `json:"flags,omitempty"`
PublicFlags UserFlags `json:"public_flags,omitempty"`
Nitro UserNitro `json:"premium_type,omitempty"`
}
func (u User) Mention() string {
@ -127,12 +127,16 @@ const (
)
type Activity struct {
Name string `json:"name"`
Name string `json:"name"`
URL URL `json:"url,omitempty"`
Type ActivityType `json:"type"`
URL URL `json:"url,omitempty"`
// User only
Instance bool `json:"instance,omitempty"`
Flags ActivityFlags `json:"flags,omitempty"`
CreatedAt UnixTimestamp `json:"created_at,omitempty"`
Timestamps *ActivityTimestamp `json:"timestamps,omitempty"`
@ -145,9 +149,6 @@ type Activity struct {
Assets *ActivityAssets `json:"assets,omitempty"`
Secrets *ActivitySecrets `json:"secrets,omitempty"`
Instance bool `json:"instance,omitempty"`
Flags ActivityFlags `json:"flags,omitempty"`
// Undocumented fields
SyncID string `json:"sync_id,omitempty"`
SessionID string `json:"session_id,omitempty"`

View file

@ -2,10 +2,10 @@ package discord
type VoiceState struct {
// GuildID isn't available from the Guild struct.
GuildID GuildID `json:"guild_id,string"`
GuildID GuildID `json:"guild_id"`
ChannelID ChannelID `json:"channel_id,string"`
UserID UserID `json:"user_id,string"`
ChannelID ChannelID `json:"channel_id"`
UserID UserID `json:"user_id"`
Member *Member `json:"member,omitempty"`
SessionID string `json:"session_id"`