Compare commits
No commits in common. "b80f82b9f29a4082d5c4bc5f994a10f1b60d7881" and "286c08d231bc6e9da4798752f0832f7f0a99993d" have entirely different histories.
b80f82b9f2
...
286c08d231
6 changed files with 1 additions and 255 deletions
|
|
@ -17,7 +17,6 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.*/
|
||||||
//Local Imports
|
//Local Imports
|
||||||
const permissionModel = require('../../schemas/permissionSchema');
|
const permissionModel = require('../../schemas/permissionSchema');
|
||||||
const channelModel = require('../../schemas/channel/channelSchema');
|
const channelModel = require('../../schemas/channel/channelSchema');
|
||||||
const {userModel} = require('../../schemas/user/userSchema');
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class representing global server-side chat/command processing logic
|
* Class representing global server-side chat/command processing logic
|
||||||
|
|
@ -114,62 +113,6 @@ class commandProcessor{
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
async ignore(commandObj){
|
|
||||||
//If we wherent given a user to ignore
|
|
||||||
if(commandObj.argumentArray[1] == null){
|
|
||||||
//Silently return
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Attempt to find user DB doc object
|
|
||||||
const userDB = await userModel.findOne({user: commandObj.socket.user.user});
|
|
||||||
|
|
||||||
//Prevent missing users
|
|
||||||
if(userDB == null){
|
|
||||||
throw loggerUtils.exceptionSmith("Called from invalid user", "validation");
|
|
||||||
}
|
|
||||||
|
|
||||||
//ignore user
|
|
||||||
await userDB.ignoreByUser(commandObj.argumentArray[1]);
|
|
||||||
|
|
||||||
//Update all users sockets on every channel
|
|
||||||
this.server.crawlConnections(commandObj.socket.user.user, (user)=>{
|
|
||||||
//syncrhonously fire and forget ignored user list
|
|
||||||
user.sendIgnoredList(userDB);
|
|
||||||
});
|
|
||||||
|
|
||||||
//disable send flag
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
async unignore(commandObj){
|
|
||||||
//If we wherent given a user to ignore
|
|
||||||
if(commandObj.argumentArray[1] == null){
|
|
||||||
//Silently return
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Attempt to find user DB doc object
|
|
||||||
const userDB = await userModel.findOne({user: commandObj.socket.user.user});
|
|
||||||
|
|
||||||
//Prevent missing users
|
|
||||||
if(userDB == null){
|
|
||||||
throw loggerUtils.exceptionSmith("Called from invalid user", "validation");
|
|
||||||
}
|
|
||||||
|
|
||||||
//ignore user
|
|
||||||
await userDB.unignoreByUser(commandObj.argumentArray[1]);
|
|
||||||
|
|
||||||
//Update all users sockets on every channel
|
|
||||||
this.server.crawlConnections(commandObj.socket.user.user, (user)=>{
|
|
||||||
//syncrhonously fire and forget ignored user list
|
|
||||||
user.sendIgnoredList(userDB);
|
|
||||||
});
|
|
||||||
|
|
||||||
//disable send flag
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Command Processor method to handle the '!announce' command
|
* Command Processor method to handle the '!announce' command
|
||||||
* @param {Object} commandObj - Object representing a single given command/chat request
|
* @param {Object} commandObj - Object representing a single given command/chat request
|
||||||
|
|
|
||||||
|
|
@ -216,7 +216,6 @@ class connectedUser{
|
||||||
chan: Array.from(this.permMap.chan),
|
chan: Array.from(this.permMap.chan),
|
||||||
},
|
},
|
||||||
flair: this.flair,
|
flair: this.flair,
|
||||||
ignored: (await userDB.getIgnoredUsers()).user
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//For each flair listed in the Database
|
//For each flair listed in the Database
|
||||||
|
|
@ -333,21 +332,6 @@ class connectedUser{
|
||||||
this.channel.broadcastUserList();
|
this.channel.broadcastUserList();
|
||||||
this.sendClientMetadata();
|
this.sendClientMetadata();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends updated ignored list to a client
|
|
||||||
* @param {Mongoose.Document} userDB - Users DB Document
|
|
||||||
*/
|
|
||||||
async sendIgnoredList(userDB){
|
|
||||||
//if we wherent handed a user document
|
|
||||||
if(userDB == null){
|
|
||||||
//Pull it based on user name
|
|
||||||
userDB = await userModel.findOne({user: this.user});
|
|
||||||
}
|
|
||||||
|
|
||||||
//Retrieve and send updated ignored users list to clients socket
|
|
||||||
this.emit("ignore", (await userDB.getIgnoredUsers()).user);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = connectedUser;
|
module.exports = connectedUser;
|
||||||
|
|
@ -153,10 +153,6 @@ const userSchema = new mongoose.Schema({
|
||||||
type: mongoose.SchemaTypes.ObjectID,
|
type: mongoose.SchemaTypes.ObjectID,
|
||||||
ref: "user"
|
ref: "user"
|
||||||
}],
|
}],
|
||||||
ignored:[{
|
|
||||||
type: mongoose.SchemaTypes.ObjectID,
|
|
||||||
ref: "user",
|
|
||||||
}],
|
|
||||||
playlists: [playlistSchema]
|
playlists: [playlistSchema]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -666,136 +662,6 @@ userSchema.methods.deleteEmote = async function(name){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Ignores a given user by their username
|
|
||||||
* @param {Mongoose.Document} userDB - DB Document of user to ignore
|
|
||||||
*/
|
|
||||||
userSchema.methods.ignoreByUser = async function(user){
|
|
||||||
//Pull user doc from DB
|
|
||||||
const userDB = await this.constructor.findOne({user});
|
|
||||||
//Do a ignorem user by username
|
|
||||||
await this.ignoreByUserDoc(userDB);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ignores a given user by their DB Document
|
|
||||||
* @param {Mongoose.Document} userDB - DB Document of user to ignore
|
|
||||||
*/
|
|
||||||
userSchema.methods.ignoreByUserDoc = async function(userDB){
|
|
||||||
//Prevent missing users
|
|
||||||
if(userDB == null){
|
|
||||||
throw loggerUtils.exceptionSmith("User not found", "validation");
|
|
||||||
}
|
|
||||||
|
|
||||||
//if someone is trying to self-ignore
|
|
||||||
if(userDB._id.equals(this._id)){
|
|
||||||
//Remind them of the brutal truth that is reality
|
|
||||||
throw loggerUtils.exceptionSmith("YOU CANNOT ESCAPE THE PRISON THAT IS YOUR MIND!!!", "validation");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.ignored.includes(userDB._id)){
|
|
||||||
throw loggerUtils.exceptionSmith("User already ignored", "validation");
|
|
||||||
}
|
|
||||||
|
|
||||||
//Push user into ignored array
|
|
||||||
this.ignored.push(userDB._id);
|
|
||||||
|
|
||||||
//Save the DB document
|
|
||||||
await this.save();
|
|
||||||
|
|
||||||
console.log(await this.getIgnoredUsers());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* un-ignores a given user by their username
|
|
||||||
* @param {Mongoose.Document} userDB - DB Document of user to ignore
|
|
||||||
*/
|
|
||||||
userSchema.methods.unignoreByUser = async function(user){
|
|
||||||
//Pull user doc from DB
|
|
||||||
const userDB = await this.constructor.findOne({user});
|
|
||||||
//Do an unignorem user by username
|
|
||||||
await this.unignoreByUserDoc(userDB);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* un-ignores a given user by their DB Document
|
|
||||||
* @param {Mongoose.Document} userDB - DB Document of user to ignore
|
|
||||||
*/
|
|
||||||
userSchema.methods.unignoreByUserDoc = async function(userDB){
|
|
||||||
//Prevent missing users
|
|
||||||
if(userDB == null){
|
|
||||||
throw loggerUtils.exceptionSmith("User not found", "validation");
|
|
||||||
}
|
|
||||||
|
|
||||||
//prevent double un-ignoring
|
|
||||||
if(!this.ignored.includes(userDB._id)){
|
|
||||||
throw loggerUtils.exceptionSmith("User not ignored", "validation");
|
|
||||||
}
|
|
||||||
|
|
||||||
//Filter user out of ignored array
|
|
||||||
this.ignored = this.ignored.filter((id)=>{return !id.equals(userDB._id)});
|
|
||||||
|
|
||||||
//Save the DB document
|
|
||||||
await this.save();
|
|
||||||
|
|
||||||
console.log(await this.getIgnoredUsers());
|
|
||||||
}
|
|
||||||
|
|
||||||
userSchema.methods.getIgnoredUsers = async function(fetchAlts = true){
|
|
||||||
//Not me commiting ancient fucking sin
|
|
||||||
const _this = this;
|
|
||||||
|
|
||||||
//Populate all ignored users
|
|
||||||
await this.populate('ignored');
|
|
||||||
|
|
||||||
//If we're fetching alts
|
|
||||||
if(fetchAlts){
|
|
||||||
//Populate ignored users alts
|
|
||||||
await this.populate('ignored.alts');
|
|
||||||
}
|
|
||||||
|
|
||||||
//Create return object to hold list of DB ids and public user IDs/names
|
|
||||||
//Code using this method typically only need either/or, so seperating them from da get-go was the easiest option.
|
|
||||||
const ignored = {
|
|
||||||
_id: [],
|
|
||||||
user: []
|
|
||||||
}
|
|
||||||
|
|
||||||
//Iterate through all ignored users
|
|
||||||
for(const ignoredUser of this.ignored){
|
|
||||||
//Push user to ignored list
|
|
||||||
pushToList(ignoredUser);
|
|
||||||
|
|
||||||
//If we're fetching alts
|
|
||||||
if(fetchAlts){
|
|
||||||
//Iterate through ignored users alts
|
|
||||||
for(const ignoredAlt of ignoredUser.alts){
|
|
||||||
//Push alt to ignored list
|
|
||||||
pushToList(ignoredAlt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Return list of ignored users
|
|
||||||
return ignored;
|
|
||||||
|
|
||||||
function pushToList(ignoredUser){
|
|
||||||
//If we haven't already added this user, and it isn't us
|
|
||||||
//ignoring our own alts seem silly at first, but remember 1 IP =/= one user.
|
|
||||||
//VPNs, CGNAT, and even household disagreements all happen in da real world.
|
|
||||||
if(!ignored._id.includes(ignoredUser._id) && !ignoredUser._id.equals(_this._id)){
|
|
||||||
//Push DB _id into list for server-side use
|
|
||||||
ignored._id.push(ignoredUser._id);
|
|
||||||
//Push ignored username/outward id combo for client usage
|
|
||||||
ignored.user.push({
|
|
||||||
user: ignoredUser.user,
|
|
||||||
id: ignoredUser.id
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Salts, Hashes and Tattoo's IP address to user document in a privacy respecting manner
|
* Salts, Hashes and Tattoo's IP address to user document in a privacy respecting manner
|
||||||
* @param {String} ip - Plaintext IP Address to Salt, Hash and Tattoo
|
* @param {String} ip - Plaintext IP Address to Salt, Hash and Tattoo
|
||||||
|
|
|
||||||
|
|
@ -129,9 +129,7 @@ class channel{
|
||||||
|
|
||||||
this.socket.on("archive", (data) =>{
|
this.socket.on("archive", (data) =>{
|
||||||
this.sortQueue(data.archive);
|
this.sortQueue(data.archive);
|
||||||
});
|
})
|
||||||
|
|
||||||
this.socket.on("ignore", this.handleIgnoredList.bind(this));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -171,21 +169,6 @@ class channel{
|
||||||
this.streamType = data.streamType;
|
this.streamType = data.streamType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Updated ignore list
|
|
||||||
* @param {Array} data - Ignore list received from server
|
|
||||||
*/
|
|
||||||
handleIgnoredList(data){
|
|
||||||
//Update ignored users list
|
|
||||||
this.user.ignored = data;
|
|
||||||
|
|
||||||
//If we have the chatbox loaded in
|
|
||||||
if(this.chatBox != null){
|
|
||||||
//Re-render buffer
|
|
||||||
this.chatBox.rerenderBuffer();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sorts queue, optionally adding new items along the way
|
* Sorts queue, optionally adding new items along the way
|
||||||
* @param {object} queueData - Contains list of entries to add to the queue
|
* @param {object} queueData - Contains list of entries to add to the queue
|
||||||
|
|
|
||||||
|
|
@ -229,16 +229,6 @@ class chatBox{
|
||||||
* @param {Object} data De-hydrated chat object from server
|
* @param {Object} data De-hydrated chat object from server
|
||||||
*/
|
*/
|
||||||
displayChat(data){
|
displayChat(data){
|
||||||
|
|
||||||
//For every douchebag in the ignored users list
|
|
||||||
for(const douchebag of this.client.user.ignored){
|
|
||||||
//If this message is from the douchebag in question
|
|
||||||
if(data.user == douchebag.user){
|
|
||||||
//tell it to fuck off and die
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Append the post-processed chat-body to the chat buffer
|
//Append the post-processed chat-body to the chat buffer
|
||||||
this.chatBuffer.appendChild(this.chatPostprocessor.postprocess(data));
|
this.chatBuffer.appendChild(this.chatPostprocessor.postprocess(data));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -196,26 +196,6 @@ class userList{
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if(user.user != "Tokebot" && user.user != this.client.user.user){
|
if(user.user != "Tokebot" && user.user != this.client.user.user){
|
||||||
let ignored = false;
|
|
||||||
|
|
||||||
//For each douchebag in the ignored users list
|
|
||||||
for(const douchebag of this.client.user.ignored){
|
|
||||||
if(douchebag.user == user.user){
|
|
||||||
/* Normally I abhor making if statements to set booleans, but this only need to happen when its true
|
|
||||||
Plus I also needed to put the break statement somewhere
|
|
||||||
The fucked thing is the break statement isnt necissary with the if statement, but without it it becomes necissary
|
|
||||||
But it cant be used without the if statement, making the task of reducing linecount for this definition a fucking sisyphean nightmare */
|
|
||||||
ignored = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ignored){
|
|
||||||
menuMap.set("Unignore", ()=>{this.client.chatBox.transmit(`!unignore ${user.user}`);});
|
|
||||||
}else{
|
|
||||||
menuMap.set("Ignore", ()=>{this.client.chatBox.transmit(`!ignore ${user.user}`);});
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.client.user.permMap.chan.get("kickUser")){
|
if(this.client.user.permMap.chan.get("kickUser")){
|
||||||
menuMap.set("Kick", ()=>{this.client.chatBox.transmit(`!kick ${user.user}`);});
|
menuMap.set("Kick", ()=>{this.client.chatBox.transmit(`!kick ${user.user}`);});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue