服务器端聊天模块

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

您可以使用以下聊天模块来支持遗产聊天系统的服务器端行为,包括:

  • 聊天服务:一个单例,管理所有其他聊天模块。
  • 聊天发言人 : 一个实体,可以在聊天频道中创建消息;每个 Player 将自动拥有一个聊天发言人,机器人可以通过创建聊天发言人来聊天。
  • 聊天消息:一个容器,用于存储聊天发言人向聊天通道发送的内容;包含用于格式化消息或为命令添加额外功能的元数据。
  • 聊天频道:ChatSpeaker可以通过这个频道交换聊天消息;也用于团队聊天和悄悄话聊天。

聊天服务

ChatService 是一个单例对象,负责处理Lua聊天系统的服务器端行为,例如ChatChannelsChatSpeakers

所有 ModuleScriptChatModules 文件夹内的函数都应返回一个函数,该函数将由 ChatService 单例调用。

方法

添加通道

  • 参数: string : channelName
  • 描述: 创建一个带有给定名称的聊天频道对象,并返回它。
  • 返回:: 聊天频道

移除通道

  • 参数: string : channelName
  • 描述: 移除带有给定名称的通道
  • 返回值::

获取通道

  • 参数: string : channelName
  • 描述: 返回带有给定名称的通道,或 nil 如果不存在。
  • 返回:: 聊天频道

添加发言者

  • 参数: string : speakerName
  • 描述: 创建并添加一个带有给定名称的聊天室扬声器,然后返回它。
  • 返回: 聊天发言者

移除发言者

  • 参数: string : speakerName
  • 描述: 移除发言者从聊天中删除给定的名称。
  • 返回值::

获取扬声器

  • 参数: string : speakerName
  • 描述: 返回带有给定名称的扬声器,或 nil 如果不存在。
  • 返回: 聊天发言者

获取通道列表

  • 参数:
  • 描述: 返回聊天中所有非私人通道的名单。
  • 返回: 阵列< string >

获取自动加入通道列表

  • 参数:
  • 描述: 返回 AutoJoin 设置为真的聊天中的所有通道名单。
  • 返回: 阵列< string >

注册过滤器消息函数

  • 参数: string : functionId , 函数 : func
  • 描述: 注册一个过滤函数到聊天,由 functionId 识别。任何对消息的更改将持续存在并在消息通过所有其他过滤功能时显示。该函数传递了发言麦克风的名称、消息对象和消息起源的通道。
  • 返回值::
  • 例子:

-- 将此示例粘贴到聊天模块文件夹内的模块脚本中。
-- 这个例子过滤关键字,如果成功,将设置消信息的聊天颜色
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
-- 从消信息中删除(过过滤器)关键字,还设置聊天颜色
messageObject.Message = string.gsub(messageObject.Message, keyword, "")
messageObject.ExtraData.ChatColor = chatColor
end
end
local function runChatModule(ChatService)
ChatService:RegisterFilterMessageFunction(functionId, doFilter)
end
return runChatModule

取消注册过滤器消息函数

  • 参数: string : functionId
  • 描述: 注册一个过滤函数(由 RegisterFilterMessageFunction 注册),给予其标识符, functionId
  • 返回值::

注册过程命令函数

  • 参数: string : functionId , 函数 : func
  • 描述: 注册一个过程命令函数到聊天被识别为 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

取消注册过程命令函数

  • 参数: string : functionId
  • 描述: 注册一个命令处理器 (由 注册过程命令函数 注册) 给予标识符, functionId
  • 返回值::

事件

已添加通道

  • 参数: string : channelName
  • 描述: 在聊天中添加通道时发生火灾。

通道已移除

  • 参数: string : channelName
  • 描述: 在聊天中删除通道时发火。

添加了扬声器

  • 参数: string : speakerName
  • 描述: 在添加扬声器到聊天时发射。

已移除扬声器

  • 参数: string : speakerName
  • 描述: 在拆除扬声器后发射。

聊天扬声器

一个 聊天发言者 是可以在 聊天频道 上发言的一个实体的表示。每个Player自动都有一个相关的聊天发言人。额外的聊天发言人可以用 ChatService:AddSpeaker() 为非用户(例如广播者或提示消息)构建。

属性

名称

  • 类型: string : Name
  • 描述: 该发言麦克风的名称,用于在调用许多其他函数时引用此发言者。

方法

加入频道

  • 参数: string : channelName
  • 描述: 添加扬声器到通道,使用给定的 channelName
  • 返回值::

离开通道

  • 参数: string : channelName
  • 描述: 移除通道中的发言者与给定的 channelName
  • 返回值::

