Class: Discordrb::Role
- Inherits:
-
Object
- Object
- Discordrb::Role
- Includes:
- IDObject
- Defined in:
- lib/discordrb/data/role.rb
Overview
A Discord role that contains permissions and applies to certain users
Defined Under Namespace
Classes: RoleWriter, Tags
Instance Attribute Summary collapse
-
#colour ⇒ ColourRGB
(also: #color)
The primary colour of this role.
-
#flags ⇒ Integer
readonly
The flags for this role.
-
#hoist ⇒ true, false
(also: #hoist?)
Whether or not this role should be displayed separately from other users.
-
#icon ⇒ String?
The icon hash for this role.
-
#managed ⇒ true, false
(also: #managed?)
readonly
Whether or not this role is managed by an integration or a bot.
-
#mentionable ⇒ true, false
(also: #mentionable?)
Whether this role can be mentioned using a role mention.
-
#name ⇒ String
This role's name ("new role" if it hasn't been changed).
-
#permissions ⇒ Permissions
readonly
This role's permissions.
-
#position ⇒ Integer
readonly
The position of this role in the hierarchy.
-
#secondary_colour ⇒ ColourRGB?
(also: #secondary_color)
The secondary colour of this role.
-
#server ⇒ Server
readonly
The server this role belongs to.
-
#tags ⇒ Tags?
readonly
The role tags.
-
#tertiary_colour ⇒ ColourRGB?
(also: #tertiary_color)
The tertiary colour of this role.
-
#unicode_emoji ⇒ String?
The unicode emoji of this role, or nil.
Attributes included from IDObject
Instance Method Summary collapse
-
#delete(reason = nil) ⇒ Object
Deletes this role.
-
#display_icon ⇒ String?
Get the icon that a role has displayed.
-
#display_icon=(icon) ⇒ Object
Set the icon this role is displaying.
-
#gradient? ⇒ true, false
Whether or not the role has a two-point gradient.
-
#holographic=(holographic) ⇒ Object
Sets whether the role colour should be a holographic style.
-
#holographic? ⇒ true, false
Whether or not the role is of the holographic style.
-
#icon_url(format = 'webp') ⇒ String
URL to the icon on Discord's CDN.
-
#inspect ⇒ Object
The inspect method is overwritten to give more useful output.
-
#members ⇒ Array<Member>
(also: #users)
An array of members who have this role.
-
#mention ⇒ String
A string that will mention this role, if it is mentionable.
-
#move(bottom: nil, above: nil, below: nil, offset: 0, reason: nil) ⇒ Integer
Move the position of this role in the roles list.
-
#packed=(packed, update_perms = true) ⇒ Object
Changes this role's permissions to a fixed bitfield.
-
#sort_above(other = nil) ⇒ Integer
(also: #move_above)
deprecated
Deprecated.
Please migrate to using #move with the
aboveorbelowKWARGS. -
#update_colours(primary: :undef, secondary: :undef, tertiary: :undef, holographic: :undef, reason: nil) ⇒ Object
(also: #update_colors)
A rich interface designed to make working with role colours simple.
Methods included from IDObject
#==, #creation_time, synthesise
Instance Attribute Details
#colour ⇒ ColourRGB Also known as: color
Returns the primary colour of this role.
30 31 32 |
# File 'lib/discordrb/data/role.rb', line 30 def colour @colour end |
#flags ⇒ Integer (readonly)
Returns The flags for this role.
43 44 45 |
# File 'lib/discordrb/data/role.rb', line 43 def flags @flags end |
#hoist ⇒ true, false Also known as: hoist?
Returns whether or not this role should be displayed separately from other users.
18 19 20 |
# File 'lib/discordrb/data/role.rb', line 18 def hoist @hoist end |
#icon ⇒ String?
Returns The icon hash for this role.
37 38 39 |
# File 'lib/discordrb/data/role.rb', line 37 def icon @icon end |
#managed ⇒ true, false (readonly) Also known as: managed?
Returns whether or not this role is managed by an integration or a bot.
22 23 24 |
# File 'lib/discordrb/data/role.rb', line 22 def managed @managed end |
#mentionable ⇒ true, false Also known as: mentionable?
Returns whether this role can be mentioned using a role mention.
26 27 28 |
# File 'lib/discordrb/data/role.rb', line 26 def mentionable @mentionable end |
#name ⇒ String
Returns this role's name ("new role" if it hasn't been changed).
12 13 14 |
# File 'lib/discordrb/data/role.rb', line 12 def name @name end |
#permissions ⇒ Permissions (readonly)
Returns this role's permissions.
9 10 11 |
# File 'lib/discordrb/data/role.rb', line 9 def @permissions end |
#position ⇒ Integer (readonly)
Returns the position of this role in the hierarchy.
34 35 36 |
# File 'lib/discordrb/data/role.rb', line 34 def position @position end |
#secondary_colour ⇒ ColourRGB? Also known as: secondary_color
Returns the secondary colour of this role.
49 50 51 |
# File 'lib/discordrb/data/role.rb', line 49 def secondary_colour @secondary_colour end |
#server ⇒ Server (readonly)
Returns the server this role belongs to.
15 16 17 |
# File 'lib/discordrb/data/role.rb', line 15 def server @server end |
#tags ⇒ Tags? (readonly)
Returns The role tags.
40 41 42 |
# File 'lib/discordrb/data/role.rb', line 40 def @tags end |
#tertiary_colour ⇒ ColourRGB? Also known as: tertiary_color
Returns the tertiary colour of this role.
53 54 55 |
# File 'lib/discordrb/data/role.rb', line 53 def tertiary_colour @tertiary_colour end |
#unicode_emoji ⇒ String?
Returns The unicode emoji of this role, or nil.
46 47 48 |
# File 'lib/discordrb/data/role.rb', line 46 def unicode_emoji @unicode_emoji end |
Instance Method Details
#delete(reason = nil) ⇒ Object
Deletes this role. This cannot be undone without recreating the role!
321 322 323 324 |
# File 'lib/discordrb/data/role.rb', line 321 def delete(reason = nil) API::Server.delete_role(@bot.token, @server.id, @id, reason) @server.delete_role(@id) end |
#display_icon ⇒ String?
A role can have a unicode emoji, and an icon, but only the icon will be shown in the UI.
Get the icon that a role has displayed.
257 258 259 |
# File 'lib/discordrb/data/role.rb', line 257 def display_icon icon_url || unicode_emoji end |
#display_icon=(icon) ⇒ Object
Setting the icon to nil will remove the unicode emoji and the custom icon.
Set the icon this role is displaying.
264 265 266 267 268 269 270 271 272 273 274 275 |
# File 'lib/discordrb/data/role.rb', line 264 def display_icon=(icon) if icon.nil? update_role_data(unicode_emoji: nil, icon: nil) return end if icon.respond_to?(:read) update_role_data(unicode_emoji: nil, icon: icon) else update_role_data(unicode_emoji: icon, icon: nil) end end |
#gradient? ⇒ true, false
Whether or not the role has a two-point gradient.
285 286 287 |
# File 'lib/discordrb/data/role.rb', line 285 def gradient? !@secondary_colour.nil? && @tertiary_colour.nil? end |
#holographic=(holographic) ⇒ Object
Sets whether the role colour should be a holographic style.
230 231 232 |
# File 'lib/discordrb/data/role.rb', line 230 def holographic=(holographic) update_colours(holographic: holographic) end |
#holographic? ⇒ true, false
Whether or not the role is of the holographic style.
279 280 281 |
# File 'lib/discordrb/data/role.rb', line 279 def holographic? !@tertiary_colour.nil? end |
#icon_url(format = 'webp') ⇒ String
Returns URL to the icon on Discord's CDN.
248 249 250 251 252 |
# File 'lib/discordrb/data/role.rb', line 248 def icon_url(format = 'webp') return nil unless @icon Discordrb::API.role_icon_url(@id, @icon, format) end |
#inspect ⇒ Object
The inspect method is overwritten to give more useful output
410 411 412 |
# File 'lib/discordrb/data/role.rb', line 410 def inspect "<Role name=#{@name} permissions=#{@permissions.inspect} hoist=#{@hoist} colour=#{@colour.inspect} server=#{@server.inspect} position=#{@position} mentionable=#{@mentionable} unicode_emoji=#{@unicode_emoji} flags=#{@flags}>" end |
#members ⇒ Array<Member> Also known as: users
This requests a member chunk if it hasn't for the server before, which may be slow initially
Returns an array of members who have this role.
147 148 149 |
# File 'lib/discordrb/data/role.rb', line 147 def members @server.members.select { |m| m.role? self } end |
#mention ⇒ String
Returns a string that will mention this role, if it is mentionable.
141 142 143 |
# File 'lib/discordrb/data/role.rb', line 141 def mention "<@&#{@id}>" end |
#move(bottom: nil, above: nil, below: nil, offset: 0, reason: nil) ⇒ Integer
Move the position of this role in the roles list.
341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 |
# File 'lib/discordrb/data/role.rb', line 341 def move(bottom: nil, above: nil, below: nil, offset: 0, reason: nil) # rubocop:disable Style/IfUnlessModifier if [bottom, above, below].count(&:itself) > 1 raise ArgumentError, "'bottom', 'above', and 'below' are mutually exclusive" end if (above || below) && !(target = @server.role(above || below)) raise ArgumentError, "The given 'above' or 'below' options are not valid" end if (below && target&.id == @server.id) || (@id == target&.id) raise ArgumentError, 'The target role that was provded is not valid' end # rubocop:enable Style/IfUnlessModifier roles = @server.roles.uniq.sort_by { |role| [role.position, role.id] } # Make sure we remove the current role. myself = roles.rindex(self).tap { |index| roles.delete_at(index) } index = if bottom 1 elsif below roles.rindex(target) elsif above roles.rindex(target) + 1 else myself end roles.insert([index + (offset || 0), 1].max, self) roles = roles.map.with_index do |role, new_position| { id: role.resolve_id, position: new_position } end @server.update_role_positions(roles, reason: reason) @position end |
#packed=(packed, update_perms = true) ⇒ Object
Changes this role's permissions to a fixed bitfield. This allows setting multiple permissions at once with just one API call.
Information on how this bitfield is structured can be found at https://discord.com/developers/docs/topics/permissions.
303 304 305 306 |
# File 'lib/discordrb/data/role.rb', line 303 def packed=(packed, update_perms = true) update_role_data(permissions: packed) @permissions.bits = packed if update_perms end |
#sort_above(other = nil) ⇒ Integer Also known as: move_above
Please migrate to using #move with the above or below KWARGS.
Moves this role above another role in the list.
313 314 315 |
# File 'lib/discordrb/data/role.rb', line 313 def sort_above(other = nil) other ? move(above: other) : move(bottom: true) end |
#update_colours(primary: :undef, secondary: :undef, tertiary: :undef, holographic: :undef, reason: nil) ⇒ Object Also known as: update_colors
A rich interface designed to make working with role colours simple.
388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 |
# File 'lib/discordrb/data/role.rb', line 388 def update_colours(primary: :undef, secondary: :undef, tertiary: :undef, holographic: :undef, reason: nil) colours = { primary_color: (primary == :undef ? @colour : primary)&.to_i, tertiary_color: (tertiary == :undef ? @tertiary_colour : tertiary)&.to_i, secondary_color: (secondary == :undef ? @secondary_colour : secondary)&.to_i } holographic_colours = { primary_color: 11_127_295, tertiary_color: 16_761_760, secondary_color: 16_759_788 } # Only set the tertiary_color to `nil` if holographic is explicitly set to false. (colours[:tertiary_color] = nil) if holographic.is_a?(FalseClass) update_role_data(colours: holographic == true ? holographic_colours : colours, reason: reason) end |