class ChatX::Message

Attributes

body[R]
content[R]
id[R]
parent_id[R]
room[R]
server[R]
timestamp[R]
user[R]

Public Class Methods

from_hash(server, hash) click to toggle source
# File lib/chatx/models/message.rb, line 66
def self.from_hash(server, hash)
  new server, **ChatX::Helpers.symbolize_hash_keys(hash)
end
new(server, **opts) click to toggle source
# File lib/chatx/models/message.rb, line 10
def initialize(server, **opts)
  if opts.values_at(:time_stamp, :content, :room_id, :user_id, :message_id).any?(&:nil?)
    raise ChatX::InitializationDataException, 'Got nil for an expected message property'
  end

  @server = server

  @id = opts[:message_id]
  @timestamp = Time.at(opts[:time_stamp]).utc.to_datetime
  @content = opts[:content]
  @room = ChatX::Helpers.cached opts[:room_id].to_i, :rooms do
    ChatX::Room.new server, room_id: opts[:room_id].to_i
  end
  @user = ChatX::Helpers.cached opts[:user_id].to_i, :users do
    ChatX::User.new server, user_id: opts[:user_id].to_i
  end

  @parent_id = opts[:parent_id]
end

Public Instance Methods

pinged?(username) click to toggle source
# File lib/chatx/models/message.rb, line 45
def pinged?(username)
  @pings.map(&:downcase).map { |x| username.downcase.start_with? x }.any?
end
pings() click to toggle source
# File lib/chatx/models/message.rb, line 40
def pings
  @pings = @content.scan(/@(\w+)/).flatten if @pings.nil?
  @pings
end
reply(bot, content) click to toggle source
# File lib/chatx/models/message.rb, line 32
def reply(bot, content)
  bot.say ":#{id} #{content}", @room.id, server: @server
end
reply?() click to toggle source
# File lib/chatx/models/message.rb, line 36
def reply?
  @content =~ /^:\d+\s/
end