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)
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/discordrb/permissions.rb', line 175 def (action, channel = nil) # For slash commands we may not have access to the server or role # permissions. In this case we use the permissions given to us by the # interaction. If attempting to check against a specific channel the check # is skipped. return @permissions.__send__(action) if @permissions && 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
154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/discordrb/permissions.rb', line 154 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 |