From d952979c5ab76a572da7cf9eede76095be0dbb88 Mon Sep 17 00:00:00 2001 From: WlodekM Date: Sat, 10 Aug 2024 15:29:07 +0300 Subject: wip ranks --- accounts.js | 9 +++++++++ commands.js | 4 ++-- ranks.js | 20 ++++++++++++++++++++ ranks/admin.json | 4 ++++ ranks/mod.json | 4 ++++ 5 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 ranks.js create mode 100644 ranks/admin.json create mode 100644 ranks/mod.json diff --git a/accounts.js b/accounts.js index 27de609..fe9d164 100644 --- a/accounts.js +++ b/accounts.js @@ -23,6 +23,15 @@ export function checkAccount(username) { return db[username] != undefined; } +/** + * 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 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 -- cgit 1.4.1-2-gfad0