2018-03-10 15:47:00 +08:00
|
|
|
/*
|
2018-03-14 13:26:53 +08:00
|
|
|
Description: Rebroadcasts any `text` to all clients in a `channel`
|
2018-03-10 15:47:00 +08:00
|
|
|
*/
|
|
|
|
|
2018-03-14 13:26:53 +08:00
|
|
|
const parseText = (text) => {
|
2018-03-11 14:41:17 +08:00
|
|
|
if (typeof text !== 'string') {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2018-03-10 15:47:00 +08:00
|
|
|
// 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");
|
2018-03-11 14:41:17 +08:00
|
|
|
|
|
|
|
return text;
|
2018-03-14 13:26:53 +08:00
|
|
|
};
|
2018-03-11 14:41:17 +08:00
|
|
|
|
|
|
|
exports.run = async (core, server, socket, data) => {
|
|
|
|
let text = parseText(data.text);
|
2018-03-10 15:47:00 +08:00
|
|
|
if (!text) {
|
2018-03-11 14:41:17 +08:00
|
|
|
// lets not send objects or empty text, yea?
|
2018-03-10 15:47:00 +08:00
|
|
|
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'];
|
|
|
|
|
2018-05-13 18:33:22 +08:00
|
|
|
exports.info = {
|
|
|
|
name: 'chat',
|
|
|
|
usage: 'chat {text}',
|
|
|
|
description: 'Broadcasts passed `text` field to the calling users channel'
|
|
|
|
};
|