Sistema de chat de texto en la experiencia

Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Con el sistema de chat de texto en la experiencia en Roblox, puede permitir que los usuarios se comuniquen entre sí utilizando mensajes basados en texto en sesiones en vivo. El sistema proporciona un conjunto de métodos y eventos para ampliar y personalizar las funcionalidades de chat para una mayor inmersión y compromiso del usuario, como entregar mensajes basados en requisitos personalizados, agregar permisos especiales o moderación a usuarios específicos y crear comandos personalizados para ejecutar acciones específicas.

Esta guía cubre el flujo de trabajo de chat y el uso de API para ampliar las funcionalidades del sistema de chat de texto en la experiencia. Para obtener más información sobre cómo personalizar la interfaz de usuario del chat, consulte Personalización del chat de texto en la experiencia .

API de chat y flujo de trabajo

El sistema de chat de texto en la experiencia consta de dos API mutables que puede extender para comportamientos de entrega de chat personalizados y objetos de datos inmutables que representan ciertos elementos de chat devueltos por API mutables.

APIs de chat mutables

El sistema de chat de texto en la experiencia proporciona las siguientes API mutables:

  • TextChatService Esta clase única es responsable de administrar el sistema de chat en general, incluida la administración del filtrado de mensajes de chat, la moderación y los permisos de usuario. Accesible desde el servidor, proporciona un conjunto de métodos y eventos que otras API de chat de texto o acciones de usuario pueden invocar a través del flujo de trabajo de entrega de chat.
  • TextChannel Esta clase representa un canal de chat de texto que pasa los mensajes de chat enviados por el usuario desde el cliente al servidor y los muestra a otros usuarios según los permisos. Puede usarlo para crear, modificar y administrar canais de texto en su experiencia. Además, puede crear múltiples canais de texto para agrupar a los usuarios para fines de chat, como permitir que los usuarios hablen con los miembros de su grupo que no son visibles para otros.
  • TextChatCommand Esta clase le permite crear comandos de chat personalizados que permiten a los usuarios invocar acciones o comportamientos específicos escribiendo caracteres especiales seguidos de un nombre de comando. Los comandos de chat son útiles para agregar funcionalidad e interactividad adicionales a la experiencia de chat. También puede usarlos para crear comandos de administrador para administrar y moderar su experiencia con atajos.

Objetos de chat inmutables

El sistema de chat de texto en la experiencia incluye los siguientes objetos inmutables con propiedades de solo lectura que no puede modificar:

  • TextChatMessage : Este objeto representa un solo mensaje de chat en un canal de chat de texto con información básica como el remitente del mensaje, el mensaje original, el mensaje filtrado y la marca de tiempo de creación.
  • TextSource : Este objeto representa a un remitente de mensajes en un canal de chat de texto con permisos detallados de un usuario en el canal. Si un usuario está en múltiples canais de chat de texto, también puede tener múltiples fuentes de texto.

Flujo de trabajo de chat de texto

A través del proceso de envío y entrega de mensajes de chat, los métodos, devoluciones de llamadas y eventos de clases de chat mutables que transportan objetos de chat inmutables tienen lugar en tres lados del aplicación de modeladocliente-servidor:

  • El cliente de envío, que es el dispositivo local de un usuario que envía un mensaje.
  • Recepción de clientes, que son dispositivos locales de otros usuarios.
  • El servidor, que es el procesador central para recibir el mensaje del cliente de envío y se encarga de la entrega a los clientes receptores.
A flowchart of the in-experience text chat workflow

Como muestra el diagrama de flujo, el sistema de chat de texto en la experiencia procesa un mensaje de chat a través de los siguientes pasos:

  1. Un usuario envía un mensaje desde su dispositivo local, activando el método TextChannel:SendAsync(). Este método procesa el mensaje y determina si es un comando de chat o un mensaje de chat normal.
  2. Si la entrada del usuario es un comando de chat, dispara el evento TextChatCommand.Triggered para realizar la acción que has definido para el comando.
  3. Si la entrada del usuario es un mensaje de chat normal, dispara TextChatService.SendingMessage para mostrar el mensaje original al remitente en el cliente de envío. Al mismo tiempo, el TextChannel:SendAsync() pasa el mensaje al servidor.
  4. El servidor dispara TextChannel.ShouldDeliverCallback para determinar si entregar el mensaje a otros usuarios según los permisos que configures y los requisitos de filtrado de la comunidad de Roblox.
  5. Si TextChannel.ShouldDeliverCallback determina que el mensaje es elegible para entregar a otros usuarios, el servidor aplica cualquier filtro y dispara TextChannel.OnIncomingMessage dos veces:
    1. La primera vez en el cliente de envío para indicar que el servidor está procesando el mensaje a través del evento TextChatService.MessageReceived. Esto también reemplaza el mensaje local en el cliente de envío con el mensaje entrante en la pantalla en los clientes de recepción. El mensaje puede ser idéntico si el mensaje original no requiere filtrado.
    2. La segunda vez está en el cliente receptor para activar el evento TextChatService.MessageReceived para mostrar el mensaje a otros usuarios.

Hay varias áreas del flujo de trabajo del sistema de chat que puede ampliar y personalizar el comportamiento, pero los pasos de cómo funciona el sistema siguen siendo los mismos.

Personalización de los comportamientos de entrega de mensajes

Además de seguir con el comportamiento de entrega de mensajes de chat predeterminado, puedes usar TextChannel.ShouldDeliverCallback para agregar permisos y comportamientos específicos para determinar si los usuarios pueden recibir un mensaje para un compromiso personalizado, como:

  • Soporte para chat basado en grupos entre los que solo los usuarios del mismo grupo o escuadrón pueden comunicarse.
  • Soporte para chat basado en la proximidad donde los usuarios solo pueden enviar mensajes a aquellos que están cerca de ellos.
  • Impedir que usuarios con ciertos atributos envíen mensajes a otros. Por ejemplo, no permitir que usuarios con estado de muerte envíen mensajes a usuarios vivos.
  • Se agregó la función de concurso de adivinación donde las respuestas correctas en el chat no son visibles para otros usuarios.

Soporte para chat basado en proximidad

El siguiente ejemplo muestra cómo implementar el chat exclusivo para usuarios que están cerca el uno del otro en ubicaciones. Se extiende la devolución de llamada con una función que usa TextSource para identificar las ubicaciones de un usuario que podría ser un potencial destinatario de mensajes. Si esta función devuelve falso, significa que el usuario localiza más lejos del rango válido preestablecido del remitente del mensaje, por lo que el sistema no entrega el mensaje a ese usuario.


-- Obtén el chat de texto y los servicios de jugadores
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Obtenga el canal de chat para el chat basado en la proximidad.
-- Este ejemplo usa el canal general. Puedes reemplazarlo con un canal dedicado.
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Define una función para obtener la posición del personaje de un usuario.
local function getPositionFromUserId(userId: number)
-- Obtén el jugador asociado con el userId dado.
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Si el jugador existe, obtén la posición de su personaje.
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Vuelve a la posición predeterminada si no puedes encontrar al jugador o personaje.
return Vector3.zero
end
-- Establece el ShouldDeliverCallback para el canal general para controlar la entrega de mensajes.
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Obtén las posiciones del remitente del mensaje y del objetivo.
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Si la distancia entre el remitente y el objetivo es inferior a 50 unidades, entregue el mensaje.
return (targetPos - sourcePos).Magnitude < 50
end

Creación de comandos personalizados

El sistema de chat de texto en la experiencia tiene comandos de chat incorporados para propósitos comunes, como crear canais de chat basados en equipos y reproducir emotede avatar. Puede habilitarlos configurando TextChatService.CreateDefaultCommands y TextChatService.CreateDefaultTextChannels como verdadero a través de scripts o en la configuración de Studio. También puede agregar comandos personalizados usando TextChatCommand. Los usuarios que envían un comando definido en la barra de entrada del chat activan una devolución de llamada definida por TextChatCommand.Triggered para realizar sus acciones personalizadas.

