Module: Discordrb::PermissionCalculator
- Included in:
- Member
- Defined in:
- lib/discordrb/data.rb
Overview
Mixin to calculate resulting permissions from overrides etc.
Instance Method Summary collapse
-
#defined_permission?(action, channel = nil) ⇒ true, false
Checks whether this user has a particular permission defined (i. e. not implicit, through for example Manage Roles).
-
#permission?(action, channel = nil) ⇒ true, false
Checks whether this user can do the particular action, regardless of whether it has the permission defined, through for example being the server owner or having the Manage Roles permission.
Instance Method Details
#defined_permission?(action, channel = nil) ⇒ true, false
Checks whether this user has a particular permission defined (i. e. not implicit, through for example Manage Roles)
323 324 325 326 327 328 329 330 331 332 333 334 |
# File 'lib/discordrb/data.rb', line 323 def (action, channel = nil) # Get the permission the user's roles have = (action, channel) # Once we have checked the role permission, we have to check the channel overrides for the # specific user user_specific_override = (action, channel, id) # Use the ID reader as members have no ID instance variable # Merge the two permissions - if an override is defined, it has to be allow, otherwise we only care about the role return unless user_specific_override user_specific_override == :allow end |
#permission?(action, channel = nil) ⇒ true, false
Checks whether this user can do the particular action, regardless of whether it has the permission defined, through for example being the server owner or having the Manage Roles permission
302 303 304 305 306 307 308 309 310 311 312 313 314 |
# File 'lib/discordrb/data.rb', line 302 def (action, channel = nil) # If the member is the server owner, it irrevocably has all permissions. return true if owner? # First, check whether the user has Manage Roles defined. # (Coincidentally, Manage Permissions is the same permission as Manage Roles, and a # Manage Permissions deny overwrite will override Manage Roles, so we can just check for # Manage Roles once and call it a day.) return true if (:administrator, channel) # Otherwise, defer to defined_permission (action, channel) end |