Loops are actually worse for this specific case scenario and I’m not too sure how what I posted is relevant to the question being asked. Please use what I post carefully.
In the case of needing to connect chat functions, you should be using an event-based system. I don’t know what the problem is in the OP or why PlayerAdded is supposedly problematic but that’s the proper way to be writing chat-based systems.
local Players = game:GetService("Players")
local function playerAdded(player)
if string.match(string.lower(message), "hi") then
for _, player in ipairs(Players:GetPlayers()) do