setUserPower should account for room version 12

This commit is contained in:
Cadence Ember
2026-01-07 15:38:09 +13:00
parent 55e0e5dfa1
commit 4bea696a5a
29 changed files with 199 additions and 133 deletions
+3 -3
View File
@@ -9,8 +9,8 @@ const {InteractionMethods} = require("snowtransfer")
/** @type {import("../../matrix/api")} */
const api = sync.require("../../matrix/api")
/** @type {import("../../m2d/converters/utils")} */
const utils = sync.require("../../m2d/converters/utils")
/** @type {import("../../matrix/utils")} */
const utils = sync.require("../../matrix/utils")
/**
* @param {DiscordTypes.APIContextMenuGuildInteraction} interaction
@@ -126,7 +126,7 @@ async function* _interactEdit({data, guild_id, message}, {api}) {
assert(spaceID)
// Do it
await api.setUserPowerCascade(spaceID, mxid, power)
await utils.setUserPowerCascade(spaceID, mxid, power, api)
// ACK
yield {editOriginalInteractionResponse: {
+69 -15
View File
@@ -2,7 +2,7 @@ const {test} = require("supertape")
const DiscordTypes = require("discord-api-types/v10")
const {select, db} = require("../../passthrough")
const {_interact, _interactEdit} = require("./permissions")
const {mockGetEffectivePower} = require("../../m2d/converters/utils.test")
const {mockGetEffectivePower} = require("../../matrix/utils.test")
/**
* @template T
@@ -156,7 +156,7 @@ test("permissions: reports permissions of selected matrix user (admin v11 cannot
})
test("permissions: can update user to moderator", async t => {
let called = 0
let called = []
const msgs = await fromAsync(_interactEdit({
data: {
target_id: "1128118177155526666",
@@ -168,22 +168,48 @@ test("permissions: can update user to moderator", async t => {
guild_id: "112760669178241024"
}, {
api: {
async setUserPowerCascade(roomID, mxid, power) {
called++
t.equal(roomID, "!jjmvBegULiLucuWEHU:cadence.moe") // space ID
t.equal(mxid, "@cadence:cadence.moe")
t.equal(power, 50)
async getStateEvent(roomID, type, key) {
called.push("get power levels")
t.equal(type, "m.room.power_levels")
return {}
},
async getStateEventOuter(roomID, type, key) {
called.push("get room create")
return {
type: "m.room.create",
state_key: "",
sender: "@_ooye_bot:cadence.moe",
event_id: "$create",
origin_server_ts: 0,
room_id: roomID,
content: {
room_version: "11"
}
}
},
async *generateFullHierarchy(spaceID) {
called.push("generate full hierarchy")
},
async sendState(roomID, type, key, content) {
called.push("set power levels")
t.ok(["!hierarchy", "!jjmvBegULiLucuWEHU:cadence.moe"].includes(roomID), `expected room ID to be in hierarchy, but was ${roomID}`)
t.equal(type, "m.room.power_levels")
t.equal(key, "")
t.deepEqual(content, {
users: {"@cadence:cadence.moe": 50}
})
return "$updated"
}
}
}))
t.equal(msgs.length, 2)
t.equal(msgs[0].createInteractionResponse.data.content, "Updating `@cadence:cadence.moe` to **moderator**, please wait...")
t.equal(msgs[1].editOriginalInteractionResponse.content, "Updated `@cadence:cadence.moe` to **moderator**.")
t.equal(called, 1)
t.deepEqual(called, ["generate full hierarchy", "get room create", "get power levels", "set power levels"])
})
test("permissions: can update user to default", async t => {
let called = 0
let called = []
const msgs = await fromAsync(_interactEdit({
data: {
target_id: "1128118177155526666",
@@ -195,16 +221,44 @@ test("permissions: can update user to default", async t => {
guild_id: "112760669178241024"
}, {
api: {
async setUserPowerCascade(roomID, mxid, power) {
called++
t.equal(roomID, "!jjmvBegULiLucuWEHU:cadence.moe") // space ID
t.equal(mxid, "@cadence:cadence.moe")
t.equal(power, 0)
async getStateEvent(roomID, type, key) {
called.push("get power levels")
t.equal(type, "m.room.power_levels")
return {
users: {"@cadence:cadence.moe": 50}
}
},
async getStateEventOuter(roomID, type, key) {
called.push("get room create")
return {
type: "m.room.create",
state_key: "",
sender: "@_ooye_bot:cadence.moe",
event_id: "$create",
origin_server_ts: 0,
room_id: roomID,
content: {
room_version: "11"
}
}
},
async *generateFullHierarchy(spaceID) {
called.push("generate full hierarchy")
},
async sendState(roomID, type, key, content) {
called.push("set power levels")
t.ok(["!hierarchy", "!jjmvBegULiLucuWEHU:cadence.moe"].includes(roomID), `expected room ID to be in hierarchy, but was ${roomID}`)
t.equal(type, "m.room.power_levels")
t.equal(key, "")
t.deepEqual(content, {
users: {}
})
return "$updated"
}
}
}))
t.equal(msgs.length, 2)
t.equal(msgs[0].createInteractionResponse.data.content, "Updating `@cadence:cadence.moe` to **default**, please wait...")
t.equal(msgs[1].editOriginalInteractionResponse.content, "Updated `@cadence:cadence.moe` to **default**.")
t.equal(called, 1)
t.deepEqual(called, ["generate full hierarchy", "get room create", "get power levels", "set power levels"])
})
+2 -2
View File
@@ -7,8 +7,8 @@ const {InteractionMethods} = require("snowtransfer")
/** @type {import("../../matrix/api")} */
const api = sync.require("../../matrix/api")
/** @type {import("../../m2d/converters/utils")} */
const utils = sync.require("../../m2d/converters/utils")
/** @type {import("../../matrix/utils")} */
const utils = sync.require("../../matrix/utils")
/**
* @param {DiscordTypes.APIMessageApplicationCommandGuildInteraction} interaction