Module: Discorb::Messageable
- Included in:
- DMChannel, NewsChannel, TextChannel, ThreadChannel, User
- Defined in:
- lib/discorb/modules.rb
Overview
Module for sending and reading messages.
Instance Method Summary collapse
- 
  
    
      #delete_message!(message_id, reason: nil) -> Object 
    
    
      (also: #destroy_message!)
    
  
  
  
  
  
  
  
  
  
    Delete a message. 
- 
  
    
      #edit_message(message_id, content = nil, embed: nil, embeds: nil, allowed_mentions: nil, components: nil, supress: nil) -> Object 
    
    
  
  
  
  
  
  
  
  
  
    Edit a message. 
- 
  
    
      #fetch_message(id) -> Async::Task<Discorb::Message> 
    
    
  
  
  
  
  
  
  
  
  
    Fetch a message from ID. 
- 
  
    
      #fetch_messages(limit = 50, before: nil, after: nil, around: nil) -> Async::Task<Array<Discorb::Message>> 
    
    
  
  
  
  
  
  
  
  
  
    Fetch a message history. 
- 
  
    
      #post(content = nil, tts: false, embed: nil, embeds: nil, allowed_mentions: nil, reference: nil, components: nil, file: nil, files: nil) -> Async::Task<Discorb::Message> 
    
    
  
  
  
  
  
  
  
  
  
    Post a message to the channel. 
- 
  
    
      #typing -> Object 
    
    
  
  
  
  
  
  
  
  
  
    Trigger the typing indicator in the channel. 
Instance Method Details
#delete_message!(message_id, reason: nil) -> Object Also known as: destroy_message!
This is an asynchronous method, it will return a Async::Task object. Use Async::Task#wait to get the result.
This method calls HTTP request.
Delete a message.
| 130 131 132 133 134 | # File 'lib/discorb/modules.rb', line 130 def (, reason: nil) Async do @client.http.delete("/channels/#{channel_id.wait}/messages/#{}", reason: reason).wait end end | 
#edit_message(message_id, content = nil, embed: nil, embeds: nil, allowed_mentions: nil, components: nil, supress: nil) -> Object
This is an asynchronous method, it will return a Async::Task object. Use Async::Task#wait to get the result.
This method calls HTTP request.
Edit a message.
| 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | # File 'lib/discorb/modules.rb', line 84 def (, content = nil, embed: nil, embeds: nil, allowed_mentions: nil, components: nil, supress: nil) Async do payload = {} payload[:content] = content if content = if [] elsif end payload[:embeds] = .map(&:to_hash) if payload[:allowed_mentions] = allowed_mentions ? allowed_mentions.to_hash(@client.allowed_mentions) : @client.allowed_mentions.to_hash if components tmp_components = [] tmp_row = [] components.each do |c| case c when Array tmp_components << tmp_row tmp_row = [] tmp_components << c when SelectMenu tmp_components << tmp_row tmp_row = [] tmp_components << [c] else tmp_row << c end end tmp_components << tmp_row payload[:flags] = (supress ? 1 << 2 : 0) unless flags.nil? payload[:components] = tmp_components.filter { |c| c.length.positive? }.map { |c| { type: 1, components: c.map(&:to_hash) } } end @client.http.patch("/channels/#{channel_id.wait}/messages/#{}", payload).wait end end | 
#fetch_message(id) -> Async::Task<Discorb::Message>
This is an asynchronous method, it will return a Async::Task object. Use Async::Task#wait to get the result.
This method calls HTTP request.
Fetch a message from ID.
| 148 149 150 151 152 153 | # File 'lib/discorb/modules.rb', line 148 def (id) Async do _resp, data = @client.http.get("/channels/#{channel_id.wait}/messages/#{id}").wait Message.new(@client, data.merge({ guild_id: @guild_id.to_s })) end end | 
#fetch_messages(limit = 50, before: nil, after: nil, around: nil) -> Async::Task<Array<Discorb::Message>>
This is an asynchronous method, it will return a Async::Task object. Use Async::Task#wait to get the result.
This method calls HTTP request.
Fetch a message history.
| 167 168 169 170 171 172 173 174 175 176 177 178 | # File 'lib/discorb/modules.rb', line 167 def (limit = 50, before: nil, after: nil, around: nil) Async do params = { limit: limit, before: Discorb::Utils.try(after, :id), after: Discorb::Utils.try(around, :id), around: Discorb::Utils.try(before, :id), }.filter { |_k, v| !v.nil? }.to_h _resp, = @client.http.get("/channels/#{channel_id.wait}/messages?#{URI.encode_www_form(params)}").wait .map { |m| Message.new(@client, m.merge({ guild_id: @guild_id.to_s })) } end end | 
#post(content = nil, tts: false, embed: nil, embeds: nil, allowed_mentions: nil, reference: nil, components: nil, file: nil, files: nil) -> Async::Task<Discorb::Message>
This is an asynchronous method, it will return a Async::Task object. Use Async::Task#wait to get the result.
This method calls HTTP request.
Post a message to the channel.
| 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | # File 'lib/discorb/modules.rb', line 25 def post(content = nil, tts: false, embed: nil, embeds: nil, allowed_mentions: nil, reference: nil, components: nil, file: nil, files: nil) Async do payload = {} payload[:content] = content if content payload[:tts] = tts = if [] elsif end payload[:embeds] = .map(&:to_hash) if payload[:allowed_mentions] = allowed_mentions ? allowed_mentions.to_hash(@client.allowed_mentions) : @client.allowed_mentions.to_hash payload[:message_reference] = reference.to_reference if reference if components tmp_components = [] tmp_row = [] components.each do |c| case c when Array tmp_components << tmp_row tmp_row = [] tmp_components << c when SelectMenu tmp_components << tmp_row tmp_row = [] tmp_components << [c] else tmp_row << c end end tmp_components << tmp_row payload[:components] = tmp_components.filter { |c| c.length.positive? }.map { |c| { type: 1, components: c.map(&:to_hash) } } end files = [file] if file if files headers, payload = HTTP.multipart(payload, files) else headers = {} end _resp, data = @client.http.post("/channels/#{channel_id.wait}/messages", payload, headers: headers).wait Message.new(@client, data.merge({ guild_id: @guild_id.to_s })) end end | 
#typing -> Object
This is an asynchronous method, it will return a Async::Task object. Use Async::Task#wait to get the result.
This method calls HTTP request.
Trigger the typing indicator in the channel. If block is given, trigger typing indicator during executing block.
| 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 | # File 'lib/discorb/modules.rb', line 193 def typing Async do |task| if block_given? begin post_task = task.async do @client.http.post("/channels/#{@id}/typing", {}) sleep(5) end yield ensure post_task.stop end else @client.http.post("/channels/#{@id}/typing", {}) end end end |