Fix join bugs
This commit is contained in:
parent
e5fb941bb7
commit
ad083a7196
|
@ -31,7 +31,7 @@ import {
|
||||||
getSavedChannel,
|
getSavedChannel,
|
||||||
saveChannel
|
saveChannel
|
||||||
} from "../data/channel";
|
} from "../data/channel";
|
||||||
import { forceloadChannel } from "./forceLoad";
|
import { forceloadChannel } from "./forceload";
|
||||||
|
|
||||||
interface CachedKickban {
|
interface CachedKickban {
|
||||||
userId: string;
|
userId: string;
|
||||||
|
@ -91,7 +91,8 @@ export class Channel extends EventEmitter {
|
||||||
const data = {
|
const data = {
|
||||||
id: info._id,
|
id: info._id,
|
||||||
settings: JSON.stringify(info.settings),
|
settings: JSON.stringify(info.settings),
|
||||||
flags: JSON.stringify(this.flags)
|
flags: JSON.stringify(this.flags),
|
||||||
|
forceload: this.stays
|
||||||
};
|
};
|
||||||
|
|
||||||
//this.logger.debug("Channel data to save:", data);
|
//this.logger.debug("Channel data to save:", data);
|
||||||
|
@ -205,6 +206,7 @@ export class Channel extends EventEmitter {
|
||||||
}
|
}
|
||||||
|
|
||||||
private alreadyBound = false;
|
private alreadyBound = false;
|
||||||
|
private destroyTimeout: Timer | undefined;
|
||||||
|
|
||||||
private bindEventListeners() {
|
private bindEventListeners() {
|
||||||
if (this.alreadyBound) return;
|
if (this.alreadyBound) return;
|
||||||
|
@ -214,6 +216,12 @@ export class Channel extends EventEmitter {
|
||||||
this.logger.info("Loaded chat history");
|
this.logger.info("Loaded chat history");
|
||||||
|
|
||||||
this.on("update", (self, uuid) => {
|
this.on("update", (self, uuid) => {
|
||||||
|
// Propogate channel flags intended to be updated
|
||||||
|
if (typeof this.flags.owner_id === "string") {
|
||||||
|
this.settings.owner_id = this.flags.owner_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
// this.logger.debug("update");
|
||||||
// Send updated info
|
// Send updated info
|
||||||
for (const socket of socketsByUUID.values()) {
|
for (const socket of socketsByUUID.values()) {
|
||||||
for (const p of this.ppl) {
|
for (const p of this.ppl) {
|
||||||
|
@ -233,13 +241,20 @@ export class Channel extends EventEmitter {
|
||||||
|
|
||||||
if (this.ppl.length === 0 && !this.stays) {
|
if (this.ppl.length === 0 && !this.stays) {
|
||||||
if (config.channelDestroyTimeout) {
|
if (config.channelDestroyTimeout) {
|
||||||
setTimeout(() => {
|
this.destroyTimeout = setTimeout(() => {
|
||||||
this.destroy();
|
this.destroy();
|
||||||
}, config.channelDestroyTimeout);
|
}, config.channelDestroyTimeout);
|
||||||
} else {
|
} else {
|
||||||
this.destroy();
|
this.destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
this.ppl.length > 0 &&
|
||||||
|
typeof this.destroyTimeout !== "undefined"
|
||||||
|
) {
|
||||||
|
clearTimeout(this.destroyTimeout);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const BANNED_WORDS = ["AMIGHTYWIND", "CHECKLYHQ"];
|
const BANNED_WORDS = ["AMIGHTYWIND", "CHECKLYHQ"];
|
||||||
|
@ -670,7 +685,7 @@ export class Channel extends EventEmitter {
|
||||||
|
|
||||||
if (p) {
|
if (p) {
|
||||||
// Give the crown back
|
// Give the crown back
|
||||||
this.giveCrown(p, true, false);
|
this.giveCrown(p, true, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -716,7 +731,8 @@ export class Channel extends EventEmitter {
|
||||||
// Broadcast a channel update so everyone subscribed to the channel list can see the new user count
|
// Broadcast a channel update so everyone subscribed to the channel list can see the new user count
|
||||||
//this.emit("update", this, socket.getUUID());
|
//this.emit("update", this, socket.getUUID());
|
||||||
//this.logger.debug("Update from join");
|
//this.logger.debug("Update from join");
|
||||||
this.emit("update", this);
|
// this.emit("update", this);
|
||||||
|
socket.sendChannelUpdate(this.getInfo(), this.getParticipantList());
|
||||||
|
|
||||||
//this.logger.debug("Settings:", this.settings);
|
//this.logger.debug("Settings:", this.settings);
|
||||||
if (this.settings.owner_id === part._id) {
|
if (this.settings.owner_id === part._id) {
|
||||||
|
@ -730,7 +746,8 @@ export class Channel extends EventEmitter {
|
||||||
*/
|
*/
|
||||||
public leave(socket: Socket) {
|
public leave(socket: Socket) {
|
||||||
// this.logger.debug("Leave called");
|
// this.logger.debug("Leave called");
|
||||||
const part = socket.getParticipant() as IParticipant;
|
const part = socket.getParticipant();
|
||||||
|
if (!part) return;
|
||||||
|
|
||||||
let dupeCount = 0;
|
let dupeCount = 0;
|
||||||
for (const s of socketsByUUID.values()) {
|
for (const s of socketsByUUID.values()) {
|
||||||
|
@ -746,18 +763,22 @@ export class Channel extends EventEmitter {
|
||||||
if (dupeCount === 1) {
|
if (dupeCount === 1) {
|
||||||
const p = this.ppl.find(p => p.id === socket.getParticipantID());
|
const p = this.ppl.find(p => p.id === socket.getParticipantID());
|
||||||
|
|
||||||
|
let hadCrown = false;
|
||||||
|
|
||||||
if (p) {
|
if (p) {
|
||||||
this.ppl.splice(this.ppl.indexOf(p), 1);
|
this.ppl.splice(this.ppl.indexOf(p), 1);
|
||||||
|
|
||||||
if (this.crown) {
|
if (this.crown) {
|
||||||
if (this.crown.participantId === p.id) {
|
if (this.crown.participantId === p.id) {
|
||||||
// Channel owner left, reset crown timeout
|
// Channel owner left, reset crown timeout
|
||||||
|
hadCrown = true;
|
||||||
this.chown();
|
this.chown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Broadcast bye
|
// Broadcast bye
|
||||||
|
if (!hadCrown)
|
||||||
this.sendArray([
|
this.sendArray([
|
||||||
{
|
{
|
||||||
m: "bye",
|
m: "bye",
|
||||||
|
@ -766,7 +787,7 @@ export class Channel extends EventEmitter {
|
||||||
]);
|
]);
|
||||||
|
|
||||||
//this.logger.debug("Update from leave");
|
//this.logger.debug("Update from leave");
|
||||||
this.emit("update", this);
|
// this.emit("update", this);
|
||||||
} else {
|
} else {
|
||||||
for (const p of this.ppl) {
|
for (const p of this.ppl) {
|
||||||
if (!p.uuids.includes(socket.getUUID())) continue;
|
if (!p.uuids.includes(socket.getUUID())) continue;
|
||||||
|
@ -946,6 +967,7 @@ export class Channel extends EventEmitter {
|
||||||
*/
|
*/
|
||||||
public destroy() {
|
public destroy() {
|
||||||
if (this.destroyed) return;
|
if (this.destroyed) return;
|
||||||
|
|
||||||
this.destroyed = true;
|
this.destroyed = true;
|
||||||
|
|
||||||
if (this.ppl.length > 0) {
|
if (this.ppl.length > 0) {
|
||||||
|
@ -1308,6 +1330,8 @@ export class Channel extends EventEmitter {
|
||||||
val: TChannelFlags[K]
|
val: TChannelFlags[K]
|
||||||
) {
|
) {
|
||||||
this.flags[key] = val;
|
this.flags[key] = val;
|
||||||
|
this.logger.debug("Updating channel flag " + key + " to", val);
|
||||||
|
this.emit("update", this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1370,6 +1394,11 @@ export class Channel extends EventEmitter {
|
||||||
).toFixed(2)}M`
|
).toFixed(2)}M`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public setForceload(enable: boolean) {
|
||||||
|
this.stays = enable;
|
||||||
|
this.save();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Channel;
|
export default Channel;
|
||||||
|
|
|
@ -281,6 +281,11 @@ declare interface IncomingSocketEvents {
|
||||||
_id: string;
|
_id: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unforceload: {
|
||||||
|
m: "unforceload";
|
||||||
|
_id: string;
|
||||||
|
};
|
||||||
|
|
||||||
ch_flag: {
|
ch_flag: {
|
||||||
m: "ch_flag";
|
m: "ch_flag";
|
||||||
_id?: string;
|
_id?: string;
|
||||||
|
|
Loading…
Reference in New Issue