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:
committed by
GitHub
parent
acf919f2fb
commit
ccd358ece5
@@ -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()
|
||||
}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user