diff options
author | WlodekM <[email protected]> | 2024-08-10 15:29:07 +0300 |
---|---|---|
committer | WlodekM <[email protected]> | 2024-08-10 15:29:07 +0300 |
commit | d952979c5ab76a572da7cf9eede76095be0dbb88 (patch) | |
tree | aabc417ea0e237d260dba9dd8d8cba4a48f12918 | |
parent | 2153957b0905cdda3d74c4e062bb75dbd96f96e7 (diff) |
wip ranks
-rw-r--r-- | accounts.js | 9 | ||||
-rw-r--r-- | commands.js | 4 | ||||
-rw-r--r-- | ranks.js | 20 | ||||
-rw-r--r-- | ranks/admin.json | 4 | ||||
-rw-r--r-- | ranks/mod.json | 4 |
5 files changed, 39 insertions, 2 deletions
diff --git a/accounts.js b/accounts.js index 27de609..fe9d164 100644 --- a/accounts.js +++ b/accounts.js @@ -24,6 +24,15 @@ export function checkAccount(username) { } /** + * Does a loose check on if the account exists + * @param {String} username Username to check + * @returns {Boolean} + */ +export function checkAccountLoose(username) { + return Object.keys(db).find(n => n.toLowerCase() == username.toLowerCase()); +} + +/** * Create an account * @param {String} username The username * @param {String} password The password diff --git a/commands.js b/commands.js index 456c6a7..9cc95f3 100644 --- a/commands.js +++ b/commands.js @@ -118,8 +118,8 @@ export const commands = { if (args[0].length < 3) return user.socket.send(`Username too short!`); if (args[0].length > 20) return user.socket.send(`Username too long!`); if (args[1].length < 6) return user.socket.send(`Password too short!`); - if (server.accounts.checkAccount(args[0])) return user.socket.send(`User with username "${args[0]}" already exists!`); - server.accounts.createAccount(args[0], args[1]); + if (server.accounts.checkAccountLoose(args[0])) return user.socket.send(`User with username "${args[0]}" already exists!`); + server.accounts.createAccount(args[0], args[1], args[0] == server.config.owner); if (server.config.saveIP) server.accounts.logIP(args[0], user.ip); sendInChannel(`${user.name()} logged in as ${args[0]}!`, user.channel); user.username = args[0]; diff --git a/ranks.js b/ranks.js new file mode 100644 index 0000000..6f7d9b4 --- /dev/null +++ b/ranks.js @@ -0,0 +1,20 @@ +import fs from 'fs'; +import path from 'path'; +import * as accounts from './accounts.js' +import { commands } from "./commands.js"; + +export function getRankData(name) { + if (!/^[^\/\\]*$/g.exec(name)) return null; + if (!fs.existsSync(path.join('ranks', `${name}.json`))) return null; + return JSON.parse(fs.readFileSync(path.join('ranks', `${name}.json`))) +} + +export function canUserDoCommand(command, username, guest=false) { + let permissionLevel = 0; + if (!guest) { + let accountData = accounts.getAccountData(username); + if (getRankData(accountData?.admin ? 'admin' : accountData?.rank)) permissionLevel = getRankData(accountData?.admin ? 'admin' : accountData?.rank).level; + } + // Banned users can be given a rank with negative permissions so that no commands can be ran + return permissionLevel >= commands[command]?.level ?? 0 +} \ No newline at end of file diff --git a/ranks/admin.json b/ranks/admin.json new file mode 100644 index 0000000..68ecc8a --- /dev/null +++ b/ranks/admin.json @@ -0,0 +1,4 @@ +{ + "prefix": "[ADMIN] ", + "level": 100 +} \ No newline at end of file diff --git a/ranks/mod.json b/ranks/mod.json new file mode 100644 index 0000000..d88fce5 --- /dev/null +++ b/ranks/mod.json @@ -0,0 +1,4 @@ +{ + "prefix": "[MOD] ", + "level": 75 +} \ No newline at end of file |