Class: Discordrb::User

Inherits:
Object
  • Object
show all
Includes:
IDObject, UserAttributes
Defined in:
lib/discordrb/data.rb

Overview

User on Discord, including internal data like discriminators

Direct Known Subclasses

Member, Profile, Recipient

Instance Attribute Summary collapse

Attributes included from UserAttributes

#avatar_id, #bot_account, #discriminator, #username

Attributes included from IDObject

#id

Instance Method Summary collapse

Methods included from UserAttributes

#avatar_url, #distinct, #mention

Methods included from IDObject

#==, #creation_time, synthesise

Constructor Details

#initialize(data, bot) ⇒ User

Returns a new instance of User.


164
165
166
167
168
169
170
171
172
173
174
175
176
177
# File 'lib/discordrb/data.rb', line 164

def initialize(data, bot)
  @bot = bot

  @username = data['username']
  @id = data['id'].to_i
  @discriminator = data['discriminator']
  @avatar_id = data['avatar']
  @roles = {}

  @bot_account = false
  @bot_account = true if data['bot']

  @status = :offline
end

Instance Attribute Details

#gameString? (readonly)

Returns the game the user is currently playing, or nil if none is being played.

Returns:

  • (String, nil)

    the game the user is currently playing, or nil if none is being played.


155
156
157
# File 'lib/discordrb/data.rb', line 155

def game
  @game
end

#statusSymbol (readonly)

Returns the current online status of the user (:online, :offline or :idle).

Returns:

  • (Symbol)

    the current online status of the user (:online, :offline or :idle)


152
153
154
# File 'lib/discordrb/data.rb', line 152

def status
  @status
end

#stream_typeString, ... (readonly)

Returns the type of the stream. Can technically be set to anything, most of the time it will be 0 for no stream or 1 for Twitch streams.

Returns:

  • (String, Integer, nil)

    the type of the stream. Can technically be set to anything, most of the time it will be 0 for no stream or 1 for Twitch streams.


162
163
164
# File 'lib/discordrb/data.rb', line 162

def stream_type
  @stream_type
end

#stream_urlString? (readonly)

Returns the URL to the stream, if the user is currently streaming something.

Returns:

  • (String, nil)

    the URL to the stream, if the user is currently streaming something.


158
159
160
# File 'lib/discordrb/data.rb', line 158

def stream_url
  @stream_url
end

Instance Method Details

#await(key, attributes = {}, &block) ⇒ Object

Add an await for a message from this user. Specifically, this adds a global await for a MessageEvent with this user's ID as a :from attribute.

See Also:


237
238
239
# File 'lib/discordrb/data.rb', line 237

def await(key, attributes = {}, &block)
  @bot.add_await(key, Discordrb::Events::MessageEvent, { from: @id }.merge(attributes), &block)
end

#current_bot?true, false

Is the user the bot?

Returns:

  • (true, false)

    whether this user is the bot


251
252
253
# File 'lib/discordrb/data.rb', line 251

def current_bot?
  @bot.profile.id == @id
end

#inspectObject

The inspect method is overwritten to give more useful output


267
268
269
# File 'lib/discordrb/data.rb', line 267

def inspect
  "<User username=#{@username} id=#{@id} discriminator=#{@discriminator}>"
end

#on(server) ⇒ Member

Gets the member this user is on a server

Parameters:

  • server (Server)

    The server to get the member for

Returns:

  • (Member)

    this user as a member on a particular server


244
245
246
247
# File 'lib/discordrb/data.rb', line 244

def on(server)
  id = server.resolve_id
  @bot.server(id).member(@id)
end

#pmChannel #pm(content) ⇒ Message Also known as: dm

Get a user's PM channel or send them a PM

Overloads:

  • #pmChannel

    Creates a private message channel for this user or returns an existing one if it already exists

    Returns:

    • (Channel)

      the PM channel to this user.

  • #pm(content) ⇒ Message

    Sends a private to this user.

    Parameters:

    • content (String)

      The content to send.

    Returns:

    • (Message)

      the message sent to this user.


187
188
189
190
191
192
193
194
195
196
# File 'lib/discordrb/data.rb', line 187

def pm(content = nil)
  if content    # Recursively call pm to get the channel, then send a message to it

    channel = pm
    channel.send_message(content)
  else
    # If no message was specified, return the PM channel
    @bot.pm_channel(@id)
  end
end

#send_file(file, caption = nil) ⇒ Message

Send the user a file.

Examples:

Send a file from disk

user.send_file(File.open('rubytaco.png', 'r'))

Parameters:

  • file (File)

    The file to send to the user

  • caption (String) (defaults to: nil)

    The caption of the file being sent

Returns:

  • (Message)

    the message sent to this user.


206
207
208
# File 'lib/discordrb/data.rb', line 206

def send_file(file, caption = nil)
  pm.send_file(file, caption: caption)
end

#webhook?true, false

Returns whether this user is a fake user for a webhook message.

Returns:

  • (true, false)

    whether this user is a fake user for a webhook message


256
257
258
# File 'lib/discordrb/data.rb', line 256

def webhook?
  @discriminator == Message::ZERO_DISCRIM
end