From c287a232ea97bcdcfefc385e1f3418caae53606f Mon Sep 17 00:00:00 2001 From: Hri7566 Date: Tue, 9 Jul 2024 04:05:44 -0400 Subject: [PATCH] Add restart message --- src/channel/Channel.ts | 2 +- src/util/types.d.ts | 4 ++++ src/ws/events/admin/handlers/reset.ts | 26 -------------------- src/ws/events/admin/handlers/restart.ts | 32 +++++++++++++++++++++++++ src/ws/events/admin/index.ts | 3 ++- 5 files changed, 39 insertions(+), 28 deletions(-) delete mode 100644 src/ws/events/admin/handlers/reset.ts create mode 100644 src/ws/events/admin/handlers/restart.ts diff --git a/src/channel/Channel.ts b/src/channel/Channel.ts index f5ae753..6682a71 100644 --- a/src/channel/Channel.ts +++ b/src/channel/Channel.ts @@ -92,7 +92,7 @@ export class Channel extends EventEmitter { if (this.alreadyBound) return; this.alreadyBound = true; this.loadChatHistory(); - this.logger.info("Loaded Chat History."); + this.logger.info("Loaded chat history"); this.on("update", () => { //this.logger.debug("-------- UPDATE START --------"); diff --git a/src/util/types.d.ts b/src/util/types.d.ts index 4f8811f..bd476ef 100644 --- a/src/util/types.d.ts +++ b/src/util/types.d.ts @@ -240,6 +240,10 @@ declare interface ServerEvents { targetChannel?: string; targetUser?: string; } & Notification; + + restart: { + m: "restart" + } } declare interface ClientEvents { diff --git a/src/ws/events/admin/handlers/reset.ts b/src/ws/events/admin/handlers/reset.ts deleted file mode 100644 index cd11201..0000000 --- a/src/ws/events/admin/handlers/reset.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { readUser, updateUser } from "../../../../data/user"; -import { ServerEventListener } from "../../../../util/types"; -import { findSocketsByUserID } from "../../../Socket"; - -export const name: ServerEventListener<"name"> = { - id: "name", - callback: async (msg, socket) => { - // Change someone else's name but it's an annoying admin feature - const id = msg._id; - const name = msg.name; - - if (typeof id !== "string") return; - if (typeof name !== "string") return; - - const user = await readUser(msg._id); - if (!user) return; - - user.name = name; - await updateUser(id, user); - - const toUpdate = findSocketsByUserID(id); - toUpdate.forEach(s => { - s.userset(msg.name, undefined, true); - }); - } -}; diff --git a/src/ws/events/admin/handlers/restart.ts b/src/ws/events/admin/handlers/restart.ts new file mode 100644 index 0000000..910d6aa --- /dev/null +++ b/src/ws/events/admin/handlers/restart.ts @@ -0,0 +1,32 @@ +import { readUser, updateUser } from "../../../../data/user"; +import { ServerEventListener } from "../../../../util/types"; +import { findSocketsByUserID, socketsBySocketID } from "../../../Socket"; + +let timeout: Timer; + +export const restart: ServerEventListener<"restart"> = { + id: "restart", + callback: async (msg, socket) => { + // Restart server + if (typeof timeout !== "undefined") { + return; + } + + // Let everyone know + for (const sock of socketsBySocketID.values()) { + sock.sendNotification({ + id: "server-restart", + target: "#piano", + duration: 20000, + class: "classic", + title: "Server Restart", + text: "The server is restarting soon." + }); + } + + setTimeout(() => { + // Stop the program + process.exit(); + }, 20000); + } +}; diff --git a/src/ws/events/admin/index.ts b/src/ws/events/admin/index.ts index d5f1f0a..599885e 100644 --- a/src/ws/events/admin/index.ts +++ b/src/ws/events/admin/index.ts @@ -6,12 +6,13 @@ export const EVENT_GROUP_ADMIN = new EventGroup("admin"); import { color } from "./handlers/color"; import { name } from "./handlers/name"; import { notification } from "./handlers/notification"; +import { restart } from "./handlers/restart"; import { user_flag } from "./handlers/user_flag"; // EVENT_GROUP_ADMIN.add(color); // EVENT_GROUP_ADMIN.add(name); // EVENT_GROUP_ADMIN.add(user_flag); -EVENT_GROUP_ADMIN.addMany(color, name, user_flag, clear_chat, notification); +EVENT_GROUP_ADMIN.addMany(color, name, user_flag, clear_chat, notification, restart); eventGroups.push(EVENT_GROUP_ADMIN);