Deprecated Session.UserChannelPermissions
Created new UserChannelPermissions in State.
This commit is contained in:
parent
5501cac820
commit
ea72e85416
2 changed files with 66 additions and 0 deletions
|
@ -376,6 +376,8 @@ func (s *Session) UserGuildSettingsEdit(guildID string, settings *UserGuildSetti
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NOTE: This function is now deprecated and will be removed in the future.
|
||||||
|
// Please see the same function inside state.go
|
||||||
// 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.
|
||||||
|
|
64
state.go
64
state.go
|
@ -680,3 +680,67 @@ func (s *State) onInterface(se *Session, i interface{}) (err error) {
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UserChannelPermissions returns the permission of a user in a channel.
|
||||||
|
// userID : The ID of the user to calculate permissions for.
|
||||||
|
// channelID : The ID of the channel to calculate permission for.
|
||||||
|
func (s *State) UserChannelPermissions(userID, channelID string) (apermissions int, err error) {
|
||||||
|
|
||||||
|
channel, err := s.Channel(channelID)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
guild, err := s.Guild(channel.GuildID)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if userID == guild.OwnerID {
|
||||||
|
apermissions = PermissionAll
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
member, err := s.Member(guild.ID, userID)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, role := range guild.Roles {
|
||||||
|
for _, roleID := range member.Roles {
|
||||||
|
if role.ID == roleID {
|
||||||
|
apermissions |= role.Permissions
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if apermissions&PermissionManageRoles > 0 {
|
||||||
|
apermissions |= PermissionAll
|
||||||
|
}
|
||||||
|
|
||||||
|
// Member overwrites can override role overrides, so do two passes
|
||||||
|
for _, overwrite := range channel.PermissionOverwrites {
|
||||||
|
for _, roleID := range member.Roles {
|
||||||
|
if overwrite.Type == "role" && roleID == overwrite.ID {
|
||||||
|
apermissions &= ^overwrite.Deny
|
||||||
|
apermissions |= overwrite.Allow
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, overwrite := range channel.PermissionOverwrites {
|
||||||
|
if overwrite.Type == "member" && overwrite.ID == userID {
|
||||||
|
apermissions &= ^overwrite.Deny
|
||||||
|
apermissions |= overwrite.Allow
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if apermissions&PermissionManageRoles > 0 {
|
||||||
|
apermissions |= PermissionAllChannel
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue