diff --git a/package-lock.json b/package-lock.json index 2043820..44bbcbb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "get-relative-path": "^1.0.2", "get-stream": "^6.0.1", "h3": "^1.12.0", - "heatsync": "^2.6.0", + "heatsync": "^2.7.0", "lru-cache": "^10.4.3", "minimist": "^1.2.8", "prettier-bytes": "^1.0.4", @@ -1868,12 +1868,15 @@ } }, "node_modules/heatsync": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/heatsync/-/heatsync-2.6.0.tgz", - "integrity": "sha512-UfemOt4Kg1hvhDj/Zz8sYa1pF73ul+tF19MYNisYoOymXoTo4iCZv2BDdCMFE1xvZ6YFjcMoekb/aeBU1uqFjQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/heatsync/-/heatsync-2.7.0.tgz", + "integrity": "sha512-9ILOyyHFZKfIrqBmNz+fwKd+zupFE2UqFZ9k4FjRcMjNDp7GtW+K9n2htXLy3CwdDTRd6NV6BPxKvU51UqKIJA==", "license": "MIT", "dependencies": { "backtracker": "^4.0.0" + }, + "engines": { + "node": ">=14.6.0" } }, "node_modules/html-es6cape": { diff --git a/package.json b/package.json index 1ee12ad..83dc636 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "get-relative-path": "^1.0.2", "get-stream": "^6.0.1", "h3": "^1.12.0", - "heatsync": "^2.6.0", + "heatsync": "^2.7.0", "lru-cache": "^10.4.3", "minimist": "^1.2.8", "prettier-bytes": "^1.0.4", diff --git a/src/d2m/actions/set-presence.js b/src/d2m/actions/set-presence.js index a9f072a..d16835e 100644 --- a/src/d2m/actions/set-presence.js +++ b/src/d2m/actions/set-presence.js @@ -38,13 +38,14 @@ const guildPresenceSetting = new class { } } -class Presence { +class Presence extends sync.ReloadableClass { /** @type {string} */ userID /** @type {{presence: "online" | "offline" | "unavailable", status_msg?: string}} */ data /** @private @type {?string | undefined} */ mxid /** @private @type {number} */ delay = Math.random() constructor(userID) { + super() this.userID = userID } @@ -66,12 +67,13 @@ class Presence { // This random delay will space them out over the whole 28 second cycle. setTimeout(() => { api.setPresence(this.data, mxid).catch(() => {}) - }, this.delay) + }, this.delay * presenceLoopInterval).unref() } } +sync.reloadClassMethods(Presence) const presenceTracker = new class { - /** @private @type {Map} userID -> Presence */ presences + /** @private @type {Map} userID -> Presence */ presences = sync.remember(() => new Map()) constructor() { sync.addTemporaryInterval(() => this.syncPresences(), presenceLoopInterval) diff --git a/src/stdin.js b/src/stdin.js index 9051395..6c49bdd 100644 --- a/src/stdin.js +++ b/src/stdin.js @@ -19,6 +19,7 @@ const eventDispatcher = sync.require("./d2m/event-dispatcher") const updatePins = sync.require("./d2m/actions/update-pins") const speedbump = sync.require("./d2m/actions/speedbump") const ks = sync.require("./matrix/kstate") +const setPresence = sync.require("./d2m/actions/set-presence") const guildID = "112760669178241024" const extraContext = {} diff --git a/src/web/server.test.js b/src/web/server.test.js index 7310166..afcb8b0 100644 --- a/src/web/server.test.js +++ b/src/web/server.test.js @@ -1,5 +1,6 @@ // @ts-check +const {ReadableStream} = require("stream/web") const {test} = require("supertape") const {router} = require("../../test/web") const assert = require("assert").strict