This commit is contained in:
Hri7566 2023-04-16 19:34:32 -04:00
parent f45f77a9ed
commit 0eae040cbb
4 changed files with 172 additions and 48 deletions

View File

@ -26,12 +26,20 @@ const LOGGER_PARTICIPANT = {
id: "logger" id: "logger"
}; };
const SERVER_PARTICIPANT = {
name: "mpp",
color: "#ffffff",
_id: "0",
id: "0"
};
const LOGGING_CHANNEL = "lolwutsecretloggingchannel"; const LOGGING_CHANNEL = "lolwutsecretloggingchannel";
const BAN_CHANNEL = "test/awkward"; const BAN_CHANNEL = "test/awkward";
class Channel extends EventEmitter { class Channel extends EventEmitter {
static loggingChannel = LOGGING_CHANNEL; static loggingChannel = LOGGING_CHANNEL;
static loggerParticipant = LOGGER_PARTICIPANT; static loggerParticipant = LOGGER_PARTICIPANT;
static serverParticipant = SERVER_PARTICIPANT;
static banChannel = BAN_CHANNEL; static banChannel = BAN_CHANNEL;
constructor(server, _id, settings, cl) { constructor(server, _id, settings, cl) {
@ -125,7 +133,7 @@ class Channel extends EventEmitter {
if (this.isLobby(this._id)) { if (this.isLobby(this._id)) {
this.colorInterval = setInterval(() => { this.colorInterval = setInterval(() => {
this.setDefaultLobbyColorBasedOnDate(); this.setDefaultLobbyColorBasedOnDate();
}, 500); }, 5000);
this.setDefaultLobbyColorBasedOnDate(); this.setDefaultLobbyColorBasedOnDate();
} }
} }

View File

@ -8,7 +8,7 @@ const level = require("level");
const { db } = require("./UserModel"); const { db } = require("./UserModel");
const Logger = require("./Logger"); const Logger = require("./Logger");
var logger = new Logger("Database"); const logger = new Logger("Database");
mongoose.connect( mongoose.connect(
process.env.MONGO_URL, process.env.MONGO_URL,
@ -23,10 +23,11 @@ mongoose.connect(
logger.error("Unable to connect to database service"); logger.error("Unable to connect to database service");
process.exit(1); process.exit(1);
} }
logger.log("Connected"); logger.log("Connected to Mongo");
} }
); );
// TODO implement this with an if statement instead
fs.mkdirSync("db/", { fs.mkdirSync("db/", {
recursive: true recursive: true
}); });
@ -35,11 +36,15 @@ class Database {
static userdb; static userdb;
static roomdb; static roomdb;
static bandb; static bandb;
static utildb;
static async load() { static async load() {
logger.log("Initializing level stores...");
this.userdb = mongoose.connection; this.userdb = mongoose.connection;
this.roomdb = level("db/rooms.db"); this.roomdb = level("db/rooms.db");
this.bandb = level("db/ban.db"); this.bandb = level("db/ban.db");
this.utildb = level("db/util.db");
logger.log("Level stores initialized");
// const writeFile = promisify(fs.writeFile); // const writeFile = promisify(fs.writeFile);
// const readdir = promisify(fs.readdir); // const readdir = promisify(fs.readdir);
@ -155,18 +160,27 @@ class Database {
} }
static deleteRoomSettings(_id) { static deleteRoomSettings(_id) {
if (!this.bandb) return this.load();
this.roomdb.del("room~" + _id); this.roomdb.del("room~" + _id);
} }
static addIPBan(ip) { static addIPBan(ip) {
if (!this.bandb) return this.load();
this.bandb.put("ipban~" + ip, true); this.bandb.put("ipban~" + ip, true);
} }
static removeIPBan(ip) { static removeIPBan(ip) {
if (!this.bandb) return this.load();
this.bandb.del("ipban~" + ip); this.bandb.del("ipban~" + ip);
} }
static isIPBanned(ip, cb) { static isIPBanned(ip, cb) {
if (!this.bandb) {
// FIXME this was causing a crash :/ maybe it should be async instead of return false?
this.load();
return false;
}
this.roomdb.get("ipban~" + ip, (err, value) => { this.roomdb.get("ipban~" + ip, (err, value) => {
if (err) { if (err) {
return false; return false;
@ -177,6 +191,18 @@ class Database {
if (value == true) return true; if (value == true) return true;
}); });
} }
static utilSet(key, value) {
return this.utildb.put(key, value);
}
static utilGet(key) {
return this.utildb.get(key);
}
static utilDel(key) {
return this.utildb.del(key);
}
} }
class RoomDataModel { class RoomDataModel {

View File

@ -107,10 +107,7 @@ Command.addCommand(
if (!msg.args[2]) { if (!msg.args[2]) {
cl.emit( cl.emit(
"color", "color",
{ { color: c.toHexa(), _id: cl.user._id },
color: c.toHexa(),
_id: cl.user._id
},
true true
); );
ch.adminChat( ch.adminChat(
@ -125,10 +122,7 @@ Command.addCommand(
if (winner) { if (winner) {
cl.emit( cl.emit(
"color", "color",
{ { color: c.toHexa(), _id: winner.user._id },
color: c.toHexa(),
_id: winner.user._id
},
true true
); );
ch.adminChat( ch.adminChat(
@ -231,6 +225,63 @@ Command.addCommand(
) )
); );
module.exports = { /*
Command Command.addCommand(
}; new Command(
"ip",
["ip"],
undefined,
"%Pip",
0,
(cl, ch, msg) => {
if (msg.args[1]) {
const winner = new Array(cl.server.connections.values()).find(
cl => {
if (!cl.user) return false;
console.log(cl.user._id);
return cl.user ? cl.user._id == msg.args[1] : false;
}
);
if (winner) {
cl.sendArray([
{
m: "a",
a: "IP: " + winner.ip,
p: {
name: "mpp",
color: "#ffffff",
_id: "0",
id: "0"
}
}
]);
} else {
cl.sendArray([
{
m: "a",
a: "No IP found.",
p: {
name: "mpp",
color: "#ffffff",
_id: "0",
id: "0"
}
}
]);
}
} else {
cl.sendArray([
{
m: "a",
a: "ip: " + cl.ip,
p: { name: "mpp", color: "#ffffff", _id: "0", id: "0" }
}
]);
}
},
"admin"
)
);
*/
module.exports = { Command };

View File

@ -1,57 +1,65 @@
const config = require ('../config'); const config = require("../config");
class RoomSettings { class RoomSettings {
static allowedProperties = { static allowedProperties = {
color: { color: {
type: 'color', type: "color",
default: config.defaultRoomSettings.color, default: config.defaultRoomSettings.color,
allowedChange: true, allowedChange: true,
required: true required: true
}, },
color2: { color2: {
type: 'color2', type: "color2",
default: config.defaultRoomSettings.color2, default: config.defaultRoomSettings.color2,
allowedChange: true, allowedChange: true,
required: false required: false
}, },
lobby: { lobby: {
type: 'boolean', type: "boolean",
allowedChange: false, allowedChange: false,
required: false required: false
}, },
visible: { visible: {
type: 'boolean', type: "boolean",
default: true, default: true,
allowedChange: true, allowedChange: true,
required: true required: true
}, },
chat: { chat: {
type: 'boolean', type: "boolean",
default: true, default: true,
allowedChange: true, allowedChange: true,
required: true required: true
}, },
owner_id: { owner_id: {
type: 'string', type: "string",
allowedChange: false, allowedChange: false,
required: false required: false
}, },
crownsolo: { crownsolo: {
type: 'boolean', type: "boolean",
default: false, default: false,
allowedChange: true, allowedChange: true,
required: true required: true
}, },
"no cussing": { "no cussing": {
type: 'boolean', type: "boolean",
allowedChange: true, allowedChange: true,
required: false required: false
},
"lyrical notes": {
type: "boolean",
allowedChange: false,
required: false
} }
} };
constructor (set, context) { constructor(set, context) {
Object.keys(RoomSettings.allowedProperties).forEach(key => { Object.keys(RoomSettings.allowedProperties).forEach(key => {
if (typeof(RoomSettings.allowedProperties[key].default) !== 'undefined') { if (
typeof RoomSettings.allowedProperties[key].default !==
"undefined"
) {
if (this[key] !== RoomSettings.allowedProperties[key].default) { if (this[key] !== RoomSettings.allowedProperties[key].default) {
this[key] = RoomSettings.allowedProperties[key].default; this[key] = RoomSettings.allowedProperties[key].default;
} }
@ -60,22 +68,36 @@ class RoomSettings {
Object.keys(RoomSettings.allowedProperties).forEach(key => { Object.keys(RoomSettings.allowedProperties).forEach(key => {
if (RoomSettings.allowedProperties[key].required == true) { if (RoomSettings.allowedProperties[key].required == true) {
if (typeof(this[key]) == 'undefined') { if (typeof this[key] == "undefined") {
this[key] = RoomSettings.allowedProperties[key].default; this[key] = RoomSettings.allowedProperties[key].default;
} }
} }
}); });
if (typeof(set) !== 'undefined') { if (typeof set !== "undefined") {
Object.keys(set).forEach(key => { Object.keys(set).forEach(key => {
if (typeof(set[key]) == 'undefined') return; if (typeof set[key] == "undefined") return;
if (Object.keys(RoomSettings.allowedProperties).indexOf(key) !== -1) { if (
if (typeof(context) == 'undefined') { Object.keys(RoomSettings.allowedProperties).indexOf(key) !==
this[key] = this.verifyPropertyType(key, set[key], RoomSettings.allowedProperties[key].type); -1
) {
if (typeof context == "undefined") {
this[key] = this.verifyPropertyType(
key,
set[key],
RoomSettings.allowedProperties[key].type
);
} else { } else {
if (context == 'user') { if (context == "user") {
if (RoomSettings.allowedProperties[key].allowedChange) { if (
this[key] = this.verifyPropertyType(key, set[key], RoomSettings.allowedProperties[key].type); RoomSettings.allowedProperties[key]
.allowedChange
) {
this[key] = this.verifyPropertyType(
key,
set[key],
RoomSettings.allowedProperties[key].type
);
} }
} }
} }
@ -87,17 +109,17 @@ class RoomSettings {
verifyPropertyType(key, pr, type) { verifyPropertyType(key, pr, type) {
let ret; let ret;
if (typeof(RoomSettings.allowedProperties[key]) !== 'object') return; if (typeof RoomSettings.allowedProperties[key] !== "object") return;
switch (type) { switch (type) {
case 'color': case "color":
if (/^#[0-9a-f]{6}$/i.test(pr)) { if (/^#[0-9a-f]{6}$/i.test(pr)) {
ret = pr; ret = pr;
} else { } else {
ret = RoomSettings.allowedProperties[key].default; ret = RoomSettings.allowedProperties[key].default;
} }
break; break;
case 'color2': case "color2":
if (/^#[0-9a-f]{6}$/i.test(pr)) { if (/^#[0-9a-f]{6}$/i.test(pr)) {
ret = pr; ret = pr;
} else { } else {
@ -105,9 +127,12 @@ class RoomSettings {
} }
break; break;
default: default:
if (typeof(pr) == type) { if (typeof pr == type) {
ret = pr; ret = pr;
} else if (typeof(RoomSettings.allowedProperties[key].default) !== 'undefined') { } else if (
typeof RoomSettings.allowedProperties[key].default !==
"undefined"
) {
ret = RoomSettings.allowedProperties[key].default; ret = RoomSettings.allowedProperties[key].default;
} else { } else {
ret = undefined; ret = undefined;
@ -121,15 +146,26 @@ class RoomSettings {
changeSettings(set) { changeSettings(set) {
Object.keys(set).forEach(key => { Object.keys(set).forEach(key => {
if (RoomSettings.allowedProperties[key].allowedChange) { if (RoomSettings.allowedProperties[key].allowedChange) {
this[key] = this.verifyPropertyType(key, set[key], RoomSettings.allowedProperties[key].type); this[key] = this.verifyPropertyType(
key,
set[key],
RoomSettings.allowedProperties[key].type
);
} }
}); });
} }
static changeSettings(set, admin) { static changeSettings(set, admin) {
Object.keys(set).forEach(key => { Object.keys(set).forEach(key => {
if (RoomSettings.allowedProperties[key].allowedChange || admin == true) { if (
set[key] = RoomSettings.verifyPropertyType(key, set[key], RoomSettings.allowedProperties[key].type); RoomSettings.allowedProperties[key].allowedChange ||
admin == true
) {
set[key] = RoomSettings.verifyPropertyType(
key,
set[key],
RoomSettings.allowedProperties[key].type
);
} }
}); });
return set; return set;
@ -138,17 +174,17 @@ class RoomSettings {
static verifyPropertyType(key, pr, type) { static verifyPropertyType(key, pr, type) {
let ret; let ret;
if (typeof(RoomSettings.allowedProperties[key]) !== 'object') return; if (typeof RoomSettings.allowedProperties[key] !== "object") return;
switch (type) { switch (type) {
case 'color': case "color":
if (/^#[0-9a-f]{6}$/i.test(pr)) { if (/^#[0-9a-f]{6}$/i.test(pr)) {
ret = pr; ret = pr;
} else { } else {
ret = RoomSettings.allowedProperties[key].default; ret = RoomSettings.allowedProperties[key].default;
} }
break; break;
case 'color2': case "color2":
if (/^#[0-9a-f]{6}$/i.test(pr)) { if (/^#[0-9a-f]{6}$/i.test(pr)) {
ret = pr; ret = pr;
} else { } else {
@ -156,9 +192,12 @@ class RoomSettings {
} }
break; break;
default: default:
if (typeof(pr) == type) { if (typeof pr == type) {
ret = pr; ret = pr;
} else if (typeof(RoomSettings.allowedProperties[key].default) !== 'undefined') { } else if (
typeof RoomSettings.allowedProperties[key].default !==
"undefined"
) {
ret = RoomSettings.allowedProperties[key].default; ret = RoomSettings.allowedProperties[key].default;
} else { } else {
ret = undefined; ret = undefined;