获取通道列表

  • 参数:
  • 描述: 返回发言者所在的所有通道的名称列表。
  • 返回: 阵列< string >

是否在频道中

  • 参数: string : channelName
  • 描述: 返回是否将发言者放置在指定的通道中 channelName
  • 返回值:: bool

说消息

发送消息

  • 参数: : , : , : , :
  • 描述: 向 ChatSpeaker 发送带有给定名称的消息。如果通频道中没有这样的发言者,该方法会创建警告,发言者将无法看到消信息。
  • 返回值::

发送系统消息

  • 参数: string : message , string : channelName
  • 描述:聊天频道发送指定的channelName。如果发言者不在频道中,那么此消息将创建警告,频道中的其他发言者不会看到消信息。
  • 返回值::

获取玩家

  • 参数:
  • 描述: 返回与发言麦克风相关的 Player 对象。如果扬声器不是为用户(机器人)的话,那么返回 nil
  • 返回值:: Playernil

设置额外数据

  • 参数: string : key ,变体 data
  • 描述: 为特定的 key 下的发言者设置一些额外数据。每当发言者发送 聊天消息 这些额外数据都会附加到消息上,如果没有明确提供消信息,那么如果没有明确提供消息,那么如果没有明确提供消息,那么如果没有明确提供消息,那么如果没有明确提供消息,那么如果没有明确提供消息,那么如果没有明确提供消息,那么如果没有明确提供消息,那么如果没有明确提供消息,那么如果没有明确提供消息,那么如果没有明确提供消息,那么如果没有明确提供消息,那么如果没有明确提供消例如,这可以设置演讲麦克风的聊天颜色。
  • 返回值::

获取额外数据

  • 参数: string : key
  • 描述: 返回与给定 key 相关的额外数据,使用 SetExtraData 设置。
  • 返回:: 变体

设置主通道

  • 参数: string : channelName
  • 描述: 将发言者设置为在提供的通频道上发言。触发主通道设置。
  • 返回: nil

事件

说话消息

收到的消息

收到系统消息

  • 参数: 聊天消息 messagestring : channelName
  • 描述: 发射时,扬声器收到来自 聊天频道 与给定 的系统 channelName

已加入频道

  • 参数: string : channelName , string : channelWelcomeMessage
  • 描述: 发射时,发言者加入聊天频道,使用给定的channelName

左通道

  • 参数: string : channelName
  • 描述: 发射时,发言者离开了带有给定 ChatChannel 的 》 。

静音

  • 参数:: string : channelName , string : reason = nil , int : duration = 0
  • 描述:ChatChannel 上将沉默发言者时发射(如果提供),在给定的时间内(如果提供)发射给定的 channelName 。可能或可能没有提供 reason

取消静音

  • 参数: string : channelName
  • 描述: 发射时,扬声器在 ChatChannel 上使用给定的 channelName 静音。

额外数据更新

  • 参数: string : key ,变体 data
  • 描述: 在使用 SetExtraData 更新发言麦克风的额外数据中的键的默认值时发射。

主通道设置

  • 参数: string : channelName
  • 描述: 发射时,扬声器主频道更改为与给定的 ChatChannelchannelName .

聊天消息

一个 聊天消息 是由 ChatSpeaker 发送的消息的数据结构。它包含有关消信息的数据,包括文本长度、文本是否已被 Roblox 过滤以及关于消信息外观的额外数据。

属性

ID

  • 类型: int
  • 描述: 消信息的唯一数字标识符。

从发言者

原始通道

已过滤

  • 类型: bool
  • 描述: 描述是否由 Roblox 过滤消息 (如果真的,那么消息将是 nil )

消息长度

  • 类型: int
  • 描述: 消信息长度。您可以使用此来生成加密的字符串,如果消息被过滤。

消息

  • 类型: string : 或 nil
  • 描述: 消信息的文本。此属性将为 nil 如果 IsFiltered 为真的。

消息类型

  • 类型: string :
  • 描述: 消信息的类型。这些类型在聊天Constants模块中被描述:
  • 可能值: "Message" , "System" , "MeCommand" , "Welcome" , "SetCore" , "Whisper"

时间

  • 类型: int
  • 描述: 一个时戳;在消信息创作品时的 os.time() 值。

额外数据

  • 类型:: 词典< string , 变体>
  • 描述: 这个消信息的元数据词典。用于更改消信息的外观。以下键可能存在:

聊天频道

聊天频道 是一个存储单个通道数据的对象,这是一种方式,可以让消息在 ChatSpeakers 之间交换。它还有决定消息可见性以及用户是否可以手动加入或离开通道的访问权限属性(使用 /join/leave 命令)。

