Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

How do you use "raw_input" from Python in RBLX LUA?

 In Python, you use raw_input to give a prompt for somebody to answer and returns the data input by the person in a string. I want to do this but, in a roblox game chat box. Like, a bot asks you, "What is your name?" and you answer, "Caelyn". It will respond back saying something like "Hello, Caelyn". I'm sorry if I made this really confusing.

2 answers

✓ Accepted answer

There is a function of TextBoxes called FocusLost that will fire when the player stops typing in the box (focus shifts elsewhere). It supplies two arguments, if focus was lost due to the player pressing enter and the input object that caused focus to be lost (for this answer, I will only use the first of the two arguments).

Example: Prints out what the player types in the box when the enter key is pressed (with focus of the text box)

local textbox = script.Parent

textbox.FocusLost:connect(function(enterPressed)
	if enterPressed then
		print(textbox.Text)
	end
end)

So now lets write a similar function to that of python's raw_input for Roblox.

We are going to need to connect and disconnect the FocusLost event each time that we call the function, so it may be good to read over the RBXScriptSignal wiki page. So what we are going to do, is make the player focus on the textbox using the CaptureFocus function and then capture what they type using the FocusLost event. We will then disconnect the event and return the result.

I'm going to assume you have both a TextBox and TextLabel (or another TextBox) for user input and for the bot output.

Example: 'raw_input' function

local input = script.Parent.TextBox
local output = script.Parent.TextLabel

local function raw_input(prompt)
	local text = ""
	output.Text = prompt
	input:CaptureFocus()
	local event = input.FocusLost:connect(function(enterPressed)
		if enterPressed and input.Text ~= "" then
			text = input.Text
		else
			input:CaptureFocus()
		end
	end)
	repeat wait() until text ~= ""
	return text
end

local response = raw_input("What is your name?")
output.Text = "Hello, " .. response .. "!"

Don't

In Roblox, you don't have a CLI to wait for input from. Instead, you want to use GUI elements such as TextBoxes, which Players can type into, and then use an event to decide when to read the Text property from the target TextBox.

3 comments

0

Which is what they stated they wanted to do

1

Which is why I told them what they had to do.

0

Fair enough

This discussion is preserved as it was. New answers, comments, and votes are closed.