Class: Rubirai::MessageChain

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/rubirai/messages/message_chain.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(bot = nil, source = nil, sender_id: nil) ⇒ MessageChain

Returns a new instance of MessageChain.

Parameters:

  • bot (Rubirai::Bot, nil) (defaults to: nil)
  • source (Array, nil) (defaults to: nil)
  • sender_id (Integer, nil) (defaults to: nil)

Raises:



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/rubirai/messages/message_chain.rb', line 76

def initialize(bot = nil, source = nil, sender_id: nil)
  @bot = bot
  @sender_id = sender_id
  @messages = []
  return unless source
  raise(MiraiError, 'source is not array') unless source.is_a? Array
  raise(MiraiError, 'length is zero') if source.empty?

  if source[0]['type'] == 'Source'
    @sender_id = source[0]['id']
    @send_time = source[0]['time']
    extend(*source.drop(1))
  else
    extend(*source)
  end
end

Instance Attribute Details

#botObject (readonly)

Returns the value of attribute bot.



10
11
12
# File 'lib/rubirai/messages/message_chain.rb', line 10

def bot
  @bot
end

#messagesObject (readonly)

Returns the value of attribute messages.



10
11
12
# File 'lib/rubirai/messages/message_chain.rb', line 10

def messages
  @messages
end

#read_onlyObject (readonly)

Returns the value of attribute read_only.



10
11
12
# File 'lib/rubirai/messages/message_chain.rb', line 10

def read_only
  @read_only
end

#send_timeObject (readonly)

Returns the value of attribute send_time.



10
11
12
# File 'lib/rubirai/messages/message_chain.rb', line 10

def send_time
  @send_time
end

#sender_idObject (readonly)

Returns the value of attribute sender_id.



10
11
12
# File 'lib/rubirai/messages/message_chain.rb', line 10

def sender_id
  @sender_id
end

Class Method Details

.make(*messages, sender_id: nil, bot: nil) ⇒ Rubirai::MessageChain

Makes a message chain from a list of messages

Parameters:

Returns:



18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/rubirai/messages/message_chain.rb', line 18

def self.make(*messages, sender_id: nil, bot: nil)
  chain = new(bot, sender_id: sender_id)
  result = []
  messages.map { |msg| Message.to_message(msg, bot) }.each do |msg|
    if !result.empty? && result[-1].is_a?(PlainMessage) && msg.is_a?(PlainMessage)
      result[-1] = PlainMessage.from(text: result[-1].text + msg.text, bot: bot)
    else
      result.append msg
    end
  end
  chain.extend(*result)
  chain
end

Instance Method Details

#[](idx) ⇒ Object



53
54
55
# File 'lib/rubirai/messages/message_chain.rb', line 53

def [](idx)
  @messages[idx]
end

#concat(msg_chain) ⇒ Object



46
47
48
49
50
51
# File 'lib/rubirai/messages/message_chain.rb', line 46

def concat(msg_chain)
  msg_chain.to_a.each do |msg|
    internal_append msg
  end
  self
end

#each(&block) ⇒ Object



57
58
59
# File 'lib/rubirai/messages/message_chain.rb', line 57

def each(&block)
  @messages.each(&block)
end

#empty?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'lib/rubirai/messages/message_chain.rb', line 69

def empty?
  @messages.empty?
end

#extend(*messages) ⇒ Rubirai::MessageChain Also known as: <<, append

Append messages to this message chain

Parameters:

Returns:



36
37
38
39
40
41
# File 'lib/rubirai/messages/message_chain.rb', line 36

def extend(*messages)
  messages.each do |msg|
    internal_append msg
  end
  self
end

#lengthObject



61
62
63
# File 'lib/rubirai/messages/message_chain.rb', line 61

def length
  @messages.length
end

#sizeObject



65
66
67
# File 'lib/rubirai/messages/message_chain.rb', line 65

def size
  @messages.size
end

#to_aObject



93
94
95
# File 'lib/rubirai/messages/message_chain.rb', line 93

def to_a
  @messages.map(&:to_h)
end