Class: Discordrb::Message

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

Overview

A message on Discord that was sent to a text channel

Constant Summary collapse

ZERO_DISCRIM =

The discriminator that webhook user accounts have.

'0000'.freeze

Instance Attribute Summary collapse

Attributes included from IDObject

#id

Instance Method Summary collapse

Methods included from IDObject

#==, #creation_time, synthesise

Instance Attribute Details

#attachmentsArray<Attachment> (readonly)

Returns the files attached to this message.

Returns:

  • (Array<Attachment>)

    the files attached to this message.


2143
2144
2145
# File 'lib/discordrb/data.rb', line 2143

def attachments
  @attachments
end

#authorMember, User (readonly) Also known as: user, writer

Returns the user that sent this message. (Will be a Discordrb::Member most of the time, it should only be a User for old messages when the author has left the server since then).

Returns:

  • (Member, User)

    the user that sent this message. (Will be a Discordrb::Member most of the time, it should only be a User for old messages when the author has left the server since then)


2122
2123
2124
# File 'lib/discordrb/data.rb', line 2122

def author
  @author
end

#channelChannel (readonly)

Returns the channel in which this message was sent.

Returns:

  • (Channel)

    the channel in which this message was sent.


2127
2128
2129
# File 'lib/discordrb/data.rb', line 2127

def channel
  @channel
end

#contentString (readonly) Also known as: text, to_s

Returns the content of this message.

Returns:

  • (String)

    the content of this message.


2116
2117
2118
# File 'lib/discordrb/data.rb', line 2116

def content
  @content
end

#editedtrue, false (readonly) Also known as: edited?

Returns whether the message was edited or not.

Returns:

  • (true, false)

    whether the message was edited or not.


2159
2160
2161
# File 'lib/discordrb/data.rb', line 2159

def edited
  @edited
end

#edited_timestampTime (readonly) Also known as: edit_timestamp

Returns the timestamp at which this message was edited. nil if the message was never edited.

Returns:

  • (Time)

    the timestamp at which this message was edited. nil if the message was never edited.


2133
2134
2135
# File 'lib/discordrb/data.rb', line 2133

def edited_timestamp
  @edited_timestamp
end

#embedsArray<Embed> (readonly)

Returns the embed objects contained in this message.

Returns:

  • (Array<Embed>)

    the embed objects contained in this message.


2146
2147
2148
# File 'lib/discordrb/data.rb', line 2146

def embeds
  @embeds
end

#mention_everyonetrue, false (readonly) Also known as: mention_everyone?, mentions_everyone?

Returns whether the message mentioned everyone or not.

Returns:

  • (true, false)

    whether the message mentioned everyone or not.


2163
2164
2165
# File 'lib/discordrb/data.rb', line 2163

def mention_everyone
  @mention_everyone
end

#mentionsArray<User> (readonly)

Returns the users that were mentioned in this message.

Returns:

  • (Array<User>)

    the users that were mentioned in this message.


2137
2138
2139
# File 'lib/discordrb/data.rb', line 2137

def mentions
  @mentions
end

#nonceString (readonly)

Returns used for validating a message was sent.

Returns:

  • (String)

    used for validating a message was sent


2156
2157
2158
# File 'lib/discordrb/data.rb', line 2156

def nonce
  @nonce
end

#pinnedtrue, false (readonly) Also known as: pinned?

Returns whether the message is pinned or not.

Returns:

  • (true, false)

    whether the message is pinned or not.


2168
2169
2170
# File 'lib/discordrb/data.rb', line 2168

def pinned
  @pinned
end

#reactionsHash<String => Reaction> (readonly)

Returns the reaction objects attached to this message keyed by the name of the reaction.

Returns:

  • (Hash<String => Reaction>)

    the reaction objects attached to this message keyed by the name of the reaction


2149
2150
2151
# File 'lib/discordrb/data.rb', line 2149

def reactions
  @reactions
end

#role_mentionsArray<Role> (readonly)

Returns the roles that were mentioned in this message.

Returns:

  • (Array<Role>)

    the roles that were mentioned in this message.


2140
2141
2142
# File 'lib/discordrb/data.rb', line 2140

def role_mentions
  @role_mentions
end

#timestampTime (readonly)

Returns the timestamp at which this message was sent.

Returns:

  • (Time)

    the timestamp at which this message was sent.


2130
2131
2132
# File 'lib/discordrb/data.rb', line 2130

def timestamp
  @timestamp
end

#ttstrue, false (readonly) Also known as: tts?

Returns whether the message used Text-To-Speech (TTS) or not.

Returns:

  • (true, false)

    whether the message used Text-To-Speech (TTS) or not.


2152
2153
2154
# File 'lib/discordrb/data.rb', line 2152

def tts
  @tts
end

#webhook_idInteger? (readonly)

Returns the webhook ID that sent this message, or nil if it wasn't sent through a webhook.

Returns:

  • (Integer, nil)

    the webhook ID that sent this message, or nil if it wasn't sent through a webhook.


2172
2173
2174
# File 'lib/discordrb/data.rb', line 2172

def webhook_id
  @webhook_id
end

Instance Method Details

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

Add an Await for a message with the same user and channel.

See Also:


2290
2291
2292
# File 'lib/discordrb/data.rb', line 2290

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

#create_reaction(reaction) ⇒ Object Also known as: react

Reacts to a message

