Fix UserChannelPermissions

This commit is contained in:
abalabahaha 2016-03-04 05:50:11 -08:00
parent cd24674ebb
commit 539b9d203f
2 changed files with 20 additions and 22 deletions

View file

@ -352,27 +352,25 @@ func (s *Session) UserChannelPermissions(userID, channelID string) (apermissions
return return
} }
apermissions = 0
for _, role := range guild.Roles { for _, role := range guild.Roles {
for _, roleID := range member.Roles { for _, roleID := range member.Roles {
if role.ID == roleID { if role.ID == roleID {
apermissions = apermissions | role.Permissions apermissions |= role.Permissions
break break
} }
} }
} }
if apermissions & (PermissionManageRoles) > 0 { if apermissions & PermissionManageRoles > 0 {
apermissions = PermissionAll apermissions |= PermissionAll
} }
// 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 member.Roles { for _, roleID := range member.Roles {
if overwrite.Type == "role" && roleID == overwrite.ID { if overwrite.Type == "role" && roleID == overwrite.ID {
apermissions = apermissions & ^overwrite.Deny apermissions &= ^overwrite.Deny
apermissions = apermissions | overwrite.Allow apermissions |= overwrite.Allow
break break
} }
} }
@ -380,8 +378,8 @@ func (s *Session) UserChannelPermissions(userID, channelID string) (apermissions
for _, overwrite := range channel.PermissionOverwrites { for _, overwrite := range channel.PermissionOverwrites {
if overwrite.Type == "member" && overwrite.ID == userID { if overwrite.Type == "member" && overwrite.ID == userID {
apermissions = apermissions & ^overwrite.Deny apermissions &= ^overwrite.Deny
apermissions = apermissions | overwrite.Allow apermissions |= overwrite.Allow
break break
} }
} }

View file

@ -366,19 +366,6 @@ type State struct {
MaxMessageCount int MaxMessageCount int
} }
// Constants for the different bit offsets of general permissions
const (
PermissionCreateInstantInvite = 1 << iota
PermissionKickMembers
PermissionBanMembers
PermissionManageRoles
PermissionManageChannels
PermissionManageServer
PermissionAll = 66321471
PermissionAllChannel = 66321433
)
// Constants for the different bit offsets of text channel permissions // Constants for the different bit offsets of text channel permissions
const ( const (
PermissionReadMessages = 1 << (iota + 10) PermissionReadMessages = 1 << (iota + 10)
@ -400,3 +387,16 @@ const (
PermissionVoiceMoveMembers PermissionVoiceMoveMembers
PermissionVoiceUseVAD PermissionVoiceUseVAD
) )
// Constants for the different bit offsets of general permissions
const (
PermissionCreateInstantInvite = 1 << iota
PermissionKickMembers
PermissionBanMembers
PermissionManageRoles
PermissionManageChannels
PermissionManageServer
PermissionAllChannel = PermissionReadMessages | PermissionSendMessages | PermissionSendTTSMessages | PermissionManageMessages | PermissionEmbedLinks | PermissionAttachFiles | PermissionReadMessageHistory | PermissionMentionEveryone | PermissionVoiceConnect | PermissionVoiceSpeak | PermissionVoiceMuteMembers | PermissionVoiceDeafenMembers | PermissionVoiceMoveMembers | PermissionVoiceUseVAD | PermissionCreateInstantInvite | PermissionManageRoles | PermissionManageChannels
PermissionAll = PermissionAllChannel | PermissionKickMembers | PermissionBanMembers | PermissionManageServer
)