Deprecated Session.UserChannelPermissions

Created new UserChannelPermissions in State.
This commit is contained in:
Bruce Marriner 2016-07-18 17:04:00 -05:00
parent 5501cac820
commit ea72e85416
2 changed files with 66 additions and 0 deletions

View file

@ -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.

View file

@ -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
}