mirror of
https://gitdab.com/cadence/out-of-your-element.git
synced 2025-09-10 12:22:50 +02:00
Add test case for something that was irking me
This commit is contained in:
parent
2614493646
commit
e306b95764
4 changed files with 667 additions and 17 deletions
|
@ -211,14 +211,7 @@ async function syncUser(user, member, channel, guild, roomID) {
|
|||
// Update room member state
|
||||
await api.sendState(roomID, "m.room.member", mxid, content, mxid)
|
||||
// Update power levels (only if we can actually access the member roles)
|
||||
/** @type {Ty.Event.M_Power_Levels} */
|
||||
const powerLevelsStateContent = await api.getStateEvent(roomID, "m.room.power_levels", "")
|
||||
const oldPowerLevel = powerLevelsStateContent.users?.[mxid] || powerLevelsStateContent.events_default || 0
|
||||
mixin(powerLevelsStateContent, {users: {[mxid]: powerLevel}})
|
||||
if (powerLevel === powerLevelsStateContent.events_default || 0) delete powerLevelsStateContent.users?.[mxid] // keep the event compact
|
||||
const botPowerLevel = powerLevelsStateContent.users?.[`@${reg.sender_localpart}:${reg.ooye.server_name}`] || 100
|
||||
const sendPowerLevelAs = oldPowerLevel === botPowerLevel ? mxid : undefined // bridge bot can't demote equal power users, so do this action as themselves
|
||||
await api.sendState(roomID, "m.room.power_levels", "", powerLevelsStateContent, sendPowerLevelAs)
|
||||
await api.setUserPower(roomID, mxid, powerLevel)
|
||||
// Update cached hash
|
||||
db.prepare("UPDATE sim_member SET hashed_profile_content = ? WHERE room_id = ? AND mxid = ?").run(currentHash, roomID, mxid)
|
||||
}
|
||||
|
|
|
@ -117,3 +117,10 @@ test("member2power: can manage channels = 100", async t => {
|
|||
}, data.guild.data_horde, data.channel.saving_the_world)
|
||||
t.equal(power, 100)
|
||||
})
|
||||
|
||||
test("member2power: pathfinder use case", async t => {
|
||||
const power = _memberToPowerLevel(data.user.jerassicore, {
|
||||
roles: ["1235396773510647810", "1359752622130593802", "1249165855632265267", "1380768596929806356", "1380756348190462015"]
|
||||
}, data.guild.pathfinder, data.channel.character_art)
|
||||
t.equal(power, 50)
|
||||
})
|
||||
|
|
|
@ -308,21 +308,29 @@ async function profileSetAvatarUrl(mxid, avatar_url) {
|
|||
* Set a user's power level within a room.
|
||||
* @param {string} roomID
|
||||
* @param {string} mxid
|
||||
* @param {number} power
|
||||
* @param {number} newPower
|
||||
*/
|
||||
async function setUserPower(roomID, mxid, power) {
|
||||
async function setUserPower(roomID, mxid, newPower) {
|
||||
assert(roomID[0] === "!")
|
||||
assert(mxid[0] === "@")
|
||||
// Yes there's no shortcut https://github.com/matrix-org/matrix-appservice-bridge/blob/2334b0bae28a285a767fe7244dad59f5a5963037/src/components/intent.ts#L352
|
||||
const powerLevels = await getStateEvent(roomID, "m.room.power_levels", "")
|
||||
powerLevels.users = powerLevels.users || {}
|
||||
if (power != null) {
|
||||
powerLevels.users[mxid] = power
|
||||
const power = await getStateEvent(roomID, "m.room.power_levels", "")
|
||||
power.users = power.users || {}
|
||||
|
||||
// Bridge bot can't demote equal power users, so need to decide which user will send the event
|
||||
const oldPowerLevel = power.users?.[mxid] || power.events_default || 0
|
||||
const botPowerLevel = power.users?.[`@${reg.sender_localpart}:${reg.ooye.server_name}`] || 100
|
||||
const eventSender = oldPowerLevel >= botPowerLevel ? mxid : undefined
|
||||
|
||||
// Update the event content
|
||||
if (newPower == null || newPower === (power.events_default || 0)) {
|
||||
delete power.users[mxid]
|
||||
} else {
|
||||
delete powerLevels.users[mxid]
|
||||
power.users[mxid] = newPower
|
||||
}
|
||||
await sendState(roomID, "m.room.power_levels", "", powerLevels)
|
||||
return powerLevels
|
||||
|
||||
await sendState(roomID, "m.room.power_levels", "", power, eventSender)
|
||||
return power
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue