Class: Discordrb::Member
- Includes:
- MemberAttributes, PermissionCalculator
- Defined in:
- lib/discordrb/data/member.rb
Overview
A member is a user on a server. It differs from regular users in that it has roles, voice statuses and things like that.
Instance Attribute Summary
Attributes included from MemberAttributes
#boosting_since, #communication_disabled_until, #joined_at, #nick
Attributes inherited from User
#activities, #client_status, #status
Attributes included from UserAttributes
#avatar_id, #bot_account, #discriminator, #username
Attributes included from IDObject
Instance Method Summary collapse
-
#add_role(role, reason = nil) ⇒ Object
Adds one or more roles to this member.
-
#ban(message_days = 0, reason: nil) ⇒ Object
Bans this member from the server.
-
#boosting? ⇒ true, false
If this user is a Nitro Booster of this server.
-
#colour ⇒ ColourRGB?
(also: #color)
The colour this member has.
-
#colour_role ⇒ Role?
(also: #color_role)
The role this member is basing their colour on.
-
#communication_disabled? ⇒ true, false
(also: #timeout?)
Check if the current user has communication disabled.
-
#communication_disabled_until=(timeout_until) ⇒ Object
(also: #timeout=)
Set a user's timeout duration, or remove it by setting the timeout to
nil
. -
#deaf ⇒ true, false
(also: #deafened?)
Whether this member is deafened server-wide.
-
#display_name ⇒ String
The name the user displays as (nickname if they have one, username otherwise).
-
#highest_role ⇒ Role
The highest role this member has.
-
#hoist_role ⇒ Role?
The role this member is being hoisted with.
-
#inspect ⇒ Object
Overwriting inspect for debug purposes.
-
#kick(reason = nil) ⇒ Object
Kicks this member from the server.
-
#modify_roles(add, remove, reason = nil) ⇒ Object
Adds and removes roles from a member.
-
#mute ⇒ true, false
(also: #muted?)
Whether this member is muted server-wide.
- #nick=(nick) ⇒ Object (also: #nickname=)
-
#owner? ⇒ true, false
Whether this member is the server owner.
-
#remove_role(role, reason = nil) ⇒ Object
Removes one or more roles from this member.
-
#role?(role) ⇒ true, false
Whether this member has the specified role.
-
#roles ⇒ Array<Role>
The roles this member has.
- #roles=(role) ⇒ Object
-
#self_deaf ⇒ true, false
(also: #self_deafened?)
Whether this member has deafened themselves.
-
#self_mute ⇒ true, false
(also: #self_muted?)
Whether this member has muted themselves.
-
#server ⇒ Server
The server this member is on.
-
#server_deafen ⇒ Object
Server deafens this member.
-
#server_mute ⇒ Object
Server mutes this member.
-
#server_undeafen ⇒ Object
Server undeafens this member.
-
#server_unmute ⇒ Object
Server unmutes this member.
-
#set_nick(nick, reason = nil) ⇒ Object
(also: #set_nickname)
Sets or resets this member's nickname.
-
#set_roles(role, reason = nil) ⇒ Object
Bulk sets a member's roles.
-
#unban(reason = nil) ⇒ Object
Unbans this member from the server.
-
#voice_channel ⇒ Channel
The voice channel this member is in.
Methods included from PermissionCalculator
#defined_permission?, #permission?
Methods inherited from User
#await, #await!, #current_bot?, #dnd?, #game, #idle?, #offline?, #on, #online?, #pm, #send_file, #stream_type, #stream_url, #webhook?
Methods included from UserAttributes
#avatar_url, #distinct, #mention
Methods included from IDObject
#==, #creation_time, synthesise
Instance Method Details
#add_role(role, reason = nil) ⇒ Object
Adds one or more roles to this member.
172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/discordrb/data/member.rb', line 172 def add_role(role, reason = nil) role_ids = role_id_array(role) if role_ids.count == 1 API::Server.add_member_role(@bot.token, @server_id, @user.id, role_ids[0], reason) else old_role_ids = resolve_role_ids new_role_ids = (old_role_ids + role_ids).uniq API::Server.update_member(@bot.token, @server_id, @user.id, roles: new_role_ids, reason: reason) end end |
#ban(message_days = 0, reason: nil) ⇒ Object
Bans this member from the server.
252 253 254 |
# File 'lib/discordrb/data/member.rb', line 252 def ban( = 0, reason: nil) server.ban(@user, , reason: reason) end |
#boosting? ⇒ true, false
Returns if this user is a Nitro Booster of this server.
105 106 107 |
# File 'lib/discordrb/data/member.rb', line 105 def boosting? !@boosting_since.nil? end |
#colour ⇒ ColourRGB? Also known as: color
Returns the colour this member has.
222 223 224 225 226 |
# File 'lib/discordrb/data/member.rb', line 222 def colour return nil unless colour_role colour_role.color end |
#colour_role ⇒ Role? Also known as: color_role
Returns the role this member is basing their colour on.
213 214 215 216 217 218 |
# File 'lib/discordrb/data/member.rb', line 213 def colour_role coloured_roles = roles.select { |v| v.colour.combined.nonzero? } return nil if coloured_roles.empty? coloured_roles.max_by(&:position) end |
#communication_disabled? ⇒ true, false Also known as: timeout?
Check if the current user has communication disabled.
128 129 130 |
# File 'lib/discordrb/data/member.rb', line 128 def communication_disabled? !@communication_disabled_until.nil? && @communication_disabled_until > Time.now end |
#communication_disabled_until=(timeout_until) ⇒ Object Also known as: timeout=
Set a user's timeout duration, or remove it by setting the timeout to nil
.
136 137 138 139 140 |
# File 'lib/discordrb/data/member.rb', line 136 def communication_disabled_until=(timeout_until) raise ArgumentError, 'A time out cannot exceed 28 days' if timeout_until && timeout_until > (Time.now + 2_419_200) API::Server.update_member(@bot.token, @server_id, @user.id, communication_disabled_until: timeout_until.iso8601) end |
#deaf ⇒ true, false Also known as: deafened?
Returns whether this member is deafened server-wide.
36 37 38 |
# File 'lib/discordrb/data/member.rb', line 36 def deaf voice_state_attribute(:deaf) end |
#display_name ⇒ String
Returns the name the user displays as (nickname if they have one, username otherwise).
293 294 295 |
# File 'lib/discordrb/data/member.rb', line 293 def display_name nickname || username end |
#highest_role ⇒ Role
Returns the highest role this member has.
200 201 202 |
# File 'lib/discordrb/data/member.rb', line 200 def highest_role roles.max_by(&:position) end |
#hoist_role ⇒ Role?
Returns the role this member is being hoisted with.
205 206 207 208 209 210 |
# File 'lib/discordrb/data/member.rb', line 205 def hoist_role hoisted_roles = roles.select(&:hoist) return nil if hoisted_roles.empty? hoisted_roles.max_by(&:position) end |
#inspect ⇒ Object
Overwriting inspect for debug purposes
347 348 349 |
# File 'lib/discordrb/data/member.rb', line 347 def inspect "<Member user=#{@user.inspect} server=#{@server&.inspect || @server_id} joined_at=#{@joined_at} roles=#{@roles&.inspect || @role_ids} voice_channel=#{@voice_channel.inspect} mute=#{@mute} deaf=#{@deaf} self_mute=#{@self_mute} self_deaf=#{@self_deaf}>" end |
#kick(reason = nil) ⇒ Object
Kicks this member from the server.
264 265 266 |
# File 'lib/discordrb/data/member.rb', line 264 def kick(reason = nil) server.kick(@user, reason) end |
#modify_roles(add, remove, reason = nil) ⇒ Object
Adds and removes roles from a member.
160 161 162 163 164 165 166 167 |
# File 'lib/discordrb/data/member.rb', line 160 def modify_roles(add, remove, reason = nil) add_role_ids = role_id_array(add) remove_role_ids = role_id_array(remove) old_role_ids = resolve_role_ids new_role_ids = (old_role_ids - remove_role_ids + add_role_ids).uniq API::Server.update_member(@bot.token, @server_id, @user.id, roles: new_role_ids, reason: reason) end |
#mute ⇒ true, false Also known as: muted?
Returns whether this member is muted server-wide.
31 32 33 |
# File 'lib/discordrb/data/member.rb', line 31 def mute voice_state_attribute(:mute) end |
#nick=(nick) ⇒ Object Also known as: nickname=
269 270 271 |
# File 'lib/discordrb/data/member.rb', line 269 def nick=(nick) set_nick(nick) end |
#owner? ⇒ true, false
Returns whether this member is the server owner.
110 111 112 |
# File 'lib/discordrb/data/member.rb', line 110 def owner? server.owner == self end |
#remove_role(role, reason = nil) ⇒ Object
Removes one or more roles from this member.
187 188 189 190 191 192 193 194 195 196 197 |
# File 'lib/discordrb/data/member.rb', line 187 def remove_role(role, reason = nil) role_ids = role_id_array(role) if role_ids.count == 1 API::Server.remove_member_role(@bot.token, @server_id, @user.id, role_ids[0], reason) else old_role_ids = resolve_role_ids new_role_ids = old_role_ids.reject { |i| role_ids.include?(i) } API::Server.update_member(@bot.token, @server_id, @user.id, roles: new_role_ids, reason: reason) end end |
#role?(role) ⇒ true, false
Returns whether this member has the specified role.
116 117 118 119 |
# File 'lib/discordrb/data/member.rb', line 116 def role?(role) role = role.resolve_id roles.any?(role) end |
#roles ⇒ Array<Role>
Returns the roles this member has.
97 98 99 100 101 102 |
# File 'lib/discordrb/data/member.rb', line 97 def roles return @roles if @roles update_roles(@role_ids) @roles end |
#roles=(role) ⇒ Object
122 123 124 |
# File 'lib/discordrb/data/member.rb', line 122 def roles=(role) set_roles(role) end |
#self_deaf ⇒ true, false Also known as: self_deafened?
Returns whether this member has deafened themselves.
46 47 48 |
# File 'lib/discordrb/data/member.rb', line 46 def self_deaf voice_state_attribute(:self_deaf) end |
#self_mute ⇒ true, false Also known as: self_muted?
Returns whether this member has muted themselves.
41 42 43 |
# File 'lib/discordrb/data/member.rb', line 41 def self_mute voice_state_attribute(:self_mute) end |
#server ⇒ Server
Returns the server this member is on.
85 86 87 88 89 90 91 92 |
# File 'lib/discordrb/data/member.rb', line 85 def server return @server if @server @server = @bot.server(@server_id) raise Discordrb::Errors::NoPermission, 'The bot does not have access to this server' unless @server @server end |
#server_deafen ⇒ Object
Server deafens this member.
230 231 232 |
# File 'lib/discordrb/data/member.rb', line 230 def server_deafen API::Server.update_member(@bot.token, @server_id, @user.id, deaf: true) end |
#server_mute ⇒ Object
Server mutes this member.
240 241 242 |
# File 'lib/discordrb/data/member.rb', line 240 def server_mute API::Server.update_member(@bot.token, @server_id, @user.id, mute: true) end |
#server_undeafen ⇒ Object
Server undeafens this member.
235 236 237 |
# File 'lib/discordrb/data/member.rb', line 235 def server_undeafen API::Server.update_member(@bot.token, @server_id, @user.id, deaf: false) end |
#server_unmute ⇒ Object
Server unmutes this member.
245 246 247 |
# File 'lib/discordrb/data/member.rb', line 245 def server_unmute API::Server.update_member(@bot.token, @server_id, @user.id, mute: false) end |
#set_nick(nick, reason = nil) ⇒ Object Also known as: set_nickname
Sets or resets this member's nickname. Requires the Change Nickname permission for the bot itself and Manage Nicknames for other users.
279 280 281 282 283 284 285 286 287 288 |
# File 'lib/discordrb/data/member.rb', line 279 def set_nick(nick, reason = nil) # Discord uses the empty string to signify 'no nickname' so we convert nil into that nick ||= '' if @user.current_bot? API::User.change_own_nickname(@bot.token, @server_id, nick, reason) else API::Server.update_member(@bot.token, @server_id, @user.id, nick: nick, reason: nil) end end |
#set_roles(role, reason = nil) ⇒ Object
Bulk sets a member's roles.
147 148 149 150 |
# File 'lib/discordrb/data/member.rb', line 147 def set_roles(role, reason = nil) role_ids = role_id_array(role) API::Server.update_member(@bot.token, @server_id, @user.id, roles: role_ids, reason: reason) end |
#unban(reason = nil) ⇒ Object
Unbans this member from the server.
258 259 260 |
# File 'lib/discordrb/data/member.rb', line 258 def unban(reason = nil) server.unban(@user, reason) end |
#voice_channel ⇒ Channel
Returns the voice channel this member is in.
51 52 53 |
# File 'lib/discordrb/data/member.rb', line 51 def voice_channel voice_state_attribute(:voice_channel) end |