Due to the shutdown of Session 42 Studios, this module no longer receives updates and is no longer supported. Free support is no longer available.
Model | API documentation | Testing place
What is Atherum?
Atherum is a brand-new ROBLOX alternate account detection system developed and maintained by Session 42 Studios. Atherum aims to detect as many alternate accounts as possible with a high-efficiency rate.
We are confident that 80-90% of ROBLOX’s ToS-breakers, such as exploiters, trollers, spammers, raiders, bots, etc. are alternate accounts. People have been trying to combat those people with different methods, but what if we fight the source of it? What if we detect those accounts before they even get to try to ruin the gameplay?
Protect yourself against;
- botnets
- spammers
- exploiters
- trollers
- attackers
- lag bombs
- more
How it works
Well, we can’t magically know which accounts are real and which are alternate accounts, but we try our best. We’ve noticed that many developers use age checks only to disallow new accounts to join their game, but we believe this isn’t enough. Many “alt generator” communities provide accounts with the creation year in 2017, which would bypass the developer’s protection. It was pretty strange to find out that nobody bothers to fight alternate accounts correspondingly, so we decided to make the first step into this.
Atherum runs a set of verification checks whenever a player joins the game. It’s not only about the account age. There are several checkpoints with different importance levels that the developer can manually change, enable, or disable. After all, this is the only way developers can use for partially detecting alternate accounts at the current time.
There can be false positives or false negatives. Obviously.
How to get and install
Atherum is a free and open-sourced product. You can get it on ROBLOX’s developer marketplace here:
Once you have the model in your Inventory, drag and drop it and ensure it stays in ServerScriptService
. After that, open the Atherum folder and locate the “Settings” module. Double-click to open it.
Here you can find a lot of configurable settings to make Atherum work as intended in your game. You can choose to enable or disable auto-kicking, log actions, and more. Everything is explained in a comment on the right side of the feature.
It is mandatory that you enable
HTTP Requests
andStudio Access to API Services
in the Game Settings tab. Atherum uses Roblox’s web API for some detections. If the permissions are not granted, Atherum will not run.
API documentation
One of Atherum’s unique features is that it allows you to customize what happens when a player gets detected as an alt. You can choose to teleport them, ignore them, delete them, and much more! Here’s a list of APIs that Atherum has:
Before being able to use the APIs, you need to require the API module:
local AtherumAPI = require(game:GetService('ServerScriptService'):WaitForChild('Atherum Anti-Alt'):WaitForChild('API'))
Full API documentation
This is how to properly call the Atherum API functions:
Player detected event:
This is not part of the API module, but a BindableEvent that is placed under it.
Access it by going:
game:GetService("ServerScriptService"):WaitForChild("Atherum Anti-Alt"):WaitForChild("API"):WaitForChild("UserDetected").Event:Connect(function(player) -- your action here end)
Check if a player was detected as an alt:
AtherumAPI:IsPlayerAlt(player)
-
player
(mandatory) should be a player instance. It should contain the player itself, and not the player name.
Response:
-
bool
(true/false), true means the player was counted as an alternate account, false means the player was not counted as an alternate account.
The IsPlayerAlt determination is based on the "Min. detection score" that you can modify in the system Settings.
Get a player's fraud score:
AtherumAPI:GetPlayerScore(player)
-
player
(mandatory) should be a player instance. It should contain the player itself, and not the player name.
Response:
-
number
(number), the higher it is, the more checks were failed.
The GetPlayerScore determination is based on the custom importance scores that you can modify in the system Settings.
Get the number of checks a player passed:
AtherumAPI:GetNumberOfPassedChecks(player)
-
player
(mandatory) should be a player instance. It should contain the player itself, and not the player name.
Response:
-
number
(number), the total number of checks a player passed.
This will not return the list of the passed checks.
Get a list of the checks for a specific player:
AtherumAPI:GetPlayerCheckStatus(player)
-
player
(mandatory) should be a player instance. It should contain the player itself, and not the player name.
Response:
-
list
(array), a list of all checks (names) and if they were passed/failed.
Get a list of a player's failed checks:
AtherumAPI:GetPlayerFailedChecks(player)
-
player
(mandatory) should be a player instance. It should contain the player itself, and not the player name.
Response:
-
list
(array), a list of all checks (names) that the specified player failed.
Get a list of a player's passed checks:
AtherumAPI:GetPlayerPassedChecks(player)
-
player
(mandatory) should be a player instance. It should contain the player itself, and not the player name.
Response:
-
list
(array), a list of all checks (names) that the specified player passed.
Get the saved data of a specific server:
AtherumAPI:GetServerSavedData(serverID)
-
serverID
(mandatory) should be a string. It should contain the server ID (game.JobId) of the server you wish to find. Should NOT be a number.
Response:
-
list
(array), a list of all players who were checked in that server and their passed/failed checks, score, and more.
This will only work if DataStore is enabled in the system Settings.
You may use this in your own scripts to create your custom logic.
Note: the module can only be used in server-side scripts.
Remember that attempting to get API data immediately upon player joining might result in an error or
nil
response. Atherum requires a few seconds before updating the saved data.
Showcase
Video:
Testing/showcase portal:
Contribution
I guess there are two ways anyone could contribute:
- Suggestions/feedback/bug reports/etc.
Help us understand how we’re doing, or what to do next. Let us know if there are bugs or things we can improve. - Improve Atherum yourself.
Since it’s open-source, you can make changes yourself. If you believe you improved Atherum, make your version of the source code public (while still giving attribution).
License and usage
You are free to use Atherum at no charge. You are free to edit Atherum’s root files.
Atherum is licensed under the Apache 2.0 open-source software license. Read it here: here (S42 website) or here (opensource.org).
Final notes
As mentioned before, false positives and false negatives are to be expected. We cannot magically know if the account joining is an alternate account or not. You can customize the system’s sensitivity yourself by changing the importance of the checks. We’re always looking forward to improving Atherum and making it more reliable. If you wish to support the cause, join our communications server or direct message me on the DevForum with ideas or pieces of code you may have for us.
Credits
- InfiniteBlackPIX - main developer
- Shongton - community manager and project intern
Update log
v1.1 - 20/09/2023
[/] Updated the "verified account detection". Atherum now uses the IsVerified() function instead of checking by Spacial Voice.
Useful links
- Session 42 Knowledge base; https://help.session42studios.com/
- Atherum model link; https://www.roblox.com/library/10427478524/
- API documentation (S42KB); Atherum API : Session 42 Studios
- Our communications server; Discord