Class: DiscordRDA::Member
- Defined in:
- lib/discord_rda/entity/member.rb
Overview
Represents a Discord guild member. Combines User data with guild-specific information.
Instance Attribute Summary collapse
-
#avatar ⇒ String
readonly
Guild avatar hash.
-
#communication_disabled_until ⇒ Time
readonly
When member’s timeout expires.
-
#deaf ⇒ Boolean
readonly
Whether member is deafened.
-
#flags ⇒ Integer
readonly
Guild flags.
-
#joined_at ⇒ Time
readonly
When member joined.
-
#mute ⇒ Boolean
readonly
Whether member is muted.
-
#nick ⇒ String
readonly
Nickname in the guild.
-
#pending ⇒ Boolean
readonly
Whether member is pending.
-
#permissions ⇒ String
readonly
Permissions for this member in channel.
-
#premium_since ⇒ Time
readonly
When member started boosting.
-
#roles ⇒ Array<Snowflake>
readonly
Role IDs.
-
#user ⇒ User
readonly
Get the user object.
Instance Method Summary collapse
-
#avatar_url(format: 'png', size: nil) ⇒ String
Get member’s guild avatar URL.
-
#boost_duration ⇒ Float?
Get how long member has been boosting.
-
#boost_since ⇒ Time?
Get boost start time.
-
#boosting? ⇒ Boolean
Check if member is boosting.
-
#bypasses_verification? ⇒ Boolean
Check if member has bypassed verification.
-
#can_act_on?(target, guild_roles) ⇒ Boolean
Check if member can perform action on target Compares roles and permissions.
-
#completed_onboarding? ⇒ Boolean
Check if member has completed onboarding.
-
#created_at ⇒ Time?
Get creation time (from user).
-
#deaf? ⇒ Boolean
Check if member is server deafened.
-
#display_color(guild_roles) ⇒ Color
Get member’s display color from highest colored role.
-
#display_name ⇒ String
Get member’s effective name (nickname or username).
-
#duration_in_guild ⇒ Float
Get how long member has been in the guild.
-
#guild_id ⇒ Snowflake?
Get guild ID.
-
#has_role?(role_id) ⇒ Boolean
Check if member has a specific role.
-
#highest_role_position(guild_roles) ⇒ Integer
Get the highest role position.
-
#id ⇒ Object
Member inherits ID from user.
-
#initialize(data = {}) ⇒ Member
constructor
Create a new member.
-
#member_flags ⇒ MemberFlags
Get member flags.
-
#mention ⇒ String
Get mention string.
-
#method_missing(method, *args, &block) ⇒ Object
Delegate methods to user.
-
#mute? ⇒ Boolean
Check if member is server muted.
-
#nick? ⇒ Boolean
Check if member has a nickname.
-
#owner?(guild_owner_id) ⇒ Boolean
Check if this member is the guild owner.
-
#pending? ⇒ Boolean
Check if member has pending membership screening.
-
#permission_set ⇒ Permission?
Get permission set for this member.
- #respond_to_missing?(method, include_private = false) ⇒ Boolean
-
#started_onboarding? ⇒ Boolean
Check if member started onboarding.
-
#timed_out? ⇒ Boolean
Check if member is currently timed out.
Methods inherited from Entity
#==, attribute, from_hash, #hash, #inspect, #to_h, #to_json
Constructor Details
#initialize(data = {}) ⇒ Member
Create a new member
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/discord_rda/entity/member.rb', line 51 def initialize(data = {}) super @user = data['user'] ? User.new(data['user']) : nil @nick = data['nick'] @avatar = data['avatar'] @roles = (data['roles'] || []).map { |r| Snowflake.new(r) } @joined_at = data['joined_at'] ? Time.parse(data['joined_at']) : nil @premium_since = data['premium_since'] ? Time.parse(data['premium_since']) : nil @deaf = data['deaf'] || false @mute = data['mute'] || false @flags = data['flags'] || 0 @pending = data['pending'] || false @permissions = data['permissions'] @communication_disabled_until = data['communication_disabled_until'] ? Time.parse(data['communication_disabled_until']) : nil end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
Delegate methods to user
209 210 211 212 213 214 215 |
# File 'lib/discord_rda/entity/member.rb', line 209 def method_missing(method, *args, &block) if user&.respond_to?(method) user.public_send(method, *args, &block) else super end end |
Instance Attribute Details
#avatar ⇒ String (readonly)
Returns Guild avatar hash.
20 21 22 |
# File 'lib/discord_rda/entity/member.rb', line 20 def avatar @avatar end |
#communication_disabled_until ⇒ Time (readonly)
Returns When member’s timeout expires.
47 48 49 |
# File 'lib/discord_rda/entity/member.rb', line 47 def communication_disabled_until @communication_disabled_until end |
#deaf ⇒ Boolean (readonly)
Returns Whether member is deafened.
32 33 34 |
# File 'lib/discord_rda/entity/member.rb', line 32 def deaf @deaf end |
#flags ⇒ Integer (readonly)
Returns Guild flags.
38 39 40 |
# File 'lib/discord_rda/entity/member.rb', line 38 def flags @flags end |
#joined_at ⇒ Time (readonly)
Returns When member joined.
26 27 28 |
# File 'lib/discord_rda/entity/member.rb', line 26 def joined_at @joined_at end |
#mute ⇒ Boolean (readonly)
Returns Whether member is muted.
35 36 37 |
# File 'lib/discord_rda/entity/member.rb', line 35 def mute @mute end |
#nick ⇒ String (readonly)
Returns Nickname in the guild.
17 18 19 |
# File 'lib/discord_rda/entity/member.rb', line 17 def nick @nick end |
#pending ⇒ Boolean (readonly)
Returns Whether member is pending.
41 42 43 |
# File 'lib/discord_rda/entity/member.rb', line 41 def pending @pending end |
#permissions ⇒ String (readonly)
Returns Permissions for this member in channel.
44 45 46 |
# File 'lib/discord_rda/entity/member.rb', line 44 def @permissions end |
#premium_since ⇒ Time (readonly)
Returns When member started boosting.
29 30 31 |
# File 'lib/discord_rda/entity/member.rb', line 29 def premium_since @premium_since end |
#roles ⇒ Array<Snowflake> (readonly)
Returns Role IDs.
23 24 25 |
# File 'lib/discord_rda/entity/member.rb', line 23 def roles @roles end |
#user ⇒ User (readonly)
Get the user object
14 15 16 |
# File 'lib/discord_rda/entity/member.rb', line 14 def user @user end |
Instance Method Details
#avatar_url(format: 'png', size: nil) ⇒ String
Get member’s guild avatar URL
96 97 98 99 100 101 102 103 104 |
# File 'lib/discord_rda/entity/member.rb', line 96 def avatar_url(format: 'png', size: nil) if avatar url = "https://cdn.discordapp.com/guilds/#{guild_id}/users/#{id}/avatars/#{avatar}.#{format}" url += "?size=#{size}" if size url else user&.avatar_url(format: format, size: size) end end |
#boost_duration ⇒ Float?
Get how long member has been boosting
154 155 156 157 158 |
# File 'lib/discord_rda/entity/member.rb', line 154 def boost_duration return nil unless premium_since Time.now.utc - premium_since end |
#boost_since ⇒ Time?
Get boost start time
140 141 142 |
# File 'lib/discord_rda/entity/member.rb', line 140 def boost_since premium_since end |
#boosting? ⇒ Boolean
Check if member is boosting
134 135 136 |
# File 'lib/discord_rda/entity/member.rb', line 134 def boosting? !premium_since.nil? end |
#bypasses_verification? ⇒ Boolean
Check if member has bypassed verification
242 243 244 |
# File 'lib/discord_rda/entity/member.rb', line 242 def bypasses_verification? !flags.nil? && (flags & 4) == 4 end |
#can_act_on?(target, guild_roles) ⇒ Boolean
Check if member can perform action on target Compares roles and permissions
195 196 197 198 199 200 |
# File 'lib/discord_rda/entity/member.rb', line 195 def can_act_on?(target, guild_roles) return false if target.id == id # Can't act on self return false if target.id == guild_id # Can't act on owner highest_role_position(guild_roles) > target.highest_role_position(guild_roles) end |
#completed_onboarding? ⇒ Boolean
Check if member has completed onboarding
236 237 238 |
# File 'lib/discord_rda/entity/member.rb', line 236 def completed_onboarding? !flags.nil? && (flags & 2) == 2 end |
#created_at ⇒ Time?
Get creation time (from user)
204 205 206 |
# File 'lib/discord_rda/entity/member.rb', line 204 def created_at user&.created_at end |
#deaf? ⇒ Boolean
Check if member is server deafened
108 109 110 |
# File 'lib/discord_rda/entity/member.rb', line 108 def deaf? deaf end |
#display_color(guild_roles) ⇒ Color
Get member’s display color from highest colored role
255 256 257 258 259 260 261 |
# File 'lib/discord_rda/entity/member.rb', line 255 def display_color(guild_roles) member_roles = guild_roles.select { |r| has_role?(r.id) && r.color > 0 } return Color.new(0) if member_roles.empty? highest_colored = member_roles.max_by(&:position) Color.new(highest_colored.color) end |
#display_name ⇒ String
Get member’s effective name (nickname or username)
76 77 78 |
# File 'lib/discord_rda/entity/member.rb', line 76 def display_name nick || user&.display_name || user&.username end |
#duration_in_guild ⇒ Float
Get how long member has been in the guild
146 147 148 149 150 |
# File 'lib/discord_rda/entity/member.rb', line 146 def duration_in_guild return 0 unless joined_at Time.now.utc - joined_at end |
#guild_id ⇒ Snowflake?
Get guild ID
162 163 164 |
# File 'lib/discord_rda/entity/member.rb', line 162 def guild_id @raw_data['guild_id'] ? Snowflake.new(@raw_data['guild_id']) : nil end |
#has_role?(role_id) ⇒ Boolean
Check if member has a specific role
177 178 179 180 |
# File 'lib/discord_rda/entity/member.rb', line 177 def has_role?(role_id) role_snowflake = role_id.is_a?(Snowflake) ? role_id : Snowflake.new(role_id) roles.include?(role_snowflake) end |
#highest_role_position(guild_roles) ⇒ Integer
Get the highest role position
185 186 187 188 |
# File 'lib/discord_rda/entity/member.rb', line 185 def highest_role_position(guild_roles) member_roles = guild_roles.select { |r| has_role?(r.id) } member_roles.map(&:position).max || 0 end |
#id ⇒ Object
Member inherits ID from user
9 10 11 |
# File 'lib/discord_rda/entity/member.rb', line 9 def id user&.id end |
#member_flags ⇒ MemberFlags
Get member flags
230 231 232 |
# File 'lib/discord_rda/entity/member.rb', line 230 def member_flags MemberFlags.new(flags) end |
#mention ⇒ String
Get mention string
82 83 84 |
# File 'lib/discord_rda/entity/member.rb', line 82 def mention "<@!#{id}>" end |
#mute? ⇒ Boolean
Check if member is server muted
114 115 116 |
# File 'lib/discord_rda/entity/member.rb', line 114 def mute? mute end |
#nick? ⇒ Boolean
Check if member has a nickname
88 89 90 |
# File 'lib/discord_rda/entity/member.rb', line 88 def nick? !nick.nil? end |
#owner?(guild_owner_id) ⇒ Boolean
Check if this member is the guild owner
224 225 226 |
# File 'lib/discord_rda/entity/member.rb', line 224 def owner?(guild_owner_id) id == guild_owner_id end |
#pending? ⇒ Boolean
Check if member has pending membership screening
120 121 122 |
# File 'lib/discord_rda/entity/member.rb', line 120 def pending? pending end |
#permission_set ⇒ Permission?
Get permission set for this member
168 169 170 171 172 |
# File 'lib/discord_rda/entity/member.rb', line 168 def return nil unless Permission.new(.to_i) end |
#respond_to_missing?(method, include_private = false) ⇒ Boolean
217 218 219 |
# File 'lib/discord_rda/entity/member.rb', line 217 def respond_to_missing?(method, include_private = false) user&.respond_to?(method) || super end |
#started_onboarding? ⇒ Boolean
Check if member started onboarding
248 249 250 |
# File 'lib/discord_rda/entity/member.rb', line 248 def started_onboarding? !flags.nil? && (flags & 1) == 1 end |
#timed_out? ⇒ Boolean
Check if member is currently timed out
126 127 128 129 130 |
# File 'lib/discord_rda/entity/member.rb', line 126 def timed_out? return false unless communication_disabled_until communication_disabled_until > Time.now.utc end |