SinisterRectus / Discordia

Discord API library written in Lua for the Luvit runtime environment
MIT License
688 stars 144 forks source link

Permission calculations in Member:getPermissions return incomplete results #404

Closed BestMordaEver closed 6 months ago

BestMordaEver commented 6 months ago

Permissions object returned by Member:getPermissions is mostly incomplete if a channel argument is passed. Example

print(guild.me:getPermissions())
-- Permissions: 140742071708752 (addReactions, connect, embedLinks, manageChannels, manageMessages, manageRoles, moveMembers, readMessages, requestToSpeak, sendMessages, speak)
print(guild.me:getPermissions(channel))
-- Permissions: 1049600 (connect, readMessages)
print(channel:getPermissionOverwriteFor(guild.me).allowedPermissions)
-- 1049600
print(channel:getPermissionOverwriteFor(guild.me).deniedPermissions)
-- 0

Issue was introduced 6493e89 - permissions1:complement(permissions2) replaced most instances of band(permissions1, bnot(permissions2)). In complement, the binary operation is !a & b instead of a & !b