Add v8 permissions changes
This commit is contained in:
parent
9eb033c0db
commit
3773e286e6
3 changed files with 28 additions and 20 deletions
16
restapi.go
16
restapi.go
|
@ -465,7 +465,7 @@ func (s *Session) UserGuildSettingsEdit(guildID string, settings *UserGuildSetti
|
||||||
//
|
//
|
||||||
// NOTE: This function is now deprecated and will be removed in the future.
|
// NOTE: This function is now deprecated and will be removed in the future.
|
||||||
// Please see the same function inside state.go
|
// Please see the same function inside state.go
|
||||||
func (s *Session) UserChannelPermissions(userID, channelID string) (apermissions int, err error) {
|
func (s *Session) UserChannelPermissions(userID, channelID string) (apermissions int64, err error) {
|
||||||
// Try to just get permissions from state.
|
// Try to just get permissions from state.
|
||||||
apermissions, err = s.State.UserChannelPermissions(userID, channelID)
|
apermissions, err = s.State.UserChannelPermissions(userID, channelID)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
@ -507,7 +507,7 @@ func (s *Session) UserChannelPermissions(userID, channelID string) (apermissions
|
||||||
|
|
||||||
// Calculates the permissions for a member.
|
// Calculates the permissions for a member.
|
||||||
// https://support.discord.com/hc/en-us/articles/206141927-How-is-the-permission-hierarchy-structured-
|
// https://support.discord.com/hc/en-us/articles/206141927-How-is-the-permission-hierarchy-structured-
|
||||||
func memberPermissions(guild *Guild, channel *Channel, userID string, roles []string) (apermissions int) {
|
func memberPermissions(guild *Guild, channel *Channel, userID string, roles []string) (apermissions int64) {
|
||||||
if userID == guild.OwnerID {
|
if userID == guild.OwnerID {
|
||||||
apermissions = PermissionAll
|
apermissions = PermissionAll
|
||||||
return
|
return
|
||||||
|
@ -542,13 +542,11 @@ func memberPermissions(guild *Guild, channel *Channel, userID string, roles []st
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
denies := 0
|
var denies, allows int64
|
||||||
allows := 0
|
|
||||||
|
|
||||||
// Member overwrites can override role overrides, so do two passes
|
// Member overwrites can override role overrides, so do two passes
|
||||||
for _, overwrite := range channel.PermissionOverwrites {
|
for _, overwrite := range channel.PermissionOverwrites {
|
||||||
for _, roleID := range roles {
|
for _, roleID := range roles {
|
||||||
if overwrite.Type == "role" && roleID == overwrite.ID {
|
if overwrite.Type == PermissionOverwriteTypeRole && roleID == overwrite.ID {
|
||||||
denies |= overwrite.Deny
|
denies |= overwrite.Deny
|
||||||
allows |= overwrite.Allow
|
allows |= overwrite.Allow
|
||||||
break
|
break
|
||||||
|
@ -560,7 +558,7 @@ func memberPermissions(guild *Guild, channel *Channel, userID string, roles []st
|
||||||
apermissions |= allows
|
apermissions |= allows
|
||||||
|
|
||||||
for _, overwrite := range channel.PermissionOverwrites {
|
for _, overwrite := range channel.PermissionOverwrites {
|
||||||
if overwrite.Type == "member" && overwrite.ID == userID {
|
if overwrite.Type == PermissionOverwriteTypeMember && overwrite.ID == userID {
|
||||||
apermissions &= ^overwrite.Deny
|
apermissions &= ^overwrite.Deny
|
||||||
apermissions |= overwrite.Allow
|
apermissions |= overwrite.Allow
|
||||||
break
|
break
|
||||||
|
@ -1809,11 +1807,11 @@ func (s *Session) ChannelInviteCreate(channelID string, i Invite) (st *Invite, e
|
||||||
// ChannelPermissionSet creates a Permission Override for the given channel.
|
// ChannelPermissionSet creates a Permission Override for the given channel.
|
||||||
// NOTE: This func name may changed. Using Set instead of Create because
|
// NOTE: This func name may changed. Using Set instead of Create because
|
||||||
// you can both create a new override or update an override with this function.
|
// you can both create a new override or update an override with this function.
|
||||||
func (s *Session) ChannelPermissionSet(channelID, targetID, targetType string, allow, deny int) (err error) {
|
func (s *Session) ChannelPermissionSet(channelID, targetID string, targetType PermissionOverwriteType, allow, deny int) (err error) {
|
||||||
|
|
||||||
data := struct {
|
data := struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
Type string `json:"type"`
|
Type PermissionOverwriteType `json:"type"`
|
||||||
Allow int `json:"allow"`
|
Allow int `json:"allow"`
|
||||||
Deny int `json:"deny"`
|
Deny int `json:"deny"`
|
||||||
}{targetID, targetType, allow, deny}
|
}{targetID, targetType, allow, deny}
|
||||||
|
|
4
state.go
4
state.go
|
@ -997,7 +997,7 @@ func (s *State) OnInterface(se *Session, i interface{}) (err error) {
|
||||||
// UserChannelPermissions returns the permission of a user in a channel.
|
// UserChannelPermissions returns the permission of a user in a channel.
|
||||||
// userID : The ID of the user to calculate permissions for.
|
// userID : The ID of the user to calculate permissions for.
|
||||||
// channelID : The ID of the channel to calculate permission for.
|
// channelID : The ID of the channel to calculate permission for.
|
||||||
func (s *State) UserChannelPermissions(userID, channelID string) (apermissions int, err error) {
|
func (s *State) UserChannelPermissions(userID, channelID string) (apermissions int64, err error) {
|
||||||
if s == nil {
|
if s == nil {
|
||||||
return 0, ErrNilState
|
return 0, ErrNilState
|
||||||
}
|
}
|
||||||
|
@ -1022,7 +1022,7 @@ func (s *State) UserChannelPermissions(userID, channelID string) (apermissions i
|
||||||
|
|
||||||
// MessagePermissions returns the permissions of the author of the message
|
// MessagePermissions returns the permissions of the author of the message
|
||||||
// in the channel in which it was sent.
|
// in the channel in which it was sent.
|
||||||
func (s *State) MessagePermissions(message *Message) (apermissions int, err error) {
|
func (s *State) MessagePermissions(message *Message) (apermissions int64, err error) {
|
||||||
if s == nil {
|
if s == nil {
|
||||||
return 0, ErrNilState
|
return 0, ErrNilState
|
||||||
}
|
}
|
||||||
|
|
20
structs.go
20
structs.go
|
@ -322,12 +322,22 @@ type ChannelFollow struct {
|
||||||
WebhookID string `json:"webhook_id"`
|
WebhookID string `json:"webhook_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PermissionOverwriteType represents the type of resource on which
|
||||||
|
// a permission overwrite acts.
|
||||||
|
type PermissionOverwriteType int
|
||||||
|
|
||||||
|
// The possible permission overwrite types.
|
||||||
|
const (
|
||||||
|
PermissionOverwriteTypeRole PermissionOverwriteType = iota
|
||||||
|
PermissionOverwriteTypeMember
|
||||||
|
)
|
||||||
|
|
||||||
// A PermissionOverwrite holds permission overwrite data for a Channel
|
// A PermissionOverwrite holds permission overwrite data for a Channel
|
||||||
type PermissionOverwrite struct {
|
type PermissionOverwrite struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
Type string `json:"type"`
|
Type PermissionOverwriteType `json:"type"`
|
||||||
Deny int `json:"deny"`
|
Deny int64 `json:"deny,string"`
|
||||||
Allow int `json:"allow"`
|
Allow int64 `json:"allow,string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Emoji struct holds data related to Emoji's
|
// Emoji struct holds data related to Emoji's
|
||||||
|
@ -564,7 +574,7 @@ type Guild struct {
|
||||||
ApproximatePresenceCount int `json:"approximate_presence_count"`
|
ApproximatePresenceCount int `json:"approximate_presence_count"`
|
||||||
|
|
||||||
// Permissions of our user
|
// Permissions of our user
|
||||||
Permissions int `json:"permissions"`
|
Permissions int64 `json:"permissions,string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// MessageNotifications is the notification level for a guild
|
// MessageNotifications is the notification level for a guild
|
||||||
|
@ -650,7 +660,7 @@ type Role struct {
|
||||||
// The permissions of the role on the guild (doesn't include channel overrides).
|
// 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
|
// 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.
|
// be checked by performing a bitwise AND between this int and the permission.
|
||||||
Permissions int `json:"permissions"`
|
Permissions int64 `json:"permissions,string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mention returns a string which mentions the role
|
// Mention returns a string which mentions the role
|
||||||
|
|
Loading…
Reference in a new issue