diff --git a/api/channel.go b/api/channel.go index 9d78b48..a65e86e 100644 --- a/api/channel.go +++ b/api/channel.go @@ -167,13 +167,14 @@ func (c *Client) DeleteChannel(channelID discord.ChannelID) error { return c.FastRequest("DELETE", EndpointChannels+channelID.String()) } +// https://discord.com/developers/docs/resources/channel#edit-channel-permissions-json-params type EditChannelPermissionData struct { // Type is either "role" or "member". Type discord.OverwriteType `json:"type"` // Allow is a permission bit set for granted permissions. - Allow discord.Permissions `json:"allow"` + Allow discord.Permissions `json:"allow,string"` // Deny is a permission bit set for denied permissions. - Deny discord.Permissions `json:"deny"` + Deny discord.Permissions `json:"deny,string"` } // EditChannelPermission edits the channel's permission overwrites for a user diff --git a/api/role.go b/api/role.go index 5ea2d6f..b1fab9b 100644 --- a/api/role.go +++ b/api/role.go @@ -42,7 +42,7 @@ type CreateRoleData struct { // Permissions is the bitwise value of the enabled/disabled permissions. // // Default: @everyone permissions in guild - Permissions discord.Permissions `json:"permissions,omitempty"` + Permissions discord.Permissions `json:"permissions,omitempty,string"` // Color is the RGB color value of the role. // // Default: 0 @@ -98,7 +98,7 @@ type ModifyRoleData struct { // Name is the name of the role. Name option.NullableString `json:"name,omitempty"` // Permissions is the bitwise value of the enabled/disabled permissions. - Permissions *discord.Permissions `json:"permissions,omitempty"` + Permissions *discord.Permissions `json:"permissions,omitempty,string"` // Permissions is the bitwise value of the enabled/disabled permissions. Color option.NullableColor `json:"color,omitempty"` // Hoist specifies whether the role should be displayed separately in the diff --git a/discord/channel.go b/discord/channel.go index 5ec3403..171c71f 100644 --- a/discord/channel.go +++ b/discord/channel.go @@ -1,5 +1,7 @@ package discord +import "github.com/diamondburned/arikawa/utils/json" + // https://discord.com/developers/docs/resources/channel#channel-object type Channel struct { // ID is the id of this channel. @@ -103,13 +105,37 @@ var ( // https://discord.com/developers/docs/resources/channel#overwrite-object type Overwrite struct { // ID is the role or user id. - ID Snowflake `json:"id,string"` + ID Snowflake `json:"id"` // Type is either "role" or "member". Type OverwriteType `json:"type"` // Allow is a permission bit set for granted permissions. - Allow Permissions `json:"allow"` + Allow Permissions `json:"allow,string"` // Deny is a permission bit set for denied permissions. - Deny Permissions `json:"deny"` + Deny Permissions `json:"deny,string"` +} + +// UnmarshalJSON unmarshals the passed json data into the Overwrite. +// This is necessary because Discord has different names for fields when +// sending than receiving. +func (o *Overwrite) UnmarshalJSON(data []byte) (err error) { + var recv struct { + ID Snowflake `json:"id"` + Type OverwriteType `json:"type"` + Allow Permissions `json:"allow_new,string"` + Deny Permissions `json:"deny_new,string"` + } + + err = json.Unmarshal(data, &recv) + if err != nil { + return + } + + o.ID = recv.ID + o.Type = recv.Type + o.Allow = recv.Allow + o.Deny = recv.Deny + + return } type OverwriteType string diff --git a/discord/guild.go b/discord/guild.go index 3c33974..7a22bec 100644 --- a/discord/guild.go +++ b/discord/guild.go @@ -23,7 +23,7 @@ type Guild struct { // Permissions are the total permissions for the user in the guild // (excludes overrides). - Permissions Permissions `json:"permissions,omitempty"` + Permissions Permissions `json:"permissions_new,omitempty,string"` // VoiceRegion is the voice region id for the guild. VoiceRegion string `json:"region"` @@ -297,7 +297,7 @@ type Role struct { Position int `json:"position"` // Permissions is the permission bit set. - Permissions Permissions `json:"permissions"` + Permissions Permissions `json:"permissions_new,string"` // Manages specifies whether this role is managed by an integration. Managed bool `json:"managed"`