默认情况下,每个用户都有一个 聊天发言者 ,它会自动添加到“所有”和“系统”聊天频道(虽然“系统”是只读的)。如果用户在 Player.Team 上,他们也只能访问该团队的通道。

属性

名称

  • 类型: string
  • 描述: 通频道名称,用于在其他函数中引用通道。

欢迎消息

  • 类型: string
  • 描述: 用户加入频道时显示的消息。

可加入

  • 类型: bool
  • 描述: 决定用户是否可以使用 /join 命令手动加入通道。即使此属性为 false,用户仍然可以通过 ChatSpeaker:JoinChannel() 或其他方式添加到通道。

可离开

  • 类型: bool
  • 描述: 决定用户是否可以使用 /leave 命令手动离开通道。即使此属性为 false,用户仍然可以使用 ChatSpeaker:LeaveChannel() 或其他方法从频道中删除,甚至在此属性为 false 的情况下。

自动加入

  • 类型: bool
  • 描述: 决定是否玩家的 ChatSpeaker 在加入游戏后会自动加入频道。非用户发言者不会自动加入频道,即使此属性为真(您可以使用 ChatSpeaker:JoinChannel() 来执行此操作)。

私有

方法

踢出音响

  • 参数: string : speakerName , string : reason = nil
  • 描述: 移除带有给定 speakerName 的发言者从通频道,向用户和通道发送消息,从而将用户踢出。如果提供了 reason,理由将包含在消信息中。
  • 返回值::

静音发言者

  • 参数: string : speakerName , string : reason = nil , int duration = 0
  • 描述: 静音通道中的发言者,使用给定的 speakerName 在指定时间内静音。如果 durationnil 或 0,静音是无限的。如果 reason 提供,那么一个包含原因的消息将被发送到通道。
  • 返回值::

取消静音扬声器

  • 参数: string : speakerName
  • 描述: 解除通频道中给定的 speakerName 扬声器的静音。
  • 返回值::

是否静音发言者

  • 参数: string : speakerName
  • 描述: 描述是否有与给定的 speakerName 相同的发言者在频道中静音。
  • 返回值:: bool

获取发言者列表

  • 参数:
  • 描述: 返回包含所有 if 名称的 ChatSpeaker 当前在频道中的列表。
  • 返回: 阵列< string >

发送系统消息

  • 参数: string : message
  • 描述: 向“系统”ChatSpeaker发送消息到频道。
  • 返回值::

注册过滤器消息函数

  • 参数: string : functionId , 函数 func
  • 描述: 注册一个过滤函数,func ,由 functionId 识别到通频道。过滤函数将被调用与 ChatSpeaker , ChatMessagestring : 消息起源的通道名称。对消息的更改将持续存在,并在过滤后显示。
  • 返回值::
  • 例子:

-- 将此示例粘贴到聊天模块文件夹内的模块脚本中。
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

取消注册过滤器消息函数

  • 参数: string : functionId
  • 描述: 注册一个过滤函数(由 RegisterFilterMessageFunction 注册),给予其标识符, functionId
  • 返回值::

注册过程命令函数

  • 参数: string : functionId , 函数 func
  • 描述: 注册一个过程命令函数,func ,由 functionId 识别到聊天。在消息被过滤之前,它会通过 func (以及由此注册的其他函数) 。函数 func 应检查消息是否调用了命令。如果是这样,执行命令的行动并返回真值。返回真表示消息确实是命令,不应显示。该函数可以使用 UnregisterProcessCommandsFunction 注册解除。
  • 返回值::
  • 例子:

-- 将此示例粘贴到聊天模块文件夹内的模块脚本中。
-- 这个例子过滤关键字,如果成功,将设置消信息的聊天颜色
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
-- 从消信息中删除(过过滤器)关键字,还设置聊天颜色
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

取消注册过程命令函数

  • 参数: string : functionId
  • 描述: 注册一个命令处理器 (由注册过程命令函数注册),给予标识符, functionId
  • 返回值::

事件

已发布的消息

  • 参数: 聊天消息 : message
  • 描述: 在通频道发布消息时触发。

发言者已加入

  • 参数: string : speakerName
  • 描述: 在一个 ChatSpeaker 加入频道时发射。

发言者左

  • 参数: string : speakerName
  • 描述: 在一个 ChatSpeaker 离开频道时发射。

发言者静音

关闭扬声器

  • 参数: string : speakerName
  • 描述: 在一个 ChatSpeaker 被解除静音时发射。