Parameters:

  • reaction (String, #to_reaction)

    the unicode emoji or Emoji


2344
2345
2346
2347
2348
# File 'lib/discordrb/data.rb', line 2344

def create_reaction(reaction)
  reaction = reaction.to_reaction if reaction.respond_to?(:to_reaction)
  API::Channel.create_reaction(@bot.token, @channel.id, @id, reaction)
  nil
end

#deleteObject

Deletes this message.


2269
2270
2271
2272
# File 'lib/discordrb/data.rb', line 2269

def delete
  API::Channel.delete_message(@bot.token, @channel.id, @id)
  nil
end

#delete_all_reactionsObject

Removes all reactions from this message


2377
2378
2379
# File 'lib/discordrb/data.rb', line 2377

def delete_all_reactions
  API::Channel.delete_all_reactions(@bot.token, @channel.id, @id)
end

#delete_own_reaction(reaction) ⇒ Object

Delete's this clients reaction on this message

Parameters:

  • reaction (String, #to_reaction)

    the reaction to remove


2371
2372
2373
2374
# File 'lib/discordrb/data.rb', line 2371

def delete_own_reaction(reaction)
  reaction = reaction.to_reaction if reaction.respond_to?(:to_reaction)
  API::Channel.delete_own_reaction(@bot.token, @channel.id, @id, reaction)
end

#delete_reaction(user, reaction) ⇒ Object

Deletes a reaction made by a user on this message

Parameters:

  • user (User, #resolve_id)

    the user who used this reaction

  • reaction (String, #to_reaction)

    the reaction to remove


2364
2365
2366
2367
# File 'lib/discordrb/data.rb', line 2364

def delete_reaction(user, reaction)
  reaction = reaction.to_reaction if reaction.respond_to?(:to_reaction)
  API::Channel.delete_user_reaction(@bot.token, @channel.id, @id, reaction, user.resolve_id)
end

#edit(new_content, new_embed = nil) ⇒ Message

Edits this message to have the specified content instead. You can only edit your own messages.

Parameters:

  • new_content (String)

    the new content the message should have.

  • new_embed (Hash, Discordrb::Webhooks::Embed, nil) (defaults to: nil)

    The new embed the message should have. If nil the message will be changed to have no embed.

Returns:

  • (Message)

    the resulting message.


2263
2264
2265
2266
# File 'lib/discordrb/data.rb', line 2263

def edit(new_content, new_embed = nil)
  response = API::Channel.edit_message(@bot.token, @channel.id, @id, new_content, [], new_embed ? new_embed.to_hash : nil)
  Message.new(JSON.parse(response), @bot)
end

#emojiArray<Emoji>

Returns the emotes that were used/mentioned in this message (Only returns Emoji the bot has access to, else nil).

Returns:

  • (Array<Emoji>)

    the emotes that were used/mentioned in this message (Only returns Emoji the bot has access to, else nil).


2313
2314
2315
2316
2317
2318
2319
2320
2321
# File 'lib/discordrb/data.rb', line 2313

def emoji
  return if @content.nil?

  emoji = scan_for_emoji
  emoji.each do |element|
    @emoji << @bot.parse_mention(element)
  end
  @emoji
end

#emoji?true, false

Check if any emoji got used in this message

Returns:

  • (true, false)

    whether or not any emoji got used


2325
2326
2327
2328
# File 'lib/discordrb/data.rb', line 2325

def emoji?
  emoji = scan_for_emoji
  return true unless emoji.empty?
end

#from_bot?true, false

Returns whether this message was sent by the current Bot.

Returns:

  • (true, false)

    whether this message was sent by the current Bot.


2295
2296
2297
# File 'lib/discordrb/data.rb', line 2295

def from_bot?
  @author && @author.current_bot?
end

#inspectObject

The inspect method is overwritten to give more useful output


2382
2383
2384
# File 'lib/discordrb/data.rb', line 2382

def inspect
  "<Message content=\"#{@content}\" id=#{@id} timestamp=#{@timestamp} author=#{@author} channel=#{@channel}>"
end

#my_reactionsArray<Reaction>

Returns the reactions made by the current bot or user

Returns:


2338
2339
2340
# File 'lib/discordrb/data.rb', line 2338

def my_reactions
  @reactions.values.select(&:me)
end

#pinObject

Pins this message


2275
2276
2277
2278
2279
# File 'lib/discordrb/data.rb', line 2275

def pin
  API::Channel.pin_message(@bot.token, @channel.id, @id)
  @pinned = true
  nil
end

#reacted_with(reaction) ⇒ Array<User>

Returns the list of users who reacted with a certain reaction

Parameters:

  • reaction (String, #to_reaction)

    the unicode emoji or Emoji

Returns:

  • (Array<User>)

    the users who used this reaction


2355
2356
2357
2358
2359
# File 'lib/discordrb/data.rb', line 2355

def reacted_with(reaction)
  reaction = reaction.to_reaction if reaction.respond_to?(:to_reaction)
  response = JSON.parse(API::Channel.get_reactions(@bot.token, @channel.id, @id, reaction))
  response.map { |d| User.new(d, @bot) }
end

#reactions?true, false

Check if any reactions got used in this message

Returns:

  • (true, false)

    whether or not this message has reactions


2332
2333
2334
# File 'lib/discordrb/data.rb', line 2332

def reactions?
  @reactions.any?
end

#reply(content) ⇒ Object

Replies to this message with the specified content.


2254
2255
2256
# File 'lib/discordrb/data.rb', line 2254

def reply(content)
  @channel.send_message(content)
end

#unpinObject

Unpins this message


2282
2283
2284
2285
2286
# File 'lib/discordrb/data.rb', line 2282

def unpin
  API::Channel.unpin_message(@bot.token, @channel.id, @id)
  @pinned = false
  nil
end

#webhook?true, false

Returns whether this message has been sent over a webhook.

Returns:

  • (true, false)

    whether this message has been sent over a webhook.


2300
2301
2302
# File 'lib/discordrb/data.rb', line 2300

def webhook?
  !@webhook_id.nil?
end