Compare commits
3 commits
ec1550bc97
...
8eee70a52a
Author | SHA1 | Date | |
---|---|---|---|
8eee70a52a | |||
3ec0dc718e | |||
0c1a015222 |
4 changed files with 28 additions and 14 deletions
22
package-lock.json
generated
22
package-lock.json
generated
|
@ -23,7 +23,7 @@
|
||||||
"ansi-colors": "^4.1.3",
|
"ansi-colors": "^4.1.3",
|
||||||
"better-sqlite3": "^11.1.2",
|
"better-sqlite3": "^11.1.2",
|
||||||
"chunk-text": "^2.0.1",
|
"chunk-text": "^2.0.1",
|
||||||
"cloudstorm": "^0.11.2",
|
"cloudstorm": "^0.11.6",
|
||||||
"discord-api-types": "^0.37.119",
|
"discord-api-types": "^0.37.119",
|
||||||
"domino": "^2.1.6",
|
"domino": "^2.1.6",
|
||||||
"enquirer": "^2.4.1",
|
"enquirer": "^2.4.1",
|
||||||
|
@ -1414,13 +1414,25 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/cloudstorm": {
|
"node_modules/cloudstorm": {
|
||||||
"version": "0.11.4",
|
"version": "0.11.6",
|
||||||
"resolved": "https://registry.npmjs.org/cloudstorm/-/cloudstorm-0.11.4.tgz",
|
"resolved": "https://registry.npmjs.org/cloudstorm/-/cloudstorm-0.11.6.tgz",
|
||||||
"integrity": "sha512-fk0tAyZmUBWrxELyXaKh19s1RJucmhmvTMfB/LrvdRHdUvc20VkD7qCrFaQHSQ/+kzwhSHVY43zNAjtz93pH9A==",
|
"integrity": "sha512-U3uWNwlE1LiRf1sDHAENb7oR9odosXMArRyX5bX+sG4c75nSqzbQm4wtczw93g9suFXsXu6ekuyHFLpoWMnM+g==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"discord-api-types": "^0.37.119",
|
"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": {
|
"engines": {
|
||||||
"node": ">=16.15.0"
|
"node": ">=16.15.0"
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
"ansi-colors": "^4.1.3",
|
"ansi-colors": "^4.1.3",
|
||||||
"better-sqlite3": "^11.1.2",
|
"better-sqlite3": "^11.1.2",
|
||||||
"chunk-text": "^2.0.1",
|
"chunk-text": "^2.0.1",
|
||||||
"cloudstorm": "^0.11.2",
|
"cloudstorm": "^0.11.6",
|
||||||
"discord-api-types": "^0.37.119",
|
"discord-api-types": "^0.37.119",
|
||||||
"domino": "^2.1.6",
|
"domino": "^2.1.6",
|
||||||
"enquirer": "^2.4.1",
|
"enquirer": "^2.4.1",
|
||||||
|
|
|
@ -194,10 +194,13 @@ async function syncUser(user, member, channel, guild, roomID) {
|
||||||
const currentHash = _hashProfileContent(content, powerLevel)
|
const currentHash = _hashProfileContent(content, powerLevel)
|
||||||
const existingHash = select("sim_member", "hashed_profile_content", {room_id: roomID, mxid}).safeIntegers().pluck().get()
|
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
|
// 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
|
// Update room member state
|
||||||
await api.sendState(roomID, "m.room.member", mxid, content, mxid)
|
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 powerLevelsStateContent = await api.getStateEvent(roomID, "m.room.power_levels", "")
|
||||||
const oldPowerLevel = powerLevelsStateContent.users?.[mxid] || 0
|
const oldPowerLevel = powerLevelsStateContent.users?.[mxid] || 0
|
||||||
mixin(powerLevelsStateContent, {users: {[mxid]: powerLevel}})
|
mixin(powerLevelsStateContent, {users: {[mxid]: powerLevel}})
|
||||||
|
|
|
@ -109,18 +109,17 @@ function emoji(emojiID, animated) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const stickerFormat = new Map([
|
const stickerFormat = new Map([
|
||||||
[1, {label: "PNG", ext: "png", mime: "image/png"}],
|
[1, {label: "PNG", ext: "png", mime: "image/png", endpoint: "/stickers/"}],
|
||||||
[2, {label: "APNG", ext: "png", mime: "image/apng"}],
|
[2, {label: "APNG", ext: "png", mime: "image/apng", endpoint: "/stickers/"}],
|
||||||
[3, {label: "LOTTIE", ext: "json", mime: "lottie"}],
|
[3, {label: "LOTTIE", ext: "json", mime: "lottie", endpoint: "/stickers/"}],
|
||||||
[4, {label: "GIF", ext: "gif", mime: "image/gif"}]
|
[4, {label: "GIF", ext: "gif", mime: "image/gif", endpoint: "https://media.discordapp.net/stickers/"}]
|
||||||
])
|
])
|
||||||
|
|
||||||
/** @param {{id: string, format_type: number}} sticker */
|
/** @param {{id: string, format_type: number}} sticker */
|
||||||
function sticker(sticker) {
|
function sticker(sticker) {
|
||||||
const format = stickerFormat.get(sticker.format_type)
|
const format = stickerFormat.get(sticker.format_type)
|
||||||
if (!format) throw new Error(`No such format ${sticker.format_type} for sticker ${JSON.stringify(sticker)}`)
|
if (!format) throw new Error(`No such format ${sticker.format_type} for sticker ${JSON.stringify(sticker)}`)
|
||||||
const ext = format.ext
|
return `${format.endpoint}${sticker.id}.${format.ext}`
|
||||||
return `/stickers/${sticker.id}.${ext}`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports.DISCORD_IMAGES_BASE = DISCORD_IMAGES_BASE
|
module.exports.DISCORD_IMAGES_BASE = DISCORD_IMAGES_BASE
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue