Inspired by Ruben Sim's EASI, HASI is a Roblox user flagging system that allows you to flag users for various reasons, and then check if a user is flagged or not. The system is made up of a Node.js server, a Roblox script, and a Python admin panel. The server uses a SQLite database to store the flagged users and their descriptions. The Roblox script is used to check if a user is flagged or not, and the Python admin panel is used to manage the flagged users.
There are multiple parts of the project:
| File | Usage |
|---|---|
| admin-gui.py | [DEPRECATED, use webclientbeta or CLI (/client/)] A vibecoded admin panel made in Python that uses PySimpleGUI |
| check.lua | The roblox script itself, that you put in serverscriptservice, it maybe will work with the new """"privacy"""" update, But i just told AI to not use the direct id grabbing and get it from the username since i only know JS |
| /client/ | A command line interface that allows you to manage the flagged users with API keys, and check if a user is flagged or not. It uses the server's API to communicate with the server. |
| /webclientbeta/ | A web client that allows you to manage the flagged users with username+passwords, and check if a user is flagged or not. It uses the server's session system to communicate with the server. |
| Everything else | The core Node.js server |
- Install Node.js if you haven't already.
- Navigate to the server directory.
- Run
npm installto install dependencies. - Run
npm startto start the server.
The session system uses short-time tokens, and username+passwords instead of API keys. The client folder is located at: /webclientbeta/
- Navigate to the
/webclientbeta/directory. - Change the
config.jsonfile to set the server URL. - Make sure the HASI server is running.
- Open the
index.htmlfile in a web browser thru ex. Live Server, it won't work directly. - By default, the username is
adminand the password isadminpassword. You can change this in the dashboard after logging in. The password is hashed and stored in the database, so make sure to change it to something secure.
NOTE: The database is autocreated when the server starts
You need to make a GET request to the endpoint /user/<username> or /id/<id> The username will contact Roblox's API to get the ID, and then check if the ID is in the database. If it is, it will return the data, if not, it will return a message saying the user is not in the database. The ID endpoint will just check if the ID is in the database and return the data if it is, or a message saying the user is not in the database if it isn't.
GET /user/Roblox/
{"message":"No flagged entries found for this user."}
GET /user/Artemo8844/
{"id":51,"uid":7299226743,"description":"Flinging"}
Yes, it's a real user that sits in the public database, and yes, the description is real too. And yes, this idiot exploited on a main account and is still not banned.
To check how many users are flagged, you can make a GET request to the endpoint /count and it will return the number of flagged users in the database.
GET /count/
{"count":70}
To add a flagged user, you need to make a POST request to the endpoint /flag with the write permission. You need to provide the username, description, and API key in the request body.
POST /flag
{
"username": "Artemo8844",
"description": "Flinging",
"key": "your_api_key_here"
}Response (success):
{
"message": "User flagged successfully.",
"uid": 7299226743
}To modify a flagged user's description, you need to make a PATCH request to the endpoint /flag/<uid> with the modify permission. You need to provide the new description and API key in the request body.
PATCH /flag/7299226743
{
"description": "Flinging, ban evasion",
"key": "your_api_key_here"
}Response (success):
{
"message": "Flagged entry updated successfully."
}To delete a flagged user, you need to make a DELETE request to the endpoint /flag/<uid> with the delete permission. You need to provide the API key in the request body.
DELETE /flag/7299226743
{
"key": "your_api_key_here"
}Response (success):
{
"message": "User marked removed (uid set to 0)."
}There are 2 tables, the flagged, and API keys.
This is how a table looks like in the database:
| id | uid | description |
|---|---|---|
| 1 | 1234567890 | Exploiting |
| 2 | 9876543210 | Scamming |
| 3 | 0 | - |
The columns are as follows:
- id: The ban id, this is the primary key and is auto-incremented.
- uid: The Roblox user id, this is the unique identifier for the user.
- description: The reason for the ban, this is a text field that can be empty, but should provide context for the ban. (NOTE: Please don't use the description field for personal info, and to for example ban only for the description "Flying", because text can sometimes be misleading, misspelled, or altered to provide more context)
This is how a table looks like in the database:
| perms | key |
|---|---|
| ["write","modify"] | 1234567890abcdef |
| ["write","modify","delete"] | habibidonpollo21435eytu |
The columns are as follows:
- perms: The permissions for the key, this is a JSON array of strings that can be "read", "write", "modify", or "delete". The permissions are as follows:
- write: Allows the user to write data to the database.
- modify: Allows the user to modify descriptions in the database.
- delete: Allows the user to delete data from the database.
If you want to contribute to the project, You can make an issue or a pull request. Please make sure to follow the code style and conventions used in the project. If you want to add a new feature, please make sure to discuss it with me first.
I want for people to help me with:
- Optimization
- Security
- Code style and conventions
If you want to have the basics:
- A domain
- A server, cloud, or self-hosted. Instead of directly port-fowarding the server, you can use a reverse proxy to foward the requests, you can use:
- Nginx
- Caddy
- Microsoft IIS URL Rewrite