summary refs log tree commit diff
path: root/commands.js
diff options
context:
space:
mode:
Diffstat (limited to 'commands.js')
-rw-r--r--commands.js207
1 files changed, 130 insertions, 77 deletions
diff --git a/commands.js b/commands.js
index 3fbd63e..456c6a7 100644
--- a/commands.js
+++ b/commands.js
@@ -1,108 +1,161 @@
-import fs from "fs"
+import fs from "fs";
 
 export const commands = {
-    'join': {
-        name: 'join',
+    join: {
+        name: "join",
+        usage: "/join <channel>",
+        description: "Join a different channel",
         aliases: [],
-        command: function({user, server, args, sendInChannel}) {
-            if(args.length < 1) return user.socket.send("Error: You need to specify a channel (example: /join #home).");
-            if(!args[0].startsWith("#")) return user.socket.send("Error: Channel not found, run /channels to see a list of channels.");
-            if(!server.channels.includes(args[0].replace("#", ""))) return user.socket.send("Error: Channel not found, run /channels to see a list of channels.");
-            sendInChannel(`${user.name()} left #${user.channel}.`, user.channel)
+        command({ user, server, args, sendInChannel }) {
+            if (args.length < 1) return user.socket.send("Error: You need to specify a channel (example: /join #home).");
+            if (!args[0].startsWith("#")) return user.socket.send("Error: Channel not found, run /channels to see a list of channels.");
+            if (!server.channels.includes(args[0].replace("#", ""))) return user.socket.send("Error: Channel not found, run /channels to see a list of channels.");
+            sendInChannel(`${user.name()} left #${user.channel}.`, user.channel);
             user.channel = args[0].replace("#", "");
-            console.info(`${user.name()} went to #${user.channel}`)
-            sendInChannel(`${user.name()} joined #${user.channel}!`, user.channel)
-        }
+            server.updateUsers();
+            console.info(`${user.name()} went to #${user.channel}`);
+            sendInChannel(`${user.name()} joined #${user.channel}!`, user.channel);
+        },
     },
-    'channels': {
-        name: 'channels',
+    channels: {
+        name: "channels",
+        usage: "/channels",
+        description: "Shows all channels",
         aliases: [],
-        command: function({user, server}) {
-            user.socket.send(`Channels:\n${server.channels.map(ch => ` * #${ch}`).join("\n")}`)
-        }
+        command({ user, server }) {
+            user.socket.send(`Channels:\n${server.channels.map((ch) => ` * #${ch}`).join("\n")}`);
+        },
     },
-    'nick': {
-        name: 'nick',
-        aliases: ['nickname', 'name'],
-        command: function({user, server, args, sendInChannel}) {
-            if(args.length < 1) return user.socket.send("Error: You need to specify a nick (example: /nick WlodekM).");
-            if(args[0].length < 3 ) return user.socket.send("Error: Nick too short.");
-            if(args[0].length > 20) return user.socket.send("Error: Nick too long.");
-            if(Object.values(server.users).find(usr => usr.username == args[0])) return user.socket.send("Error: Nick already used.");
-            sendInChannel(`${user.name()} changed their nick to ${args[0]}!`, user.channel)
+    nick: {
+        name: "nick",
+        usage: "/nick <nickname>",
+        description: "Change your nickname",
+        aliases: ["nickname", "name"],
+        command({ user, server, args, sendInChannel }) {
+            if (args.length < 1) return user.socket.send("Error: You need to specify a nick (example: /nick WlodekM).");
+            if (args[0].length < 3) return user.socket.send("Error: Nick too short.");
+            if (args[0].length > 20) return user.socket.send("Error: Nick too long.");
+            if (Object.values(server.users).find((usr) => usr.username == args[0])) return user.socket.send("Error: Nick already used.");
+            sendInChannel(`${user.name()} changed their nick to ${args[0]}!`, user.channel);
+            server.updateUsers();
             user.nickname = args[0];
-        }
+        },
     },
-    'about': {
-        name: 'about',
+    about: {
+        name: "about",
+        usage: "/about",
+        description: "Shows info about wsChat",
         aliases: [],
-        command: function({user, args, sendInChannel}) {
-            user.socket.send(`wsChat v${JSON.parse(String(fs.readFileSync("package.json"))).version}\nGithub: https://github.com/WlodekM/wsChat`)
-        }
+        command({ user, args, sendInChannel }) {
+            user.socket.send(`wsChat v${JSON.parse(String(fs.readFileSync("package.json"))).version}\nGithub: https://github.com/WlodekM/wsChat`);
+        },
     },
-    'whois': {
-        name: 'whois',
+    whois: {
+        name: "whois",
+        usage: "/whois <username>",
+        description: "Shows info about a person",
         aliases: [],
-        command: function({user, server, args}) {
-            if(args.length < 1) return user.socket.send('Please provide username');
-            if(!Object.values(server.users).find(usr => usr.username == args[0])) return user.socket.send('User not found');
-            let userFound = Object.values(server.users).find(usr => usr.username == args[0])
-            userFound.id = Object.keys(server.users).find(usr => server.users[usr].username == args[0])
-            user.socket.send(`${userFound.username}\nClient: ${userFound.client ?? "<Unknown>"}\nID: ${userFound.id}`)
-        }
+        command({ user, server, args }) {
+            if (args.length < 1) return user.socket.send("Please provide username");
+            if (!Object.values(server.users).find((usr) => usr.username == args[0])) return user.socket.send("User not found");
+            let userFound = Object.values(server.users).find((usr) => usr.username == args[0]);
+            userFound.id = Object.keys(server.users).find((usr) => server.users[usr].username == args[0]);
+            user.socket.send(`${userFound.username}\nClient: ${userFound.client ?? "<Unknown>"}\nID: ${userFound.id}`);
+        },
     },
-    'users': {
-        name: 'users',
+    users: {
+        name: "users",
+        usage: "/users",
+        description: "Shows all users online",
         aliases: [],
-        command: function({user, server, args}) {
-            user.socket.send(`Users${args[0] != "global" ? ` in ${user.channel}` : ""}:\n${Object.values(server.users).filter(usr => (usr.channel == user.channel) || args[0] == "global").map(usr => ` * ${usr.name()}`).join("\n")}`)
-        }
+        command({ user, server, args }) {
+            user.socket.send(
+                `Users${args[0] != "global" ? ` in ${user.channel}` : ""}:\n${Object.values(server.users)
+                    .filter((usr) => usr.channel == user.channel || args[0] == "global")
+                    .map((usr) => ` * ${usr.name()}`)
+                    .join("\n")}`
+            );
+        },
     },
-    'help': {
-        name: 'help',
-        aliases: ['?'],
-        command: function({user, args, commands}) {
-            user.socket.send(`Commands available:\n${Object.values(commands).map(cmd => `* /${cmd.name} (Aliases: ${(cmd.aliases.join(", ")) || "<None>"})`).join("\n")}`)
-        }
+    help: {
+        name: "help",
+        usage: "/?",
+        description: "Shows all commands",
+        aliases: ["?"],
+        command({ user, args, commands }) {
+            user.socket.send(
+                `Commands available:\n${Object.values(commands)
+                    .map((cmd) => `* /${cmd.name} (Aliases: ${cmd.aliases.join(", ") || "<None>"})`)
+                    .join("\n")}`
+            );
+        },
     },
-    'login': {
-        name: 'login',
-        aliases: ['signin'],
-        command: function({server, args, user, sendInChannel}) {
-            if(args.length < 2) return user.socket.send(`Usage: /login <username> <password>`);
-            if(!server.accounts.checkAccount(args[0])) return user.socket.send(`Account "${args[0]}" not found!`);
-            if(!server.accounts.checkPassword(args[0], args[1])) return user.socket.send(`Password incorrect.`);
+    login: {
+        name: "login",
+        usage: "/login <username> <password>",
+        description: "Log into an account",
+        aliases: ["signin"],
+        command({ server, args, user, sendInChannel }) {
+            if (args.length < 2) return user.socket.send(`Usage: /login <username> <password>`);
+            if (!server.accounts.checkAccount(args[0])) return user.socket.send(`Account "${args[0]}" not found!`);
+            if (!server.accounts.checkPassword(args[0], args[1])) return user.socket.send(`Password incorrect.`);
+            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];
             user.nickname = "";
             user.guest = false;
-            sendInChannel(`${user.name()} logged in as ${args[0]}!`, user.channel)
-        }
+            user.admin = server.accounts.getAccountData(user.username).admin ?? false;
+            server.updateUsers();
+        },
     },
-    'register': {
-        name: 'register',
-        aliases: ['signup'],
-        command: function({server, args, user, sendInChannel}) {
-            if(args.length < 2) return user.socket.send(`Usage: /register <username> <password>`);
-            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!`);
+    register: {
+        name: "register",
+        usage: "/register <username> <password>",
+        description: "Make a new account",
+        aliases: ["signup"],
+        command({ server, args, user, sendInChannel }) {
+            if (args.length < 2) return user.socket.send(`Usage: /register <username> <password>`);
+            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.config.saveIP) server.accounts.logIP(args[0], user.ip);
+            sendInChannel(`${user.name()} logged in as ${args[0]}!`, user.channel);
             user.username = args[0];
             user.nickname = "";
             user.guest = false;
-            sendInChannel(`${user.name()} logged in as ${args[0]}!`, user.channel)
-        }
+            user.admin = server.accounts.getAccountData(user.username).admin ?? false;
+            server.updateUsers();
+        },
     },
-}
+    pm: {
+        name: "pm",
+        usage: "/pm <user> [message]",
+        description: "Send a private message to a user",
+        aliases: [],
+        command({ server, args, user, sendInChannel }) {
+            if (args.length < 1) return user.socket.send("Please provide username");
+            if (!Object.values(server.users).find((usr) => usr.username == args[0])) return user.socket.send("User not found");
+            let userFound = Object.values(server.users).find((usr) => usr.username == args[0]);
+            userFound.id = Object.keys(server.users).find((usr) => server.users[usr].username == args[0]);
+            args.shift();
+            userFound.socket.send(`${user.username} -> You : ${args.join(" ")}`);
+            user.socket.send(`You -> ${userFound.username} : ${args.join(" ")}`);
+        },
+    },
+};
 
 export function register(cmd, data) {
-    commands[cmd] = data
+    commands[cmd] = data;
 }
 
-let commandFiles = fs.readdirSync("commands").filter(filename => filename.endsWith(".js")).map(file => file.replace(/\.js$/gmi, ''))
+let commandFiles = fs
+    .readdirSync("commands")
+    .filter((filename) => filename.endsWith(".js"))
+    .map((file) => file.replace(/\.js$/gim, ""));
 for (let i = 0; i < commandFiles.length; i++) {
     const cmdName = commandFiles[i];
-    const cmd = (await import(`./commands/${cmdName}.js`)).default
-    register(cmdName, cmd)
-}
\ No newline at end of file
+    const cmd = (await import(`./commands/${cmdName}.js`)).default;
+    register(cmdName, cmd);
+}