Class: Rubycord::Role
- Inherits:
-
Object
- Object
- Rubycord::Role
- Includes:
- IDObject
- Defined in:
- lib/rubycord/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 role colour.
-
#hoist ⇒ true, false
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.
-
#server ⇒ Server
readonly
The server this role belongs to.
-
#tags ⇒ Tags?
readonly
The role tags.
Attributes included from IDObject
Instance Method Summary collapse
-
#delete(reason = nil) ⇒ Object
Deletes this role.
-
#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.
-
#packed=(packed, update_perms = true) ⇒ Object
Changes this role's permissions to a fixed bitfield.
-
#sort_above(other = nil) ⇒ Integer
(also: #move_above)
Moves this role above another role in the list.
Methods included from IDObject
#==, #creation_time, synthesise
Instance Attribute Details
#colour ⇒ ColourRGB Also known as: color
Returns the role colour.
27 28 29 |
# File 'lib/rubycord/data/role.rb', line 27 def colour @colour end |
#hoist ⇒ true, false
Returns whether or not this role should be displayed separately from other users.
16 17 18 |
# File 'lib/rubycord/data/role.rb', line 16 def hoist @hoist end |
#icon ⇒ String?
Returns The icon hash for this role.
34 35 36 |
# File 'lib/rubycord/data/role.rb', line 34 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.
19 20 21 |
# File 'lib/rubycord/data/role.rb', line 19 def managed @managed end |
#mentionable ⇒ true, false Also known as: mentionable?
Returns whether this role can be mentioned using a role mention.
23 24 25 |
# File 'lib/rubycord/data/role.rb', line 23 def mentionable @mentionable end |
#name ⇒ String
Returns this role's name ("new role" if it hasn't been changed).
10 11 12 |
# File 'lib/rubycord/data/role.rb', line 10 def name @name end |
#permissions ⇒ Permissions (readonly)
Returns this role's permissions.
7 8 9 |
# File 'lib/rubycord/data/role.rb', line 7 def @permissions end |
#position ⇒ Integer (readonly)
Returns the position of this role in the hierarchy.
31 32 33 |
# File 'lib/rubycord/data/role.rb', line 31 def position @position end |
#server ⇒ Server (readonly)
Returns the server this role belongs to.
13 14 15 |
# File 'lib/rubycord/data/role.rb', line 13 def server @server end |
#tags ⇒ Tags? (readonly)
Returns The role tags.
37 38 39 |
# File 'lib/rubycord/data/role.rb', line 37 def @tags end |
Instance Method Details
#delete(reason = nil) ⇒ Object
Deletes this role. This cannot be undone without recreating the role!
222 223 224 225 |
# File 'lib/rubycord/data/role.rb', line 222 def delete(reason = nil) API::Server.delete_role(@bot.token, @server.id, @id, reason) @server.delete_role(@id) end |
#icon_url(format = "webp") ⇒ String
Returns URL to the icon on Discord's CDN.
178 179 180 181 182 |
# File 'lib/rubycord/data/role.rb', line 178 def icon_url(format = "webp") return nil unless @icon Rubycord::API.role_icon_url(@id, @icon, format) end |
#inspect ⇒ Object
The inspect method is overwritten to give more useful output
228 229 230 |
# File 'lib/rubycord/data/role.rb', line 228 def inspect "<Role name=#{@name} permissions=#{@permissions.inspect} hoist=#{@hoist} colour=#{@colour.inspect} server=#{@server.inspect} position=#{@position} mentionable=#{@mentionable}>" 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.
117 118 119 |
# File 'lib/rubycord/data/role.rb', line 117 def members @server.members.select { |m| m.role? self } end |
#mention ⇒ String
Returns a string that will mention this role, if it is mentionable.
111 112 113 |
# File 'lib/rubycord/data/role.rb', line 111 def mention "<@&#{@id}>" 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.
196 197 198 199 |
# File 'lib/rubycord/data/role.rb', line 196 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
Moves this role above another role in the list.
205 206 207 208 209 210 211 212 213 214 215 216 |
# File 'lib/rubycord/data/role.rb', line 205 def sort_above(other = nil) other = @server.role(other.resolve_id) if other roles = @server.roles.sort_by(&:position) roles.delete_at(@position) index = other ? roles.index { |role| role.id == other.id } + 1 : 1 roles.insert(index, self) updated_roles = roles.map.with_index { |role, position| {id: role.id, position: position} } @server.update_role_positions(updated_roles) index end |