aboutsummaryrefslogtreecommitdiffstats
path: root/server/src/commands/core/chat.js
diff options
context:
space:
mode:
authorNeel Kamath <neelkamath@protonmail.com>2018-05-13 13:07:56 +0200
committerNeel Kamath <neelkamath@protonmail.com>2018-05-13 13:07:56 +0200
commit949404cd1aad8492ae0338130f16054adfa38ab7 (patch)
tree6fed796d224901f5b6832543b19973af425e0fa9 /server/src/commands/core/chat.js
parentFlatten (diff)
downloadhackchat-949404cd1aad8492ae0338130f16054adfa38ab7.tar.gz
hackchat-949404cd1aad8492ae0338130f16054adfa38ab7.zip
Prevent fucking shit up
Diffstat (limited to 'server/src/commands/core/chat.js')
-rw-r--r--server/src/commands/core/chat.js62
1 files changed, 62 insertions, 0 deletions
diff --git a/server/src/commands/core/chat.js b/server/src/commands/core/chat.js
new file mode 100644
index 0000000..bce6adb
--- /dev/null
+++ b/server/src/commands/core/chat.js
@@ -0,0 +1,62 @@
+/*
+ Description: Rebroadcasts any `text` to all clients in a `channel`
+*/
+
+const parseText = (text) => {
+ if (typeof text !== 'string') {
+ return false;
+ }
+
+ // strip newlines from beginning and end
+ text = text.replace(/^\s*\n|^\s+$|\n\s*$/g, '');
+ // replace 3+ newlines with just 2 newlines
+ text = text.replace(/\n{3,}/g, "\n\n");
+
+ return text;
+};
+
+exports.run = async (core, server, socket, data) => {
+ let text = parseText(data.text);
+ if (!text) {
+ // lets not send objects or empty text, yea?
+ return;
+ }
+
+ let score = text.length / 83 / 4;
+ if (server._police.frisk(socket.remoteAddress, score)) {
+ server.reply({
+ cmd: 'warn',
+ text: 'You are sending too much text. Wait a moment and try again.\nPress the up arrow key to restore your last message.'
+ }, socket);
+
+ return;
+ }
+
+ let payload = {
+ cmd: 'chat',
+ nick: socket.nick,
+ text: text
+ };
+
+ if (socket.uType == 'admin') {
+ payload.admin = true;
+ } else if (socket.uType == 'mod') {
+ payload.mod = true;
+ }
+
+ if (socket.trip) {
+ payload.trip = socket.trip;
+ }
+
+ server.broadcast( payload, { channel: socket.channel });
+
+ core.managers.stats.increment('messages-sent');
+};
+
+exports.requiredData = ['text'];
+
+exports.info = {
+ name: 'chat',
+ usage: 'chat {text}',
+ description: 'Broadcasts passed `text` field to the calling users channel'
+}; \ No newline at end of file