smnmpp-server/protocol/ch.js

56 lines
4.1 KiB
JavaScript

module.exports.run = async (ws,user,db,msg,fun,users,connections) => {
if (!user.connected) return;
if (typeof msg._id !== "string" ) return;
var channelName = msg._id
if (typeof kickbans[channelName] === "object" && typeof kickbans[channelName][user._id] === "number" && kickbans[channelName][user._id] > Date.now()) {
ws.sendData({"m":"notification","class":"short","duration":7000,"target":"#room","text":`You are currently banned from "${channelName}" for ${Math.floor((kickbans[channelName][user._id] - Date.now()) / 60000)} minutes.`,"title":"Notice"})
var channelName = "test/awkward"
} else if (typeof kickbans[channelName] === "object" && typeof kickbans[channelName][user._id] === "number") {
delete kickbans[channelName][user._id]
}
if (channels[channelName] && channels[channelName].ppl.length >= channels[channelName].ch.settings.limit && ((users[user._id].rank > 1) ? false : true) && (channels[channelName].ch.crown ? !( user._id === channels[channelName].ch.crown.userId) : true) && !channels[channelName].ppl.map(a => a._id).includes(user._id)) {
var channelPart = 1
for (;;) {
channelName = "lobby" + (channelPart == 1 ? "" : channelPart)
if (!(channels[channelName] && channels[channelName].ppl.length >= channels[channelName].ch.settings.limit)) break;
channelPart++
}
ws.sendData({"m":"notification","class":"short","duration":7000,"target":"#room","text":"That room is currently full.","title":"Notice"})
}
if (user.channel === channelName) return;
var part = users[user._id].p
part.m = "p"
if (!channels[channelName]) {
var visible = true
if (typeof msg.set === "object" && msg.set.visible !== undefined && !channelName.startsWith('lobby') && !channelName.startsWith('test/')) var visible = msg.set.visible ? true : false
channels[channelName] = {m: "ch",ppl: [users[user._id].p], ch: {id: channelName, _id: channelName, settings: {color: "#000000", color2: "#000000", chat: true, visible: visible, limit: channelName.startsWith('lobby') ? 20 : 50, lobby: (channelName.startsWith('lobby') || channelName.startsWith('test/'))}, crown: (!channelName.startsWith('lobby') && !channelName.startsWith('test/')) ? {startPos: {x:50,y:0}, endPos: {x: 50,y:50}, userId: user._id, participantId: user._id, t: Date.now()} : undefined }, p: user._id}
if (!chat[channelName]) {chat[channelName] = []; kickbans[channelName] = {};}
//if (user.channel) {
//var list = []
//channels[user.channel].ppl.forEach(a => {list.push(a); list.at(-1).m = "p"})
//ws.send(JSON.stringify(list))
//}
ws.sendData(channels[channelName])
} else {
if (!channels[channelName].ppl.find(a => a._id === user._id))channels[channelName].ppl.push(users[user._id].p)
var channel = channels[channelName]
channel.p = user._id
ws.sendData(fun.vanish(channel,users[user._id].rank))
connections.filter(a => a.user.channel === channelName).forEach(a => {var channel = channels[channelName]; channel.p = a.user._id; a.sendData(fun.vanish(channel,users[a.user._id].rank))})
//connections.filter(a => a.user.channel === channelName && a !== ws).forEach(a => a.send(JSON.stringify([users[user._id].p])))
//if (channels[user.channel].ppl.length == 0) delete channels[user.channel
//]
//if (user.channel) channels[user.channel].ppl.splice(channels[user.channel].indexOf(users[user._id].p),1)
}
connections.filter(founduser => founduser.user.channel === user.channel && founduser.user._id !== user._id).forEach(founduser => founduser.sendData(part.p))
if (user.channel) {if (connections.filter(a => a.user._id === user._id && a.user.channel === user.channel).length ==1) {channels[user.channel].ppl.splice(channels[user.channel].ppl.indexOf(channels[user.channel].ppl.find(a => a._id === user._id)),1); if (channels[user.channel].ch.crown && channels[user.channel].ch.crown.userId === user._id) channels[user.channel].ch.crown.t = Date.now(); connections.filter(a => a.user.channel === user.channel && a.user._id !== user._id).forEach(a => {var channel = channels[user.channel];channel.p = a.user._id; a.sendData(channel)}) }}
ws.sendData({m: "c", c: chat[channelName].filter(a => a.m === "a" || (a.m === "dm" && (a.sender._id === user._id || a.recipient._id === user._id)))})
user.channel = channelName
}
module.exports.name = "ch"