122 lines
2.8 KiB
Lua
122 lines
2.8 KiB
Lua
local CoreGui = game:GetService("CoreGui")
|
|
local Players = game:GetService("Players")
|
|
|
|
local Modules = CoreGui.RobloxGui.Modules
|
|
local LuaApp = Modules.LuaApp
|
|
local LuaChat = Modules.LuaChat
|
|
|
|
local MockId = require(LuaApp.MockId)
|
|
local DateTime = require(LuaChat.DateTime)
|
|
|
|
local FFlagEnableChatMessageType = settings():GetFFlag("EnableChatMessageType")
|
|
|
|
local Message = {}
|
|
if FFlagEnableChatMessageType then
|
|
Message = {
|
|
MessageTypes = {
|
|
PlainText = 'PlainText'
|
|
}
|
|
}
|
|
Message.__index = Message
|
|
end
|
|
|
|
function Message.new()
|
|
local self = {}
|
|
|
|
if FFlagEnableChatMessageType then
|
|
setmetatable(self, Message)
|
|
end
|
|
return self
|
|
end
|
|
|
|
function Message.mock(mergeTable)
|
|
local self = Message.new()
|
|
|
|
self.id = MockId()
|
|
self.senderTargetId = MockId()
|
|
self.conversationId = MockId()
|
|
self.senderType = "MESSAGE SENDERTYPE"
|
|
self.content = "MESSAGE CONTENT"
|
|
self.read = false
|
|
self.sent = DateTime.now()
|
|
self.previousMessageId = nil
|
|
self.filteredForReceivers = false
|
|
|
|
if mergeTable ~= nil then
|
|
for key, value in pairs(mergeTable) do
|
|
self[key] = value
|
|
end
|
|
end
|
|
|
|
return self
|
|
end
|
|
|
|
function Message.fromWeb(data, conversationId, previousMessageId)
|
|
if FFlagEnableChatMessageType then
|
|
if not Message.DoRequiredFieldsPresent(data) then
|
|
return nil
|
|
end
|
|
end
|
|
|
|
local self = Message.new()
|
|
self.id = data.id
|
|
self.senderTargetId = tostring(data.senderTargetId)
|
|
self.senderType = data.senderType
|
|
self.read = data.read
|
|
self.sent = DateTime.fromIsoDate(data.sent)
|
|
self.conversationId = tostring(conversationId)
|
|
self.previousMessageId = previousMessageId
|
|
self.filteredForReceivers = false
|
|
|
|
if FFlagEnableChatMessageType then
|
|
self:parseContent(data)
|
|
else
|
|
self.content = data.content
|
|
end
|
|
|
|
return self
|
|
end
|
|
|
|
function Message.fromSentWeb(data, conversationId, previousMessageId)
|
|
if FFlagEnableChatMessageType then
|
|
if not Message.DoRequiredFieldsPresent(data) then
|
|
return nil
|
|
end
|
|
end
|
|
|
|
local self = Message.new()
|
|
self.id = data.messageId
|
|
self.senderTargetId = tostring(Players.LocalPlayer.UserId)
|
|
self.senderType = "User"
|
|
self.read = true
|
|
self.sent = DateTime.fromIsoDate(data.sent)
|
|
self.conversationId = tostring(conversationId)
|
|
self.previousMessageId = previousMessageId
|
|
self.filteredForReceivers = data.filteredForReceivers
|
|
|
|
if FFlagEnableChatMessageType then
|
|
self:parseContent(data)
|
|
else
|
|
self.content = data.content
|
|
end
|
|
|
|
return self
|
|
end
|
|
|
|
if FFlagEnableChatMessageType then
|
|
function Message.DoRequiredFieldsPresent(data)
|
|
return data and data.id and data.messageType and data.senderTargetId and data.sent
|
|
end
|
|
|
|
function Message:parseContent(data)
|
|
self.messageType = data.messageType
|
|
if data.messageType == Message.MessageTypes.PlainText then
|
|
self.content = data.content
|
|
else
|
|
-- UI will decide on which placeholder to use
|
|
self.content = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
return Message |