BotStop | Stop bots before they affect your game!

BotStop


Introduction

If you've played Roblox for a while, you've probably seen those bot messages that go along the lines of "Go to scamsitelinkgoeshere.org for free robux!" They can be really annoying. They also irritate me, so I decided to go create BotStop!

What is BotStop?

BotStop is a fully open-sourced Captcha-style system with the following features:
  • A minimalistic, simple UI accessible even to those with vision impairments
UI Sample

image

  • Simple, attribute-based customization
  • Plug-and-play installation
  • Fully open-sourced
  • Easy-to-read code, for those who want to fork this :slight_smile:
  • Near impossible to bypass

Installation

  1. Get the module here.
  2. Insert it into your game. You should end up with this:
    image
    Don’t worry about the fact that they’re named the same.
  3. Put the BotStop folder in ReplicatedStorage, the BotStop script into ServerScriptService, and the BotStop ScreenGui into StarterGui.
  4. That’s it! You’re ready to stop bots!

Configuration

If you select the BotStop script, you’ll see in the Properties window the Attributes for BotStop. They’re quite simple

CaptchaLength - How long the captchas generated will be
CaptchaLowercase - Will the captcha generated contain lowercase letters
CaptchaNumbers - Will the captcha generated contain numbers
CaptchaUppercase - Will the captcha generated contain uppercase letters
MaxCaptchaFailures - How many failures are allowed before it kicks you
DataStoreCaptchaCompletion - Will the captcha’s results be sent to DataStores

Q&A

Will the captchas be as impossible as the Roblox website captchas?

Nope! It’s impossible to fail provided that the submitted code is the same.

Can I edit this?

Yep! This is fully open-sourced! If you make an edited version, you’re free not to credit me. Just credit me if you use a stock build.

Where can I get the system?

I provided the link earlier, but if you need, here’s the link:
BotStop | Stop bots before they affect your game! - Roblox

Planned Features

  • HttpService-based captcha (If they finish the captcha in place A, there won’t be a captcha in place B.)
  • DataStore-based captcha so that if you finish it once, you won’t need to redo the captcha. Already implemented!
  • ViewportFrame-based rendering of codes to ensure minimal chance of code stealing

I’ll add to this as features are suggested.


Thanks for reading, and have a great day!

15 Likes

cool thing to see but how does it work and where to get “code”?

1 Like

This will be a huge help for many developers out there.

Finally, the annoying bots can’t do anything when they enter any games now. I will definitely be using this in my games.

Also wait, if players somehow mess tons of times do they get kicked?

1 Like

Why can’t you just have something that intercepts those scam messages? This isn’t all that effective in my opinion.

4 Likes

I have a quick question - bots usually join the game, then leave within 5-20 seconds. Why not just disable chat for the first 20 seconds a player joins? That seems a lot easier, and less annoying for every time a player joins. Think about a new player loading in for the first time - the second they get in, they will be faced with an annoying question. That isn’t a very good first impression.

I’m not trying to put your work down, I think it was very cool what you did. I’m just wondering, what is the point of a captcha, in comparison to other, easier methods?

7 Likes

Couldn’t the bot or whomever just inject a local script to enable the chat? It would bypass the captcha entirely. To be fair I’m not sure if there are bots out there capable of injecting scripts with an automated script injector.

game:GetService("RunService").Heartbeat:Connect(function()
    game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.All, true);
end

Nonetheless, this is a neat concept and reading the previous replies I hope this gets improved.

2 Likes

You can configure the maximum failures allowed.

Yes, I plan on quite a few improvements. Rest assured, many improvements should be delivered.

1 Like

Most of the code is in a central script called BotStop which goes in ServerScriptService. If you want to edit the client-side, it’s in the BotStop GUI.

If that’s your opinion, feel free to not use this! No one’s forcing you to! :smiley:

Indeed, I’m not using it. I’m merely giving a suggestion and an opinion.

Other people may want to use this, but I honestly don’t see much of a use for this in my games.

1 Like

Update!

Added a new feature: DataStore-based captcha result saving! Optional, via the DataStoreCaptchaCompletion attribute!


Bots do some crazy bypasses and some of the things they do is not fire the .PlayerAdded event. (not 100% sure, but I’ve heard they do not add the Player object at all and don’t run LocalScripts as well)
You also do some bad practices, while it’s not my place to judge, things such as connecting events inside other ones can easily be cincumverted by using a table.

Thanks for the heads up! This was intended to minimize the appearance of the chat messages that try to get you to go to such-and-such website. For those, I’m pretty sure they require a player object. I’m not sure though, because I don’t make bots.

1 Like

The clients that bots use are the literal bone for the Roblox Client to work; I’m obviously no bot developer or a reverse engineerer but with insights on how the client works I can guess they either:

  1. Interface with the Roblox C++ code for sending messages;
  2. Inject and execute code that uses a low-level Luau API to send the chat message (something way more low than firing the remote that sends messages);
  3. Send a POST message with the message format to the actual game server;

Those are some things off the top of my head; this is just to say that there is actually no way to prevent bots that use those methods that the developer cannot prevent/interact with.

I forgot to mention, but when I said I’m not 100% sure I meant the fact that some bots might not do this, and this will work (looking at your scripts, the client disables the CoreGui and do not re-enable it until the server validates it, which is never since the .PlayerAdded event is not run!)

Wow, that’s scary to even consider. I hope this isn’t true, making our games secure is hard enough without bots in the picture.

1 Like

You might not want to make a connection everytime a player joins on an object that’s not being destroyed anytime soon.
image

Thanks! Made note of that. Will be fixed hopefully in V3. Would disconnecting it be a good fix?

1 Like

Yeah, disconnect those whenever the player leaves.

1 Like

Update

To deal with issues about nested connections, I've had the system disconnect the nested connections.