Class: Discordrb::Member

Inherits:
User
  • Object
show all
Includes:
MemberAttributes, PermissionCalculator
Defined in:
lib/discordrb/data.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

#joined_at, #nick, #roles, #server

Attributes inherited from User

#game, #status, #stream_type, #stream_url

Attributes included from UserAttributes

#avatar_id, #bot_account, #discriminator, #username

Attributes included from IDObject

#id

Instance Method Summary collapse

Methods included from PermissionCalculator

#defined_permission?, #permission?

Methods inherited from User

#await, #current_bot?, #on, #pm, #send_file, #webhook?

Methods included from UserAttributes

#avatar_url, #distinct, #mention

Methods included from IDObject

#==, #creation_time, synthesise

Instance Method Details

#add_role(role) ⇒ Object

Adds one or more roles to this member.

Parameters:

  • role (Role, Array<Role>)

    The role(s) to add.



548
549
550
551
552
553
554
# File 'lib/discordrb/data.rb', line 548

def add_role(role)
  role_ids = role_id_array(role)
  old_role_ids = @roles.map(&:id)
  new_role_ids = (old_role_ids + role_ids).uniq

  API::Server.update_member(@bot.token, @server.id, @user.id, roles: new_role_ids)
end

#deaftrue, false Also known as: deafened?

Returns whether this member is deafened server-wide.

Returns:

  • (true, false)

    whether this member is deafened server-wide.



467
468
469
# File 'lib/discordrb/data.rb', line 467

def deaf
  voice_state_attribute(:deaf)
end

#display_nameString

Returns the name the user displays as (nickname if they have one, username otherwise).

Returns:

  • (String)

    the name the user displays as (nickname if they have one, username otherwise)



603
604
605
# File 'lib/discordrb/data.rb', line 603

def display_name
  nickname || username
end

#inspectObject

Overwriting inspect for debug purposes



626
627
628
# File 'lib/discordrb/data.rb', line 626

def inspect
  "<Member user=#{@user.inspect} server=#{@server.inspect} joined_at=#{@joined_at} roles=#{@roles.inspect} voice_channel=#{@voice_channel.inspect} mute=#{@mute} deaf=#{@deaf} self_mute=#{@self_mute} self_deaf=#{@self_deaf}>"
end

#modify_roles(add, remove) ⇒ Object

Adds and removes roles from a member.

Examples:

Remove the 'Member' role from a user, and add the 'Muted' role to them.

to_add = server.roles.find {|role| role.name == 'Muted'}
to_remove = server.roles.find {|role| role.name == 'Member'}
member.modify_roles(to_add, to_remove)

Parameters:

  • add (Role, Array<Role>)

    The role(s) to add.

  • remove (Role, Array<Role>)

    The role(s) to remove.



537
538
539
540
541
542
543
544
# File 'lib/discordrb/data.rb', line 537

def modify_roles(add, remove)
  add_role_ids = role_id_array(add)
  remove_role_ids = role_id_array(remove)
  old_role_ids = @roles.map(&:id)
  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)
end

#mutetrue, false Also known as: muted?

Returns whether this member is muted server-wide.

Returns:

  • (true, false)

    whether this member is muted server-wide.



462
463
464
# File 'lib/discordrb/data.rb', line 462

def mute
  voice_state_attribute(:mute)
end

#nick=(nick) ⇒ Object Also known as: nickname=

Sets or resets this member's nickname. Requires the Change Nickname permission for the bot itself and Manage Nicknames for other users.

Parameters:

  • nick (String, nil)

    The string to set the nickname to, or nil if it should be reset.



589
590
591
592
593
594
595
596
597
598
# File 'lib/discordrb/data.rb', line 589

def nick=(nick)
  # 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)
  else
    API::Server.update_member(@bot.token, @server.id, @user.id, nick: nick)
  end
end

#owner?true, false

Returns whether this member is the server owner.

Returns:

  • (true, false)

    whether this member is the server owner.



512
513
514
# File 'lib/discordrb/data.rb', line 512

def owner?
  @server.owner == self
end

#remove_role(role) ⇒ Object

Removes one or more roles from this member.

Parameters:

  • role (Role, Array<Role>)

    The role(s) to remove.



558
559
560
561
562
563
564
# File 'lib/discordrb/data.rb', line 558

def remove_role(role)
  old_role_ids = @roles.map(&:id)
  role_ids = role_id_array(role)
  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)
end

#role?(role) ⇒ true, false

Returns whether this member has the specified role.

Parameters:

Returns:

  • (true, false)

    whether this member has the specified role.



518
519
520
521
# File 'lib/discordrb/data.rb', line 518

def role?(role)
  role = role.resolve_id
  @roles.any? { |e| e.id == role }
end

#roles=(role) ⇒ Object

Bulk sets a member's roles.

Parameters:

  • role (Role, Array<Role>)

    The role(s) to set.



525
526
527
528
# File 'lib/discordrb/data.rb', line 525

def roles=(role)
  role_ids = role_id_array(role)
  API::Server.update_member(@bot.token, @server.id, @user.id, roles: role_ids)
end

#self_deaftrue, false Also known as: self_deafened?

Returns whether this member has deafened themselves.

Returns:

  • (true, false)

    whether this member has deafened themselves.



477
478
479
# File 'lib/discordrb/data.rb', line 477

def self_deaf
  voice_state_attribute(:self_deaf)
end

#self_mutetrue, false Also known as: self_muted?

Returns whether this member has muted themselves.

Returns:

  • (true, false)

    whether this member has muted themselves.



472
473
474
# File 'lib/discordrb/data.rb', line 472

def self_mute
  voice_state_attribute(:self_mute)
end

#server_deafenObject

Server deafens this member.



567
568
569
# File 'lib/discordrb/data.rb', line 567

def server_deafen
  API::Server.update_member(@bot.token, @server.id, @user.id, deaf: true)
end

#server_muteObject

Server mutes this member.



577
578
579
# File 'lib/discordrb/data.rb', line 577

def server_mute
  API::Server.update_member(@bot.token, @server.id, @user.id, mute: true)
end

#server_undeafenObject

Server undeafens this member.



572
573
574
# File 'lib/discordrb/data.rb', line 572

def server_undeafen
  API::Server.update_member(@bot.token, @server.id, @user.id, deaf: false)
end

#server_unmuteObject

Server unmutes this member.



582
583
584
# File 'lib/discordrb/data.rb', line 582

def server_unmute
  API::Server.update_member(@bot.token, @server.id, @user.id, mute: false)
end

#voice_channelChannel

Returns the voice channel this member is in.

Returns:

  • (Channel)

    the voice channel this member is in.



482
483
484
# File 'lib/discordrb/data.rb', line 482

def voice_channel
  voice_state_attribute(:voice_channel)
end