Hey, I want to know how I’d make a chat argument kinda thing.
Basically I want to detect what the message is after the players name is said. I believe string.sub() is an option but I simply don’t know how to use it very efficiently, and the wiki didn’t make much sense either.
My code:
local function kick(target, message)
target:Kick('You have been kicked. Reason: ' .. message)
end
game.Players.PlayerAdded:Connect(function(plr)
plr.Chatted:Connect(function(msg)
if msg:sub(1,6):lower() == '!kick ' then
kick(game.Players[msg:sub(7)], IDontKnowHowToSeeWhatsAfterTheName)
end
end)
end)
That wouldnt work, as I’d have to type the players name, and I have no way of seeing (from my current knowledge) when their name ends, to then send the message.
I’ve tried to figure out a solution in studio, and I found a problem: It is taking the entire argument after the !kick even if it has spaces. To make this work, you’d need to figure out the length of the player’s name, then cut off the rest of the message.
This, unfortunately didn’t work, as the error said “wayIxn Test” is not a valid member of players.
My current code:
local function kick(target, message)
target:Kick('You have been kicked. Reason: ' .. message)
end
game.Players.PlayerAdded:Connect(function(plr)
plr.Chatted:Connect(function(msg)
if msg:sub(1,6):lower() == '!kick ' then
local playerKicked = msg:sub(7)
local restofMsg = msg:sub(playerKicked:len() + 7)
kick(game.Players[playerKicked], restofMsg)
end
end)
end)
In order to do this, I recommend that you break up
the string into all of the different words after you have confirmed the string is a command. You can do this as shown:
local Prefix = ";"
Player.Chatted:Connect(function(Message)
local IsCommand = string.match(Message,"^"..Prefix)
if IsCommand then
Message = string.gsub(Message,IsCommand,"",1) --Removes the prefix
else
--Not a command
end
end)
Once you have determined that your message is a command, you can split it into different words (This goes inside the IsCommand if statement):
local Arguments = {}
for Argument in string.gmatch(Message,"[^%s]+") do
table.insert(Arguments,Argument)
end
Now, to answer your question, you can get each individual word by doing something like this:
local Word = Arguments[2] --Would get the second word in the original string
Thanks! I’ll be trying to maneuver my way around this and attempt to get it working! If I don’t I’ll probably ask a question, if you don’t mind about what I’m having troubles with.
There is no reason that is shouldn’t work because I think I’ve tried it myself a while ago. I should also mention that the number used to index Arguments relates to the original word order.