diff options
author | marzavec <admin@marzavec.com> | 2018-04-29 07:29:38 +0200 |
---|---|---|
committer | marzavec <admin@marzavec.com> | 2018-04-29 07:29:46 +0200 |
commit | 8820968c7378b03af57abce3d3a522cff318c9b9 (patch) | |
tree | 41bb23bdbddd484be3567732c531c11e31b22c32 /server/src/commands/core/changenick.js | |
parent | added software link to readme (diff) | |
download | hackchat-8820968c7378b03af57abce3d3a522cff318c9b9.tar.gz hackchat-8820968c7378b03af57abce3d3a522cff318c9b9.zip |
misc server changes and new modules
Diffstat (limited to '')
-rw-r--r-- | server/src/commands/core/changenick.js | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/server/src/commands/core/changenick.js b/server/src/commands/core/changenick.js new file mode 100644 index 0000000..460f811 --- /dev/null +++ b/server/src/commands/core/changenick.js @@ -0,0 +1,90 @@ +/* + Description: Generates a semi-unique channel name then broadcasts it to each client +*/ + +'use strict'; + +const verifyNickname = (nick) => { + return /^[a-zA-Z0-9_]{1,24}$/.test(nick); +}; + +exports.run = async (core, server, socket, data) => { + if (server._police.frisk(socket.remoteAddress, 6)) { + server.reply({ + cmd: 'warn', + text: 'You are changing nicknames too fast. Wait a moment before trying again.' + }, socket); + + return; + } + + if (typeof data.nick !== 'string') { + return; + } + + let newNick = data.nick.trim(); + + if (!verifyNickname(newNick)) { + server.reply({ + cmd: 'warn', + text: 'Nickname must consist of up to 24 letters, numbers, and underscores' + }, socket); + + return; + } + + if (newNick.toLowerCase() == core.config.adminName.toLowerCase()) { + server._police.frisk(socket.remoteAddress, 4); + + server.reply({ + cmd: 'warn', + text: 'Gtfo' + }, socket); + + return; + } + + let userExists = server.findSockets({ + channel: data.channel, + nick: (targetNick) => targetNick.toLowerCase() === newNick.toLowerCase() + }); + + if (userExists.length > 0) { + // That nickname is already in that channel + server.reply({ + cmd: 'warn', + text: 'Nickname taken' + }, socket); + + return; + } + + let peerList = server.findSockets({ channel: socket.channel }); + let leaveNotice = { + cmd: 'onlineRemove', + nick: socket.nick + }; + let joinNotice = { + cmd: 'onlineAdd', + nick: newNick, + trip: socket.trip || 'null', + hash: server.getSocketHash(socket) + }; + + server.broadcast( leaveNotice, { channel: socket.channel }); + server.broadcast( joinNotice, { channel: socket.channel }); + server.broadcast( { + cmd: 'info', + text: `${socket.nick} is now ${newNick}` + }, { channel: socket.channel }); + + socket.nick = newNick; +}; + +exports.requiredData = ['nick']; + +exports.info = { + name: 'changenick', + usage: 'changenick {nick}', + description: 'This will change your current connections nickname' +}; |