Tweak the power levels when creating a space (#6012)

* Tweak the power levels when creating a space

* Also tweak the `invite` power levels for public access rooms
This commit is contained in:
Jorge Martin Espinosa
2026-01-19 10:54:33 +01:00
committed by GitHub
parent acf919f2fb
commit ccd358ece5

View File

@@ -370,6 +370,9 @@ class RustMatrixClient(
override suspend fun createRoom(createRoomParams: CreateRoomParameters): Result<RoomId> = withContext(sessionDispatcher) {
runCatchingExceptions {
val hasPublicAccess = createRoomParams.preset == RoomPreset.PUBLIC_CHAT || createRoomParams.joinRuleOverride == JoinRule.Public
val powerLevels = defaultRoomCreationPowerLevels(isSpace = createRoomParams.isSpace, isPublic = hasPublicAccess)
val rustParams = RustCreateRoomParameters(
name = createRoomParams.name,
topic = createRoomParams.topic,
@@ -383,12 +386,12 @@ class RustMatrixClient(
},
invite = createRoomParams.invite?.map { it.value },
avatar = createRoomParams.avatar,
powerLevelContentOverride = defaultRoomCreationPowerLevels.copy(
powerLevelContentOverride = powerLevels.copy(
invite = if (createRoomParams.joinRuleOverride == JoinRule.Knock) {
// override the invite power level so it's the same as kick.
RoomMember.Role.Moderator.powerLevel.toInt()
} else {
null
powerLevels.invite
}
),
joinRuleOverride = createRoomParams.joinRuleOverride?.map(),
@@ -833,18 +836,23 @@ class RustMatrixClient(
}
}
private val defaultRoomCreationPowerLevels = PowerLevels(
private fun defaultRoomCreationPowerLevels(isPublic: Boolean, isSpace: Boolean) = PowerLevels(
usersDefault = null,
eventsDefault = null,
// Only admins should be able to send events in general
eventsDefault = if (isSpace) 100 else null,
stateDefault = null,
ban = null,
kick = null,
redact = null,
invite = null,
invite = if (isPublic) 0 else 50,
notifications = null,
users = mapOf(),
events = mapOf(
"m.call.member" to 0,
"org.matrix.msc3401.call.member" to 0,
)
events = if (!isSpace) {
mapOf(
"m.call.member" to 0,
"org.matrix.msc3401.call.member" to 0,
)
} else {
mapOf()
}
)