diff --git a/package-lock.json b/package-lock.json index 880c744..50ff07c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "ansi-colors": "^4.1.3", "better-sqlite3": "^11.1.2", "chunk-text": "^2.0.1", - "cloudstorm": "^0.11.2", + "cloudstorm": "^0.11.6", "discord-api-types": "^0.37.119", "domino": "^2.1.6", "enquirer": "^2.4.1", @@ -1414,13 +1414,25 @@ } }, "node_modules/cloudstorm": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/cloudstorm/-/cloudstorm-0.11.4.tgz", - "integrity": "sha512-fk0tAyZmUBWrxELyXaKh19s1RJucmhmvTMfB/LrvdRHdUvc20VkD7qCrFaQHSQ/+kzwhSHVY43zNAjtz93pH9A==", + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/cloudstorm/-/cloudstorm-0.11.6.tgz", + "integrity": "sha512-U3uWNwlE1LiRf1sDHAENb7oR9odosXMArRyX5bX+sG4c75nSqzbQm4wtczw93g9suFXsXu6ekuyHFLpoWMnM+g==", "license": "MIT", "dependencies": { "discord-api-types": "^0.37.119", - "snowtransfer": "^0.12.0" + "snowtransfer": "^0.13.1" + }, + "engines": { + "node": ">=16.15.0" + } + }, + "node_modules/cloudstorm/node_modules/snowtransfer": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/snowtransfer/-/snowtransfer-0.13.1.tgz", + "integrity": "sha512-EMrvqCk0JVcpJILTV9JEvUi3VyC5kohcza9d9l034B+cXwLbOWKFhzKULBPe/VqTdx+aqFpdYCdb1/HDrRiZ1Q==", + "license": "MIT", + "dependencies": { + "discord-api-types": "^0.37.119" }, "engines": { "node": ">=16.15.0" diff --git a/package.json b/package.json index 8d06d9a..7092877 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "ansi-colors": "^4.1.3", "better-sqlite3": "^11.1.2", "chunk-text": "^2.0.1", - "cloudstorm": "^0.11.2", + "cloudstorm": "^0.11.6", "discord-api-types": "^0.37.119", "domino": "^2.1.6", "enquirer": "^2.4.1", diff --git a/src/d2m/actions/register-user.js b/src/d2m/actions/register-user.js index 2765909..d231e0f 100644 --- a/src/d2m/actions/register-user.js +++ b/src/d2m/actions/register-user.js @@ -194,10 +194,13 @@ async function syncUser(user, member, channel, guild, roomID) { const currentHash = _hashProfileContent(content, powerLevel) const existingHash = select("sim_member", "hashed_profile_content", {room_id: roomID, mxid}).safeIntegers().pluck().get() // only do the actual sync if the hash has changed since we last looked - if (existingHash !== currentHash) { + const hashHasChanged = existingHash !== currentHash + // however, do not overwrite pre-existing data if we already have data and `member` is not accessible, because this would replace good data with bad data + const wouldOverwritePreExisting = existingHash && !member + if (hashHasChanged && !wouldOverwritePreExisting) { // Update room member state await api.sendState(roomID, "m.room.member", mxid, content, mxid) - // Update power levels + // Update power levels (only if we can actually access the member roles) const powerLevelsStateContent = await api.getStateEvent(roomID, "m.room.power_levels", "") const oldPowerLevel = powerLevelsStateContent.users?.[mxid] || 0 mixin(powerLevelsStateContent, {users: {[mxid]: powerLevel}}) diff --git a/src/matrix/file.js b/src/matrix/file.js index 002f34f..2070a56 100644 --- a/src/matrix/file.js +++ b/src/matrix/file.js @@ -109,18 +109,17 @@ function emoji(emojiID, animated) { } const stickerFormat = new Map([ - [1, {label: "PNG", ext: "png", mime: "image/png"}], - [2, {label: "APNG", ext: "png", mime: "image/apng"}], - [3, {label: "LOTTIE", ext: "json", mime: "lottie"}], - [4, {label: "GIF", ext: "gif", mime: "image/gif"}] + [1, {label: "PNG", ext: "png", mime: "image/png", endpoint: "/stickers/"}], + [2, {label: "APNG", ext: "png", mime: "image/apng", endpoint: "/stickers/"}], + [3, {label: "LOTTIE", ext: "json", mime: "lottie", endpoint: "/stickers/"}], + [4, {label: "GIF", ext: "gif", mime: "image/gif", endpoint: "https://media.discordapp.net/stickers/"}] ]) /** @param {{id: string, format_type: number}} sticker */ function sticker(sticker) { const format = stickerFormat.get(sticker.format_type) if (!format) throw new Error(`No such format ${sticker.format_type} for sticker ${JSON.stringify(sticker)}`) - const ext = format.ext - return `/stickers/${sticker.id}.${ext}` + return `${format.endpoint}${sticker.id}.${format.ext}` } module.exports.DISCORD_IMAGES_BASE = DISCORD_IMAGES_BASE