From 68d92cf254bccf4198c647eb93aff990e6bcf037 Mon Sep 17 00:00:00 2001 From: Kierre Date: Sun, 25 Jan 2026 11:26:52 -0500 Subject: [PATCH] `m.room.power_levels` events accept values as floats --- .../rooms/fragments/v1-floaty-power-levels.md | 34 +++++++++++++++++++ content/rooms/v1.md | 2 ++ content/rooms/v2.md | 2 ++ content/rooms/v3.md | 2 ++ content/rooms/v4.md | 2 ++ content/rooms/v5.md | 2 ++ 6 files changed, 44 insertions(+) create mode 100644 content/rooms/fragments/v1-floaty-power-levels.md diff --git a/content/rooms/fragments/v1-floaty-power-levels.md b/content/rooms/fragments/v1-floaty-power-levels.md new file mode 100644 index 00000000..8e395a43 --- /dev/null +++ b/content/rooms/fragments/v1-floaty-power-levels.md @@ -0,0 +1,34 @@ + +##### `m.room.power_levels` Events Accept Values as Floats + +When the value is a float, anything after the decimal point is removed, +making e.g. `5.17`, `5.42`, and `5` functionally identical. + +For example, this is a valid `m.room.power_levels` event in this room version: + +```json +{ + "content": { + "ban": 50, + "events": { + "m.room.power_levels": 100 + }, + "events_default": 0, + "state_default": 50, + "users": { + "@example:example.org": 100, + "@alice:localhost": 50, + "@bob:localhost": 50.57 + }, + "users_default": 0 + }, + "origin_server_ts": 1432735824653, + "room_id": "!jEsUZKDJdhlrceRyVU:example.org", + "sender": "@example:example.org", + "state_key": "", + "type": "m.room.power_levels" +} +``` + +In this example, both `@bob:localhost` and `@alice:localhost` have the same effective +power level of `50`, even though the values are visually different. diff --git a/content/rooms/v1.md b/content/rooms/v1.md index 773d7caa..c537b337 100644 --- a/content/rooms/v1.md +++ b/content/rooms/v1.md @@ -59,6 +59,8 @@ Events in version 1 rooms have the following structure: {{% rver-fragment name="v1-stringy-power-levels" %}} +{{% rver-fragment name="v1-floaty-power-levels" %}} + ### Authorization rules {{% rver-fragment name="v1-auth-rules" %}} diff --git a/content/rooms/v2.md b/content/rooms/v2.md index f0ea1ac7..17401932 100644 --- a/content/rooms/v2.md +++ b/content/rooms/v2.md @@ -57,6 +57,8 @@ Events in rooms of this version have the following structure: {{% rver-fragment name="v1-stringy-power-levels" %}} +{{% rver-fragment name="v1-floaty-power-levels" %}} + ### Authorization rules {{% rver-fragment name="v1-auth-rules" %}} diff --git a/content/rooms/v3.md b/content/rooms/v3.md index 6a3522b7..b89f7b59 100644 --- a/content/rooms/v3.md +++ b/content/rooms/v3.md @@ -87,6 +87,8 @@ The complete structure of a event in a v3 room is shown below. {{% rver-fragment name="v1-stringy-power-levels" %}} +{{% rver-fragment name="v1-floaty-power-levels" %}} + ### Authorization rules {{% boxes/note %}} diff --git a/content/rooms/v4.md b/content/rooms/v4.md index bd5651e1..bc8f620d 100644 --- a/content/rooms/v4.md +++ b/content/rooms/v4.md @@ -76,6 +76,8 @@ the changes in this room version. {{% rver-fragment name="v1-stringy-power-levels" %}} +{{% rver-fragment name="v1-floaty-power-levels" %}} + ### Authorization rules {{% rver-fragment name="v3-auth-rules" %}} diff --git a/content/rooms/v5.md b/content/rooms/v5.md index 665b0568..5bc0b943 100644 --- a/content/rooms/v5.md +++ b/content/rooms/v5.md @@ -58,6 +58,8 @@ completeness. {{% rver-fragment name="v1-stringy-power-levels" %}} +{{% rver-fragment name="v1-floaty-power-levels" %}} + ### Authorization rules {{% rver-fragment name="v3-auth-rules" %}}