Bugfixes
This commit is contained in:
parent
8c8af2edcc
commit
9fcc3864c0
|
@ -149,6 +149,8 @@ export class Channel extends EventEmitter {
|
||||||
// Copy default settings
|
// Copy default settings
|
||||||
mixin(this.settings, config.defaultSettings);
|
mixin(this.settings, config.defaultSettings);
|
||||||
|
|
||||||
|
if (owner_id) this.settings.owner_id = owner_id;
|
||||||
|
|
||||||
if (!this.isLobby()) {
|
if (!this.isLobby()) {
|
||||||
if (set) {
|
if (set) {
|
||||||
// Copied from changeSettings below
|
// Copied from changeSettings below
|
||||||
|
@ -717,6 +719,9 @@ export class Channel extends EventEmitter {
|
||||||
this.emit("update", this);
|
this.emit("update", this);
|
||||||
|
|
||||||
//this.logger.debug("Settings:", this.settings);
|
//this.logger.debug("Settings:", this.settings);
|
||||||
|
if (this.settings.owner_id === part._id) {
|
||||||
|
this.giveCrown(part, true, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -889,6 +894,20 @@ export class Channel extends EventEmitter {
|
||||||
const part = socket.getParticipant();
|
const part = socket.getParticipant();
|
||||||
if (!part) return;
|
if (!part) return;
|
||||||
pianoPartID = part.id;
|
pianoPartID = part.id;
|
||||||
|
|
||||||
|
const flags = socket.getUserFlags();
|
||||||
|
|
||||||
|
if (flags) {
|
||||||
|
// Is crownsolo on?
|
||||||
|
if (
|
||||||
|
this.settings.crownsolo &&
|
||||||
|
this.crown &&
|
||||||
|
!(flags.admin || flags.mod)
|
||||||
|
) {
|
||||||
|
// Do they have the crown?
|
||||||
|
if (part.id !== this.crown.participantId) return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const clientMsg: OutgoingSocketEvents["n"] = {
|
const clientMsg: OutgoingSocketEvents["n"] = {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { ChannelList } from "~/channel/ChannelList";
|
import { ChannelList } from "~/channel/ChannelList";
|
||||||
import { bus } from "./bus";
|
import { bus } from "./bus";
|
||||||
import type { ClientEvents, ServerEvents } from "~/util/types";
|
import type { OutgoingSocketEvents, IncomingSocketEvents } from "~/util/types";
|
||||||
import { socketsByUUID, type Socket } from "~/ws/Socket";
|
import { socketsByUUID, type Socket } from "~/ws/Socket";
|
||||||
|
|
||||||
export function loadBehaviors() {
|
export function loadBehaviors() {
|
||||||
|
@ -12,7 +12,7 @@ export function loadBehaviors() {
|
||||||
|
|
||||||
bus.on("ls", () => {});
|
bus.on("ls", () => {});
|
||||||
|
|
||||||
bus.on("custom", (msg: ServerEvents["custom"], sender: Socket) => {
|
bus.on("custom", (msg: IncomingSocketEvents["custom"], sender: Socket) => {
|
||||||
if (typeof msg !== "object") return;
|
if (typeof msg !== "object") return;
|
||||||
if (typeof msg.data === "undefined") return;
|
if (typeof msg.data === "undefined") return;
|
||||||
if (typeof msg.target !== "object") return;
|
if (typeof msg.target !== "object") return;
|
||||||
|
@ -52,7 +52,7 @@ export function loadBehaviors() {
|
||||||
m: "custom",
|
m: "custom",
|
||||||
data: msg.data,
|
data: msg.data,
|
||||||
p: sender.getUserID()
|
p: sender.getUserID()
|
||||||
} as ClientEvents["custom"]
|
} as OutgoingSocketEvents["custom"]
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
} else if (msg.target.mode === "ids") {
|
} else if (msg.target.mode === "ids") {
|
||||||
|
@ -65,7 +65,7 @@ export function loadBehaviors() {
|
||||||
m: "custom",
|
m: "custom",
|
||||||
data: msg.data,
|
data: msg.data,
|
||||||
p: sender.getUserID()
|
p: sender.getUserID()
|
||||||
} as ClientEvents["custom"]
|
} as OutgoingSocketEvents["custom"]
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
} else if (msg.target.mode === "subscribed") {
|
} else if (msg.target.mode === "subscribed") {
|
||||||
|
@ -74,7 +74,7 @@ export function loadBehaviors() {
|
||||||
m: "custom",
|
m: "custom",
|
||||||
data: msg.data,
|
data: msg.data,
|
||||||
p: sender.getUserID()
|
p: sender.getUserID()
|
||||||
} as ClientEvents["custom"]
|
} as OutgoingSocketEvents["custom"]
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ export class Gateway {
|
||||||
public isTokenValid = false; // implemented
|
public isTokenValid = false; // implemented
|
||||||
|
|
||||||
// Their user agent, if sent
|
// Their user agent, if sent
|
||||||
public userAgent = ""; // TODO
|
public userAgent = ""; // partially implemented
|
||||||
|
|
||||||
// Whether they have moved their cursor
|
// Whether they have moved their cursor
|
||||||
public hasCursorMoved = false; // implemented
|
public hasCursorMoved = false; // implemented
|
||||||
|
|
|
@ -6,13 +6,24 @@ export const userset: ServerEventListener<"userset"> = {
|
||||||
callback: async (msg, socket) => {
|
callback: async (msg, socket) => {
|
||||||
// Change username/color
|
// Change username/color
|
||||||
if (!socket.rateLimits?.chains.userset.attempt()) return;
|
if (!socket.rateLimits?.chains.userset.attempt()) return;
|
||||||
if (typeof msg.set.name !== "string" && typeof msg.set.color !== "string") return;
|
if (
|
||||||
|
typeof msg.set.name !== "string" &&
|
||||||
|
typeof msg.set.color !== "string"
|
||||||
|
)
|
||||||
|
return;
|
||||||
|
|
||||||
if (typeof msg.set.name == "string") {
|
const user = socket.getUser();
|
||||||
|
if (!user) return;
|
||||||
|
|
||||||
|
if (typeof msg.set.name == "string" && msg.set.name !== user.name) {
|
||||||
socket.gateway.hasChangedName = true;
|
socket.gateway.hasChangedName = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof msg.set.color == "string" && config.enableColorChanging) {
|
if (
|
||||||
|
typeof msg.set.color == "string" &&
|
||||||
|
msg.set.color !== user.color &&
|
||||||
|
config.enableColorChanging
|
||||||
|
) {
|
||||||
socket.gateway.hasChangedColor = true;
|
socket.gateway.hasChangedColor = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
// This is some convoluted dark magic I copied from some old mpp server I wrote
|
// Replicated note quota class from client
|
||||||
// No fucking clue where it came from or how it works internally, but I typedefized it
|
// with types!
|
||||||
// It's just a bunch of rate limits in a chain... like a RateLimitChain...... hmmmm.......
|
|
||||||
export class NoteQuota {
|
export class NoteQuota {
|
||||||
public allowance = 8000;
|
public allowance = 8000;
|
||||||
public max = 24000;
|
public max = 24000;
|
||||||
|
|
|
@ -14,10 +14,14 @@ export const adminLimits: RateLimitConstructorList = {
|
||||||
"-ls": () => new RateLimit(config.admin.normal["-ls"]),
|
"-ls": () => new RateLimit(config.admin.normal["-ls"]),
|
||||||
chown: () => new RateLimit(config.admin.normal.chown),
|
chown: () => new RateLimit(config.admin.normal.chown),
|
||||||
|
|
||||||
|
"+custom": () => new RateLimit(config.admin.normal["+custom"]),
|
||||||
|
"-custom": () => new RateLimit(config.admin.normal["-custom"]),
|
||||||
|
|
||||||
hi: () => new RateLimit(config.admin.normal.hi),
|
hi: () => new RateLimit(config.admin.normal.hi),
|
||||||
bye: () => new RateLimit(config.admin.normal.bye),
|
bye: () => new RateLimit(config.admin.normal.bye),
|
||||||
devices: () => new RateLimit(config.admin.normal.devices),
|
devices: () => new RateLimit(config.admin.normal.devices),
|
||||||
"admin message": () => new RateLimit(config.admin.normal["admin message"])
|
"admin message": () =>
|
||||||
|
new RateLimit(config.admin.normal["admin message"])
|
||||||
},
|
},
|
||||||
chains: {
|
chains: {
|
||||||
userset: () =>
|
userset: () =>
|
||||||
|
@ -28,12 +32,17 @@ export const adminLimits: RateLimitConstructorList = {
|
||||||
chset: () =>
|
chset: () =>
|
||||||
new RateLimitChain(
|
new RateLimitChain(
|
||||||
config.admin.chains.chset.num,
|
config.admin.chains.chset.num,
|
||||||
config.admin.chains.userset.interval
|
config.admin.chains.chset.interval
|
||||||
),
|
),
|
||||||
n: () =>
|
n: () =>
|
||||||
new RateLimitChain(
|
new RateLimitChain(
|
||||||
config.admin.chains.n.num,
|
config.admin.chains.n.num,
|
||||||
config.admin.chains.userset.interval
|
config.admin.chains.n.interval
|
||||||
|
),
|
||||||
|
custom: () =>
|
||||||
|
new RateLimitChain(
|
||||||
|
config.admin.chains.custom.num,
|
||||||
|
config.admin.chains.custom.interval
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -14,10 +14,14 @@ export const crownLimits: RateLimitConstructorList = {
|
||||||
"-ls": () => new RateLimit(config.crown.normal["-ls"]),
|
"-ls": () => new RateLimit(config.crown.normal["-ls"]),
|
||||||
chown: () => new RateLimit(config.crown.normal.chown),
|
chown: () => new RateLimit(config.crown.normal.chown),
|
||||||
|
|
||||||
|
"+custom": () => new RateLimit(config.crown.normal["+custom"]),
|
||||||
|
"-custom": () => new RateLimit(config.crown.normal["-custom"]),
|
||||||
|
|
||||||
hi: () => new RateLimit(config.crown.normal.hi),
|
hi: () => new RateLimit(config.crown.normal.hi),
|
||||||
bye: () => new RateLimit(config.crown.normal.bye),
|
bye: () => new RateLimit(config.crown.normal.bye),
|
||||||
devices: () => new RateLimit(config.crown.normal.devices),
|
devices: () => new RateLimit(config.crown.normal.devices),
|
||||||
"admin message": () => new RateLimit(config.crown.normal["admin message"])
|
"admin message": () =>
|
||||||
|
new RateLimit(config.crown.normal["admin message"])
|
||||||
},
|
},
|
||||||
chains: {
|
chains: {
|
||||||
userset: () =>
|
userset: () =>
|
||||||
|
@ -28,12 +32,17 @@ export const crownLimits: RateLimitConstructorList = {
|
||||||
chset: () =>
|
chset: () =>
|
||||||
new RateLimitChain(
|
new RateLimitChain(
|
||||||
config.crown.chains.chset.num,
|
config.crown.chains.chset.num,
|
||||||
config.crown.chains.userset.interval
|
config.crown.chains.chset.interval
|
||||||
),
|
),
|
||||||
n: () =>
|
n: () =>
|
||||||
new RateLimitChain(
|
new RateLimitChain(
|
||||||
config.crown.chains.n.num,
|
config.crown.chains.n.num,
|
||||||
config.crown.chains.userset.interval
|
config.crown.chains.n.interval
|
||||||
|
),
|
||||||
|
custom: () =>
|
||||||
|
new RateLimitChain(
|
||||||
|
config.crown.chains.custom.num,
|
||||||
|
config.crown.chains.custom.interval
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -14,10 +14,14 @@ export const userLimits: RateLimitConstructorList = {
|
||||||
"-ls": () => new RateLimit(config.user.normal["-ls"]),
|
"-ls": () => new RateLimit(config.user.normal["-ls"]),
|
||||||
chown: () => new RateLimit(config.user.normal.chown),
|
chown: () => new RateLimit(config.user.normal.chown),
|
||||||
|
|
||||||
|
"+custom": () => new RateLimit(config.user.normal["+custom"]),
|
||||||
|
"-custom": () => new RateLimit(config.user.normal["-custom"]),
|
||||||
|
|
||||||
hi: () => new RateLimit(config.user.normal.hi),
|
hi: () => new RateLimit(config.user.normal.hi),
|
||||||
bye: () => new RateLimit(config.user.normal.bye),
|
bye: () => new RateLimit(config.user.normal.bye),
|
||||||
devices: () => new RateLimit(config.user.normal.devices),
|
devices: () => new RateLimit(config.user.normal.devices),
|
||||||
"admin message": () => new RateLimit(config.user.normal["admin message"])
|
"admin message": () =>
|
||||||
|
new RateLimit(config.user.normal["admin message"])
|
||||||
},
|
},
|
||||||
chains: {
|
chains: {
|
||||||
userset: () =>
|
userset: () =>
|
||||||
|
@ -28,12 +32,17 @@ export const userLimits: RateLimitConstructorList = {
|
||||||
chset: () =>
|
chset: () =>
|
||||||
new RateLimitChain(
|
new RateLimitChain(
|
||||||
config.user.chains.chset.num,
|
config.user.chains.chset.num,
|
||||||
config.user.chains.userset.interval
|
config.user.chains.chset.interval
|
||||||
),
|
),
|
||||||
n: () =>
|
n: () =>
|
||||||
new RateLimitChain(
|
new RateLimitChain(
|
||||||
config.user.chains.n.num,
|
config.user.chains.n.num,
|
||||||
config.user.chains.userset.interval
|
config.user.chains.n.interval
|
||||||
|
),
|
||||||
|
custom: () =>
|
||||||
|
new RateLimitChain(
|
||||||
|
config.user.chains.custom.num,
|
||||||
|
config.user.chains.custom.num
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -15,7 +15,7 @@ const logger = new Logger("WebSocket Server");
|
||||||
|
|
||||||
// ip -> timestamp
|
// ip -> timestamp
|
||||||
// for checking if they visited the site and are also connected to the websocket
|
// for checking if they visited the site and are also connected to the websocket
|
||||||
const httpIpCache = new Map<string, number>();
|
export const httpIpCache = new Map<string, number>();
|
||||||
|
|
||||||
interface IFrontendConfig {
|
interface IFrontendConfig {
|
||||||
topButtons: "original" | "none";
|
topButtons: "original" | "none";
|
||||||
|
|
Loading…
Reference in New Issue