Module: Discordrb::PermissionCalculator
- Included in:
- Member
- Defined in:
- lib/discordrb/permissions.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)
156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/discordrb/permissions.rb', line 156 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
135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/discordrb/permissions.rb', line 135 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 |