BlueJay - Twitter Codes made easy

I’m sorry, I just made one post giving an alternative to under 16s.

2 Likes

Late reply, but I must say I believe BlueJay is adding more products from the looks of their website, so I think this is their first product out of a few! And in my opinion, it’ll be helping a lot of smaller developers who aren’t as experienced or bothered to script a custom system.

3 Likes

I’ve told this to many people. Using services such as Trello, Google Docs, Google Spreadsheets, or any other service that is meant specifically for simpler project management is not a database.

You should use a real database such as MySQL, NoSQL, or something like MongoDB/Firebase.

3 Likes

I’ll say this in the best way I can:

THANK YOU

Doesn’t make it useful and using an array of codes is much easier and much more reliable. As useful as you want to make “BlueJay” sound, it doesn’t justify the fact that it’s insanely overkill and has no benefits over the typical Array code storage.

This looks nice and simple for people that aren’t very experienced in scripting.

There is one issue though that bothers me quite a bit, in the code example on the website, the client is responsible for validating the code, and the server just gives money based on the remote event.

Any inexperienced developer will just simply copy paste the code and modify it to their need, which lets exploiters have full access to redeeming any code they want as long as they know how the codes are set up (which they can find out by sending and intercepting any public code).

Also, roblox lua includes string:split(delimeter), so no need for the large string splitting function.

2 Likes

Actually no! The client API sends a request through a RemoteFunction, which is then parsed on the server.

Odd, I tried doing that. Thanks!

Quick update everyone!

I have finally changed the age requirement from 16 to whatever your country requires (US/Canada is 13+, Germany is 16+, etc)

Privacy Policy is also updated.

(CC @R0bl0x10501050, @Ty_Scripts)

2 Likes

On the page that shows example code you have this snippet here

script.Parent.Buttons:WaitForChild("Confirm").MouseButton1Click:connect(function()
    local redeemed, codeChanged = BlueJay.RedeemCode(CodeText.Text)
    if redeemed then
        script.Parent.Buttons.Confirm.Text = 'Redeemed!'
        TestRemote:FireServer(codeChanged)
    else
        script.Parent.Buttons.Confirm.Text = 'Error Redeeming!'
    end
    wait(5)
    script.Parent.Buttons.Confirm.Text = 'CONFIRM'
end)

as you can see, the client first calls

BlueJay.RedeemCode(CodeText.Text)

Which returns redeemed and the internal code from the website

The client then sends the internal code onto the server where it parses it

Remote.OnServerEvent:Connect(function(player, code)     
    -- Parse the code    
    -- Ex: coins_200000 parses to 200,000, which then gets added to the leaderstats Money.    
    local value = split(code.value, '_')    
    if value[1] == 'coins' then        
        player.leaderstats.Money.Value += tonumber(value[2])    
    end
end)

Using an exploit a client could simply call the remote and send any code they wanted, they could send for eample “coins_10000000000”

3 Likes

Thank you so much for notifying me of this issue!

I have proceeded to fix it by modifying the example code:

local BlueJay = game.ServerScriptService:WaitForChild("BlueJay")
local MainModule = BlueJay:WaitForChild("MainModule")
local BlueJayAPI = require(MainModule.Scripts.Server.API)

local TestRemote = game.ReplicatedStorage.Test

TestRemote.OnServerEvent:Connect(function(player, code)	
	if BlueJayAPI:HasRedeemedCode(code, player) then		
		local value = code.value:split('_')
		if value[1] == 'coins' then
			player.leaderstats.Money.Value += tonumber(value[2])
		end
	end
end)

The documentation is also updated.

1 Like

This is a comment criticizing the twitter code system. I also talked about how you would make the ultimate hands free system, however that is no longer possible (atleast in the way I intended) since Twitter has locked their API to require $100 USD / month.

Just stepped upon this… I dont see how “You don’t have to even touch Roblox Studio to add new codes. It’s as simple as visiting our dashboard, and adding a new code” is a selling point, You could easily make it so you dont have to touch anything except twitter, a script or module inside the game that checks the most recent twitter post for a code, getting “code:” and removing all text before it… as long as you put the code at the end of the twitter post, and if the most recent twitter post includes a code it will set it into a datastore with a table that is serialized, but save the data under a key that will never be generated for a player, you now have a datastore syncing across all servers… as long as the servers check before adding data. This approach will work perfectly for any twitter tweets are made after the system was implemented for previous codes you’d have to manually add them, but this system should work flawlessly after install, you would only have to tweet.

Criticism ^

Personally, I see no need for a middleman like this project.

this doesn’t have much use as I see, I think it makes it harder, think about it, you need to be 16+ to use the website which is terrible, all of this verification just for a Twitter code system? While you could just store codes in a datastore and grab it whenever needed, or directly grab it and every 60 seconds you can regrab the data, how to edit it in live? Go to studio and use some datastore plugin, edit the data.

Ik it’s hard to setup, but it’s harder with this website as to make a http request is not easy thus you will have to worry about that 600 requests per minute limit. Not only, httpservice has a limit, but this website might also have it, well actually will.

Just use datastores, it’s simpler and you don’t need to fill requirements for a Twitter code system

“You don’t need to access studio to add a code”
well I have to access your website which takes too long to load.

Also, how limited this is, you can’t award more stuff like items, you also can’t award stuff like “gems AND coins”, it’s like your forced to use only one reward.