OP script
Key Required

OP script

Wordlytigaktigak 40.8K views 20 executesUpdated Jul 23, 2024
5.0/ 5(6 votes)
60100% Positive
Lua Script•231 lines (5356 chars)
-- [ open source since some retard is probaly going to deobfuscate it and it took 10 minutes to make ] --

local all_words_http = game:HttpGet("https://raw.githubusercontent.com/forgebin/roblox/main/wordlewords.txt")

-- there are tons of bugs inside of the god damn list the game uses.
local wordle_words = {}
for _, v in pairs(all_words_http:split(" ")) do
	if #v == 5 then
		table.insert(wordle_words, v)
	end
end
warn("Words added.", #wordle_words)

local transform = {
	["Bright green"] = "Correct letter!",
	["Dark Curry"] = "Correct letter but in the wrong place!",
	["Medium brown"] = "Not correct, not in the word."
}

local Words_Frame = game.Players.LocalPlayer.PlayerGui.ScreenGui.Words
local game_words = {}

local function get_word_answer(index)
	local ret = {}
	for _, v in pairs(Words_Frame:FindFirstChild(tostring(index)):GetChildren()) do
		if v:IsA("Frame") then
			local gradient = v["Frame"]
			table.insert(ret, BrickColor.new(gradient.BackgroundColor3))
		end
	end
	return ret
end

local function calculate_word_score(word, feedback)
	local score = 0
	local letter_counts = {}

	for i = 1, #word do
		local letter = word:sub(i, i)
		letter_counts[letter] = (letter_counts[letter] or 0) + 1

		if feedback[i] == BrickColor.new("Bright green") then
			score = score + 3
		elseif feedback[i] == BrickColor.new("Dark Curry") then
			score = score + 2
		elseif feedback[i] == BrickColor.new("Medium brown") then
			score = score - 1
		end
	end
	
	-- MURICA (FUCK YEAH!)
	score = score + (#word - #letter_counts)

	return score
end

local function filter_words(words, guess, feedback)
	local filtered = {}
	local must_contain = {}
	local must_not_contain = {}
	local exact_positions = {}

	for i = 1, #guess do
		local letter = guess:sub(i, i)
		if feedback[i] == BrickColor.new("Bright green") then
			exact_positions[i] = letter
			must_contain[letter] = (must_contain[letter] or 0) + 1
		elseif feedback[i] == BrickColor.new("Dark Curry") then
			must_contain[letter] = (must_contain[letter] or 0) + 1
		elseif feedback[i] == BrickColor.new("Medium brown") then
			if not must_contain[letter] then
				must_not_contain[letter] = true
			end
		end
	end

	for _, word in ipairs(words) do
		local match = true
		local letter_counts = {}

		for i = 1, #word do
			local letter = word:sub(i, i)
			letter_counts[letter] = (letter_counts[letter] or 0) + 1

			if exact_positions[i] and letter ~= exact_positions[i] then
				match = false
				break
			end
		end

		if match then
			for letter, count in pairs(must_contain) do
				if (letter_counts[letter] or 0) < count then
					match = false
					break
				end
			end
		end

		if match then
			for letter in pairs(must_not_contain) do
				if letter_counts[letter] and letter_counts[letter] > (must_contain[letter] or 0) then
					match = false
					break
				end
			end
		end

		if match then
			table.insert(filtered, word)
		end
	end

	return filtered
end

local function count_unique_letters(word)
	local unique = {}
	for i = 1, #word do
		unique[word:sub(i,i)] = true
	end
	return #unique
end

local function calculate_letter_frequency(words)
	local freq = {}
	for _, word in ipairs(words) do
		for i = 1, #word do
			local letter = word:sub(i,i)
			freq[letter] = (freq[letter] or 0) + 1
		end
	end
	return freq
end

local function choose_next_word(words, previous_guesses, turn)
	local letter_freq = calculate_letter_frequency(words)
	local best_word = nil
	local best_score = -math.huge

	for _, word in ipairs(words) do
		local is_previous_guess = false
		for _, prev_guess in ipairs(previous_guesses) do
			if word == prev_guess then
				is_previous_guess = true
				break
			end
		end

		if not is_previous_guess then
			local score = 0

			score = score + count_unique_letters(word) * 10

			for i = 1, #word do
				local letter = word:sub(i,i)
				score = score + (letter_freq[letter] or 0)
			end

			local letter_count = {}
			for i = 1, #word do
				local letter = word:sub(i,i)
				letter_count[letter] = (letter_count[letter] or 0) + 1
				if letter_count[letter] > 1 then
					score = score - 5
				end
			end

			if turn <= 2 then
				local common_letters = {a=1, e=1, i=1, o=1, u=1, r=1, s=1, t=1, l=1, n=1}
				for letter in word:gmatch(".") do
					if common_letters[letter] then
						score = score + 5
					end
				end
			end

			if score > best_score then
				best_word = word
				best_score = score
			end
		end
	end

	return best_word
end

local function input_guess(guess)
	for i = 1, #guess do
		local letter = guess:sub(i, i):upper()
		keypress(Enum.KeyCode[letter])
		task.wait(0.1)
		keyrelease(Enum.KeyCode[letter])
		task.wait(0.1)
	end
	keypress(Enum.KeyCode.Return)
	task.wait(0.1)
	keyrelease(Enum.KeyCode.Return)
end

local function play_wordle()
	local possible_words = wordle_words
	local guesses = {}

	for turn = 1, 6 do
		local guess = choose_next_word(possible_words, guesses, turn)
		table.insert(guesses, guess)

		input_guess(guess)

		task.wait(1)

		local feedback = get_word_answer(turn)

		local all_correct = true
		for _, color in ipairs(feedback) do
			if color ~= BrickColor.new("Bright green") then
				all_correct = false
				break
			end
		end

		if #feedback == 5 and all_correct then
			print("Word guessed correctly:", guess)
			return
		end

		possible_words = filter_words(possible_words, guess, feedback)
	end
end
play_wordle()

Features & Information

op auto type
#OP#auto#bot

Community Comments (5)

ThorTheMain*ThorTheMain*Jul 23, 2024(edited)

works perfectly fine using solara

sophiasmith3718sophiasmith3718Jul 23, 2024(edited)

I miss ur chess auto play script.. I hope you'll get back developing that script

tigaktigakJul 23, 2024(edited)

@sophiasmith3718 thank you for your support, but i don't think chess auto play will be released until i find a good obfuscator and when actual good executors come out so i can give the best performance.

sophiasmith3718sophiasmith3718Jul 23, 2024(edited)

@tigak that script was perfect man :( I really enjoy using the script because I beated all of my opponent.

marigoldmarigoldJul 24, 2024(edited)

@tigak did your server disband?