다음 채팅 모듈을 사용하여 레거시 채팅 시스템의 서버 측 동작을 지원할 수 있습니다. 여기에는 다음이 포함됩니다:
- ChatService : 다른 모든 채팅 모듈을 관리하는 단일 인스턴스.
- 채팅 스피커 : 채팅 채널에서 메시지를 생성할 수 있는 엔터티; 각 Player 는 자동으로 채팅 스피커를 갖게 되며 봇이 채팅 스피커를 생성하여 채팅할 수 있습니다.
- ChatMessage : 채팅 스피커가 채팅 채널에 보내는 콘텐츠의 컨테이너; 메시지를 형식화하거나 명령에 추가 기능을 추가하는 데 사용되는 메타데이터를 포함합니다.
- ChatChannel : ChatSpeaker가 ChatMessage를 교환할 수 있는 채널; 팀 채팅과 속삭임 채팅에도 사용됩니다.
채팅서비스
ChatService 는 Lua 채팅 시스템의 서버 측 동작, 예를 들어 ChatChannels 및 ChatSpeakers를 처리하는 단일 개체입니다.
채팅 모듈 폴더 내의 모든 s는 함수를 반환해야 하며, 그 함수는 ChatService 싱글턴으로 호출됩니다.
방법
채널 추가
- 설명: 지정된 이름으로 ChatChannel 개체를 만들고 반환합니다.
- 반환: 채팅 채널
채널 제거
- 설명: 지정된 이름의 채널 제거
- 반환: 무효
채널 받기
- 설명: 지정된 이름의 채널을 반환하거나 없으면 nil입니다.
- 반환: 채팅 채널
스피커 추가
- 설명: 지정된 이름으로 채팅에 스피커를 생성하고 추가한 다음 반환합니다.
- 반환: ChatSpeaker
스피커 제거
- 설명: 지정된 이름으로 채팅에서 스피커를 제거합니다.
- 반환: 무효
Speaker 가져오기
- 설명: 주어진 이름의 스피커를 반환하거나 없으면 nil입니다.
- 반환: ChatSpeaker
채널 목록 가져오기GetChannelList
- 매개 변수: 없음
- 설명: 채팅의 모든 비공개 채널 이름 목록을 반환합니다.
- 반환: 배열< string >
자동 조인 채널 목록 받기
- 매개 변수: 없음
- 설명: 자동 참가 설정이 true로 설정된 채팅의 모든 채널 이름 목록을 반환합니다.
- 반환: 배열< string >
등록필터메시지함수
- 설명: 채팅을 식별하는 필터 함수를 등록합니다 functionId .메시지에 대한 모든 변경 사항은 유지되고 메시지가 다른 모든 필터 기능을 통과할 때 표시됩니다.이 함수는 스피커의 이름, 메시지 개체 및 메시지가 발생한 채널을 전달합니다.
- 반환: 무효
- 예제:
-- 채팅 모듈 폴더 내의 모듈스크립트에 이 예제를 붙여넣으세요.
-- 이 예제에서는 키워드를 필터링하고, 성공하면 메시지의 chatColor를 설정합니다
local functionId = "greenText"
local keyword = "#green"
local chatColor = Color3.new(0, 1, 0) -- 녹색
local function doFilter(speaker, messageObject, channelName)
-- 메시지에 키워드가 포함되었는지 확인
local start, finish = string.find(messageObject.Message, keyword)
if start and finish then
-- 메시지에서 키워드를 제거(필터링)하고 ChatColor도 설정
messageObject.Message = string.gsub(messageObject.Message, keyword, "")
messageObject.ExtraData.ChatColor = chatColor
end
end
local function runChatModule(ChatService)
ChatService:RegisterFilterMessageFunction(functionId, doFilter)
end
return runChatModule
등록 취소 필터 메시지 함수
- 설명: 식별자로 등록된 필터 함수(RegisterFilterMessageFunction에 의해 등록됨)를 등록 취소합니다(functionId).
- 반환: 무효
등록 프로세스 명령 함수
- 설명: 프로세스 명령 함수를 functionId에 등록합니다.메시지가 필터링되기 전에, 그것은 func (및 이것에 의해 등록된 다른 함수)를 통과할 것입니다.함수 func 는 메시지가 명령을 호출하는지 확인해야 합니다.그렇다면 명령의 작업을 수행하고 진실을 반환합니다.진실을 반환하면 메시지가 실제로 명령이고 표시되지 않아야 함을 나타냅니다.UnregisterProcessCommandsFunction을 사용하여 함수를 등록 취소할 수 있습니다.
- 반환: 무효
- 예제:
-- 채팅 모듈 폴더 내의 모듈스크립트에 이 예제를 붙여넣으세요.
local functionId = "getPizza"
local command = "/pizza"
local toolId = 22596452 -- 페페로니 피자 조각 장비
local function processCommand(speakerName, message, channelName)
if string.sub(message, 1, command:len()) == command then
local model = game:GetService("InsertService"):LoadAsset(toolId)
local tool = model:GetChildren()[1]
local speaker = ChatService:GetSpeaker(speakerName)
local player = speaker:GetPlayer()
tool.Parent = player.Backpack
return true
end
return false
end
local function runChatModule(ChatService)
ChatService:RegisterProcessCommandsFunction(functionId, processCommand)
end
return runChatModule
등록 취소 프로세스 명령 함수
- 반환: 무효
이벤트
채널 추가됨
- 설명: 채팅에 채널이 추가될 때 발생합니다.
채널 제거됨
- 설명: 채팅에서 채널이 제거될 때 발생합니다.
스피커 추가
- 설명: 스피커가 채팅에 추가되면 발생합니다.
스피커 제거
- 설명: 스피커가 채팅에서 제거될 때 발생합니다.
채팅 스피커
A ChatSpeaker 는 채팅채널에서 말할 수 있는 하나의 엔터티의 표현이다.게임에 자동으로 연결된 각 Player 연결된 채팅 스피커가 있습니다.추가 채팅 스피커는 ChatService:AddSpeaker()를 사용하여 비사용자(예: 발표자 또는 힌트 메시지)를 위해 생성될 수 있습니다.
속성
이름
- 설명: 다른 많은 함수를 호출하는 동안 이 스피커를 참조하는 데 사용되는 스피커의 이름.
방법
채널 가입JoinChannel
- 설명: 지정된 channelName에 스피커를 채널에 추가합니다
- 반환: 무효
채널 나가기 LeaveChannel
- 설명: 지정된 channelName로 채널에서 스피커를 제거합니다
- 반환: 무효
채널 목록 가져오기GetChannelList
- 매개변수: 없음
- 설명: 스피커가 있는 모든 채널의 이름 목록을 반환합니다.
- 반환: 배열< string >
IsIn채널
- 설명: 스피커가 지정된 channelName 채널에 있는지 여부를 반환합니다.
- 반환: bool
메시지 말하기
- 반환: 채팅 메시지
메시지 전송
- 매개 변수: : , : , : , :
- 설명: 지정된 이름으로 ChatSpeaker에 메시지를 보냅니다.채널에 해당 스피커가 없으면 이 메서드가 경고를 생성하고 스피커는 메시지를 볼 수 없습니다.
- 반환: 무효
시스템 메시지 전송
- 매개 변수: : , : , :
- 설명: 지정된 ChatChannel에 시스템 메시지를 보냅니다 channelName .스피커가 채널에 없으면 이 메시지가 경고를 생성하고 채널의 다른 스피커는 메시지를 볼 수 없습니다.
- 반환: 무효
플레이어 가져오기
- 매개변수: 없음
- 설명: 스피커와 관련된 Player 개체를 반환합니다.스피커가 사용자(봇)가 아니면 이 반환됩니다 nil .
- 반환: Player 또는 nil
설정된 추가 데이터
- 설명: 특정 key 아래의 스피커에 대해 일부 추가 데이터를 설정합니다.스피커가 채팅 메시지를 보낼 때마다 이 추가 데이터는 메시지에 제공되지 않으면 메시지에 부착됩니다.예를 들어, 스피커의 채팅 색상을 설정할 수 있습니다.
- 반환: 무효
추가 데이터 가져오기
- 설명: 주어진 에 연결된 추가 데이터를 SetExtraData를 사용하여 반환합니다.
- 반환: 변형
SetMainChannel
- 설명: 스피커를 제공된 채널에서 말하도록 설정합니다. MainChannelSet을 발사합니다.
- 반환: nil
이벤트
사이드 메시지
받은 메시지
시스템 메시지 수신 완료
채널 참여됨
- 매개 변수: : , : , :
채널Left
- 설명: 스피커가 지정된 ChatChannel을 떠날 때 발사됩니다.
음소거
- 설명: 스피커가 ChatChannel에서 음소거되었을 때 지정된 channelName 기간(제공된 경우)에 발사됩니다.제공될 수 있거나 없을 수도 있는 reason가 있을 수 있습니다.
무음 해제
업데이트된 추가 데이터
- 설명: 스피커의 추가 데이터에 있는 키의 기본값이 SetExtraData를 사용하여 업데이트되면 발생합니다.
메인 채널 설정
- 설명: 스피커의 주 채널이 지정된 ChatChannel으로 변경되면 발사됩니다.
채팅 메시지
A 채팅 메시지는 채팅 스피커에서 전송된 메시지를 나타내는 데이터 구조입니다.텍스트의 길이, Roblox에서 텍스트가 필터링되었는지, 메시지의 모습대한 추가 데이터를 포함하여 메시지에 대한 데이터가 포함되어 있습니다.
속성
ID
- 유형: int
- 설명: 메시지에 대한 고유한 숫자 식별자.
스피커에서
- 유형: string :
- 설명: 메시지를 보낸 ChatSpeaker의 이름.
원래 채널
- 유형: string :
- 설명: 메시지가 발생한 ChatChannel의 이름.
필터링되었습니다
- 유형: bool
- 설명: 메시지가 Roblox에 의해 필터링되는지 여부를 설명합니다(참여할 경우, 메시지는 nil 됩니다).
메시지 길이
- 유형: int
- 설명: 메시지의 길이. 메시지가 필터링된 경우 이를 사용하여 해시된 문자열을 생성할 수 있습니다.
메시지
- 설명: 메시지의 텍스트. 이 속성은 IsFiltered가 true인 경우 nil가 됩니다.
메시지 유형
- 유형: string :
- 설명: 메시지의 유형. 이러한 유형은 ChatConstants 모듈에서 설명됩니다.
- 가능한 값: "Message" , "System" , "MeCommand" , "Welcome" , "SetCore" , "Whisper"
시간
추가 데이터
- 유형: 사전< string , 변형>
채팅 채널
ChatChannel 은 ChatSpeakers 간에 메시지를 교환할 수 있는 수단인 단일 채널에 대한 데이터를 저장하는 개체입니다.또한 사용자가 채널에 수동으로 참여하거나 나갈 수 있는지 여부를 결정하는 액세스 권한 속성도 있습니다( 또는 명령을 사용하여).
기본적으로 각 사용자에는 ChatSpeaker가 자동으로 추가되어 "모두" 및 "시스템" 채팅 채널에 게시되지만(비록 "시스템"은 읽기 전용이지만) "시스템"은 읽기 전용입니다.사용자가 Player.Team 있으면 해당 팀에만 액세스할 수 있는 채널에도 액세스할 수 있습니다.
속성
이름
- 유형: string
- 설명: 채널의 이름, 다른 함수에서 채널을 참조하는 데 사용됩니다.
환영 메시지
- 유형: string
- 설명: 사용자가 채널에 가입할 때 표시할 메시지.
가입 가능
- 유형: bool
- 설명: 사용자가 /join 명령을 사용하여 채널에 수동으로 참여할 수 있는지 여부를 결정합니다.이 속성이 false이더라도 ChatSpeaker:JoinChannel() 또는 다른 방법을 사용하여 채널에 사용자를 계속 추가할 수 있습니다.
남기기 가능
- 유형: bool
- 설명: 사용자가 /leave 명령을 사용하여 채널을 수동으로 떠날 수 있는지 여부를 결정합니다.이 속성이 false이더라도 ChatSpeaker:LeaveChannel() 또는 다른 방법을 사용하여 채널에서 사용자를 제거할 수 있습니다.
자동 참여
- 유형: bool
- 설명: 플레이어의 ChatSpeaker가 게임에 참여하면 채널에 자동으로 참여하는지 여부를 결정합니다.사용자가 아닌 스피커는 채널에 자동으로 참여하지 않으며, 이 속성이 true이더라도 ChatSpeaker:JoinChannel()을 사용하여 이를 수행할 수 있습니다.
개인
- 유형: bool
- 설명: 채널이 ChatService:GetChannelList()에서 반환된 채널 목록에 포함될지 여부를 결정합니다.이는 속삭임 채팅과 팀 채팅에 사용됩니다.
방법
킥스피커
- 매개 변수: : , : , :
- 설명: 지정된 speakerName 스피커를 채널에서 제거하여 사용자와 사용자가 킥된 채널 모두에 메시지를 전송합니다.reason가 제공되면 이유가 메시지에 포함됩니다.
- 반환: 무효
무음 스피커
- 설명: 채널에서 지정된 speakerName에 따라 스피커를 일정 기간 동안 음소거합니다.if duration 가 nil 또는 0이면, 음소거는 무기한입니다.reason 가 제공되면 이유가 포함된 채널에 메시지가 전송됩니다.
- 반환: 무효
스피커 음소거 해제
- 설명: 채널에서 지정된 speakerName로 스피커를 음소거합니다.
- 반환: 무효
스피커 음소거 IsSpeakerMuted
- 설명: 주어진 speakerName 스피커가 채널에서 현재 음소거되었는지 여부를 설명합니다.
- 반환: bool
스피커 목록 가져오기GetSpeakerList
- 매개변수: 없음
- 설명: 현재 채널에 있는 ChatSpeaker의 모든 이름을 포함하는 목록을 반환합니다.
- 반환: 배열< string >
시스템 메시지 전송
- 설명: "시스템" ChatSpeaker에서 채널에 메시지를 보냅니다.
- 반환: 무효
등록필터메시지함수
- 설명: 필터 함수를 등록합니다, func 채널에 의해 식별되는, functionId 를 채널에 등록합니다.필터 함수는 ChatSpeaker, ChatMessage, 그리고 string: 메시지가 발생한 채널의 이름으로 호출됩니다.메시지의 변경 사항은 지속되며 필터링 후 표시됩니다.
- 반환: 무효
- 예제:
-- 채팅 모듈 폴더 내의 모듈스크립트에 이 예제를 붙여넣으세요.
local functionId = "getPizza"
local command = "/pizza"
local toolId = 22596452 -- 페페로니 피자 조각 장비
local function processCommand(speakerName, message, channelName)
if string.sub(message, 1, command:len()) == command then
local model = game:GetService("InsertService"):LoadAsset(toolId)
local tool = model:GetChildren()[1]
local speaker = ChatService:GetSpeaker(speakerName)
local player = speaker:GetPlayer()
tool.Parent = player.Backpack
return true
end
return false
end
local function runChatModule(ChatService)
ChatService:RegisterProcessCommandsFunction(functionId, processCommand)
end
return runChatModule
등록 취소 필터 메시지 함수
- 설명: 식별자로 등록된 필터 함수(RegisterFilterMessageFunction에 의해 등록됨)를 등록 취소합니다(functionId).
- 반환: 무효
등록 프로세스 명령 함수
- 설명: 프로세스 명령 함수를 등록합니다, func 채팅에서 식별되는, functionId 에 의해 식별됩니다.메시지가 필터링되기 전에, 그것은 func (및 이것에 의해 등록된 다른 기능)을 통과할 것입니다.함수 func 는 메시지가 명령을 호출하는지 확인해야 합니다.그렇다면 명령의 작업을 수행하고 진실을 반환합니다.진실을 반환하면 메시지가 실제로 명령이고 표시되지 않아야 함을 나타냅니다.UnregisterProcessCommandsFunction을 사용하여 함수를 등록 취소할 수 있습니다.
- 반환: 무효
- 예제:
-- 채팅 모듈 폴더 내의 모듈스크립트에 이 예제를 붙여넣으세요.
-- 이 예제에서는 키워드를 필터링하고, 성공하면 메시지의 chatColor를 설정합니다
local functionId = "greenText"
local keyword = "#green"
local chatColor = Color3.new(0, 1, 0) -- 녹색
local function doFilter(speaker, messageObject, channelName)
-- 메시지에 키워드가 포함되었는지 확인
local start, finish = string.find(messageObject.Message, keyword)
if start and finish then
-- 메시지에서 키워드를 제거(필터링)하고 ChatColor도 설정
messageObject.Message = string.gsub(messageObject.Message, keyword, "")
messageObject.ExtraData.ChatColor = chatColor
end
end
local function runChatModule(ChatService)
-- 채널 생성 및 필터 함수 등록
local testChannel = ChatService:AddChannel("TestChannel")
testChannel:RegisterFilterMessageFunction(functionId, doFilter)
end
return runChatModule
등록 취소 프로세스 명령 함수
- 설명: 식별자에 따라 명령 프로세서(RegisterProcessCommandsFunction에 의해 등록)를 등록 취소합니다(functionId).
- 반환: 무효
이벤트
메시지 게시됨
- 설명: 채널에 메시지가 게시될 때 발생합니다.
스피커 참여
- 설명: 채널에 ChatSpeaker가 참여할 때 발생합니다.
스피커Left
- 설명: 채널을 떠날 때 ChatSpeaker가 발생합니다.
스피커 음소거
- 설명: 채널에서 ChatSpeaker가 음소거되었을 때 발생합니다.
스피커 음소거 해제
- 설명: 음소거가 해제된 ChatSpeaker가 발생하면 화재가 발생합니다.