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)
358 359 360 361 362 363 364 365 366 367 368 369 |
# File 'lib/discordrb/data.rb', line 358 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
337 338 339 340 341 342 343 344 345 346 347 348 349 |
# File 'lib/discordrb/data.rb', line 337 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 |