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"