aboutsummaryrefslogtreecommitdiffstats
path: root/server/src/commands/mod/dumb.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/commands/mod/dumb.js')
-rw-r--r--server/src/commands/mod/dumb.js85
1 files changed, 48 insertions, 37 deletions
diff --git a/server/src/commands/mod/dumb.js b/server/src/commands/mod/dumb.js
index d5e8fee..644bd4f 100644
--- a/server/src/commands/mod/dumb.js
+++ b/server/src/commands/mod/dumb.js
@@ -4,22 +4,22 @@
*/
// module constructor
-exports.init = (core) => {
+export function init(core) {
if (typeof core.muzzledHashes === 'undefined') {
core.muzzledHashes = {};
}
-};
+}
// module main
-exports.run = async (core, server, socket, data) => {
+export async function run(core, server, socket, data) {
// increase rate limit chance and ignore if not admin or mod
if (socket.uType === 'user') {
- return server.police.frisk(socket.remoteAddress, 10);
+ return server.police.frisk(socket.address, 10);
}
// check user input
if (typeof data.nick !== 'string') {
- return;
+ return true;
}
// find target user
@@ -28,56 +28,58 @@ exports.run = async (core, server, socket, data) => {
if (badClient.length === 0) {
return server.reply({
cmd: 'warn',
- text: 'Could not find user in channel'
+ text: 'Could not find user in channel',
}, socket);
}
- badClient = badClient[0];
+ [badClient] = badClient;
// likely dont need this, muting mods and admins is fine
if (badClient.uType !== 'user') {
return server.reply({
cmd: 'warn',
- text: 'This trick wont work on mods and admin'
+ text: 'This trick wont work on mods and admin',
}, socket);
}
// store hash in mute list
- let record = core.muzzledHashes[badClient.hash] = {
- dumb: true
- }
+ const record = core.muzzledHashes[badClient.hash] = {
+ dumb: true,
+ };
// store allies if needed
- if(data.allies && Array.isArray(data.allies)){
- record.allies = data.allies;
+ if (data.allies && Array.isArray(data.allies)) {
+ record.allies = data.allies;
}
// notify mods
server.broadcast({
cmd: 'info',
- text: `${socket.nick} muzzled ${data.nick} in ${socket.channel}, userhash: ${badClient.hash}`
+ text: `${socket.nick} muzzled ${data.nick} in ${socket.channel}, userhash: ${badClient.hash}`,
}, { uType: 'mod' });
-};
+
+ return true;
+}
// module hook functions
-exports.initHooks = (server) => {
+export function initHooks(server) {
server.registerHook('in', 'chat', this.chatCheck, 25);
server.registerHook('in', 'invite', this.inviteCheck, 25);
// TODO: add whisper hook, need hook priorities todo finished first
-};
+}
// hook incoming chat commands, shadow-prevent chat if they are muzzled
-exports.chatCheck = (core, server, socket, payload) => {
+export function chatCheck(core, server, socket, payload) {
if (typeof payload.text !== 'string') {
return false;
}
- if(core.muzzledHashes[socket.hash]){
+ if (core.muzzledHashes[socket.hash]) {
// build fake chat payload
- mutedPayload = {
+ const mutedPayload = {
cmd: 'chat',
nick: socket.nick,
- text: payload.text
+ text: payload.text,
};
if (socket.trip) {
@@ -85,50 +87,59 @@ exports.chatCheck = (core, server, socket, payload) => {
}
// broadcast to any duplicate connections in channel
- server.broadcast( mutedPayload, { channel: socket.channel, hash: socket.hash });
+ server.broadcast(mutedPayload, { channel: socket.channel, hash: socket.hash });
// broadcast to allies, if any
- if(core.muzzledHashes[socket.hash].allies){
- server.broadcast( mutedPayload, { channel: socket.channel, nick: core.muzzledHashes[socket.hash].allies });
+ if (core.muzzledHashes[socket.hash].allies) {
+ server.broadcast(
+ mutedPayload,
+ {
+ channel: socket.channel,
+ nick: core.muzzledHashes[socket.hash].allies,
+ },
+ );
}
- // blanket "spam" protection, may expose the ratelimiting lines from `chat` and use that, TODO: one day #lazydev
- server.police.frisk(socket.remoteAddress, 9);
+ /**
+ * Blanket "spam" protection.
+ * May expose the ratelimiting lines from `chat` and use that
+ * @todo one day #lazydev
+ */
+ server.police.frisk(socket.address, 9);
return false;
}
return payload;
-};
+}
// shadow-prevent all invites from muzzled users
-exports.inviteCheck = (core, server, socket, payload) => {
+export function inviteCheck(core, server, socket, payload) {
if (typeof payload.nick !== 'string') {
return false;
}
- if(core.muzzledHashes[socket.hash]){
+ if (core.muzzledHashes[socket.hash]) {
// generate common channel
- let channel = Math.random().toString(36).substr(2, 8);
+ const channel = Math.random().toString(36).substr(2, 8);
// send fake reply
server.reply({
cmd: 'info',
- text: `You invited ${payload.nick} to ?${channel}`
+ text: `You invited ${payload.nick} to ?${channel}`,
}, socket);
return false;
}
return payload;
-};
+}
-// module meta
-exports.requiredData = ['nick'];
-exports.info = {
+export const requiredData = ['nick'];
+export const info = {
name: 'dumb',
description: 'Globally shadow mute a connection. Optional allies array will see muted messages.',
usage: `
- API: { cmd: 'dumb', nick: '<target nick>', allies: ['<optional nick array>', ...] }`
+ API: { cmd: 'dumb', nick: '<target nick>', allies: ['<optional nick array>', ...] }`,
};
-exports.info.aliases = ['muzzle', 'mute'];
+info.aliases = ['muzzle', 'mute'];