El siguiente ejemplo muestra cómo crear un comando de chat que permite a los usuarios aumentar o disminuir el tamaño de su personaje cuando ingresan /super o /mini.

  1. Inserta una TextChatCommand instancia dentro de TextChatService.

  2. Renombrarlo como SizeCommand .

  3. Establece su propiedad PrimaryAlias en /super y su SecondaryAlias en /mini .

  4. Inserta lo siguiente Script dentro de ServerScriptService para definir una devolución de llamada para el comando de chat que escala el tamaño del carácter.

    Guión

    local TextChatService = game:GetService("TextChatService")
    local Players = game:GetService("Players")
    local sizeCommand: TextChatCommand = TextChatService:WaitForChild("SizeCommand")
    sizeCommand.Triggered:Connect(function(textSource, message)
    local scaleMult = 1
    local messageWords = string.split(message, " ")
    if messageWords[1] == "/super" then
    scaleMult = 2
    elseif messageWords[1] == "/mini" then
    scaleMult = 0.5
    end
    local player = Players:GetPlayerByUserId(textSource.UserId)
    if player then
    local character = player.Character
    if character then
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    for _, child in humanoid:GetChildren() do
    if child:IsA("NumberValue") then
    child.Value *= scaleMult
    end
    end
    end
    end
    end
    end)

Migrando del chat heredado

Esta sección le ayuda a migrar del sistema de chat heredado proporcionando métodos alternativos para implementar funcionalidades y comportamientos de chat comunes utilizando el sistema de chat de texto en la experiencia.

Para cambiar el sistema de chat de una experiencia existente del sistema de chat heredado al sistema de chat de texto en la experiencia:

  1. En la ventana Explorador, seleccione TextChatService .

  2. En la ventana Propiedades, busque el menú desplegable ChatVersion y seleccione TextChatService .

Funcionalidades básicas de chat

Aunque ambos sistemas comparten las mismas funcionalidades básicas de chat, las implementaciones del sistema de chat de texto en la experiencia son en general más sostenibles y más fáciles de iterar.

FuncionalidadchatLegadochatde texto en la experienciaDiferencias
Enviar un mensaje de chatPlayers:Chat()TextChannel:SendAsync()El método TextChatService:SendAsync() admite funciones de chat más avanzadas, como el formato de texto enriquecido y la prioridad de mensajes. También incluye un filtro incorporado para ayudar a evitar que se envíen mensajes inapropiados.
Implementar llamadas de mensajesChat:InvokeChatCallback()
Chat:RegisterChatCallback()
TextChatService.SendingMessage
TextChatService.OnIncomingMessage
El sistema de chat heredado vincula una función a los eventos del sistema de chat para entregar mensajes. Los dos métodos del sistema de chat de texto en la experiencia tienen más flexibilidad y opciones de personalización.
Añadir comandos de chat personalizadosChatService/ChatCommand móduloTextChatCommandEl sistema de chat de texto en la experiencia tiene una clase dedicada que representa un comando de texto para la personalización en lugar de usar un módulo de chat heredado.
Mostrar un mensaje del sistemaBiblioteca de comandos de administrador personalizadaTextChannel:DisplaySystemMessage()
Desactivar chatConfiguración del juego en Studio y ChatWindow/ChatSettings módulo para ocultar la ventana de chatChatWindowConfiguration.Enabled

Filtrado de mensajes de chat

El sistema de chat de texto en la experiencia filtra automáticamente los mensajes de chat en función de la información de la cuenta de cada usuario, por lo que no es necesario implementar manualmente el filtrado de texto para todo tipo de mensajes de chat.

FuncionalidadchatLegadochatde texto en la experiencia
Filtrar Mensaje para Usuario IndividualChat:FilterStringAsync()no hay
Filtrar mensajes de radiodifusiónChat:FilterStringForBroadcast()no hay

Ventana de chat y chat de burbujas

Tanto la ventana de chat como el comportamiento del chat de burbujas y las opciones de personalización del sistema de chat de texto en la experiencia son idénticas a las del sistema de chat heredado. Dado que el sistema de chat heredado solo permite la personalización utilizando módulos de chat o el contenedor Players, el sistema de chat de texto en la experiencia proporciona Clasesdedicadas, ChatWindowConfiguration y BubbleChatConfiguration, para administrar todas las propiedades del chat y del chat de burbujas, respectivamente. Además, puede ajustar y obtener una vista previa de la apariencia y las propiedades del comportamiento del chat de burbujas utilizando la configuración de Studio en lugar de tener que programarlos todos/todas.