Compare commits

..

2 Commits

Author SHA1 Message Date
Kayne Ruse f83ef938ab Updated admin and mod flag system 2021-03-24 08:23:02 +11:00
Kayne Ruse 0b5cc49e6e Added reporting feature 2021-03-24 03:20:29 +11:00
4 changed files with 47 additions and 9 deletions
+1
View File
@@ -19,6 +19,7 @@ on 'error' -> Server emits and logs an error
on 'open chat' -> Preps the server for your messages, places you in the room 'general' on 'open chat' -> Preps the server for your messages, places you in the room 'general'
on 'message' -> Server broadcasts to all other users in your room on 'message' -> Server broadcasts to all other users in your room
on 'disconnect' -> Server will no longer accept your messages on 'disconnect' -> Server will no longer accept your messages
on 'report' -> Report the chatlog with the index 'id'
Chat Commands: Chat Commands:
+21 -8
View File
@@ -1,13 +1,13 @@
const jwt = require('jsonwebtoken'); const jwt = require('jsonwebtoken');
const { Op } = require('sequelize'); const { Op } = require('sequelize');
const { chatlog, mute } = require('../database/models'); const { chatlog, mute, reports } = require('../database/models');
const chat = io => { const chat = io => {
io.on('connection', socket => { io.on('connection', socket => {
//middleware //middleware
socket.use((request, next) => { socket.use((request, next) => {
//verify request format //verify request format
if (!['open chat', 'message'].includes(request[0])) { if (!['open chat', 'message', 'report'].includes(request[0])) {
return next(`Invalid request to the chat server ${request[0]}`); return next(`Invalid request to the chat server ${request[0]}`);
} }
return next(); return next();
@@ -109,15 +109,15 @@ const chat = io => {
return; return;
} }
//broadcast to this room
socket.broadcast.to(socket.user.room).emit('message', { username: socket.user.username, text: message.text });
//log //log
chatlog.create({ const log = await chatlog.create({
username: socket.user.username, username: socket.user.username,
text: message.text, text: message.text,
room: socket.user.room room: socket.user.room
}); });
//broadcast to this room (with the id)
socket.broadcast.to(socket.user.room).emit('message', log);
}); });
socket.on('disconnect', reason => { socket.on('disconnect', reason => {
@@ -137,6 +137,19 @@ const chat = io => {
emphasis: true emphasis: true
}); });
}); });
socket.on('report', info => {
//handle reports of malicious content
if (!info.id) {
return;
}
//report
reports.create({
reporter: socket.user.username,
chatlogId: info.id
});
});
}); });
}; };
@@ -186,7 +199,7 @@ const executeCommand = (io, socket, command) => {
} }
case '/mute': {//NOTE: mutes globally, broadcasts only to admin's room case '/mute': {//NOTE: mutes globally, broadcasts only to admin's room
if (socket.user.privilege != 'administrator' && socket.user.privilege != 'moderator') { if (!socket.user.admin && !socket.user.mod) {
socket.emit('message', { emphasis: true, text: '/mute is only available to admins and mods' }); socket.emit('message', { emphasis: true, text: '/mute is only available to admins and mods' });
break; break;
} }
@@ -229,7 +242,7 @@ const executeCommand = (io, socket, command) => {
} }
case '/unmute': { case '/unmute': {
if (socket.user.privilege != 'administrator' && socket.user.privilege != 'moderator') { if (!socket.user.admin && !socket.user.mod) {
socket.emit('message', { emphasis: true, text: '/unmute is only available to admins and mods' }); socket.emit('message', { emphasis: true, text: '/unmute is only available to admins and mods' });
break; break;
} }
+2 -1
View File
@@ -1,4 +1,5 @@
module.exports = { module.exports = {
chatlog: require('./chatlog'), chatlog: require('./chatlog'),
mute: require('./mute') mute: require('./mute'),
reports: require('./reports')
}; };
+23
View File
@@ -0,0 +1,23 @@
const Sequelize = require('sequelize');
const sequelize = require('..');
const chatlog = require('./chatlog');
const reports = sequelize.define('reports', {
id: {
type: Sequelize.INTEGER(11),
allowNull: false,
autoIncrement: true,
primaryKey: true,
unique: true
},
reporter: {
type: 'varchar(320)',
allowNull: false
},
});
chatlog.hasMany(reports, { foreignKey: 'chatlogId', foreignKeyConstraint: true });
module.exports = reports;