diff --git a/src/components/Chat.vue b/src/components/Chat.vue
index e03c595..3ea47df 100644
--- a/src/components/Chat.vue
+++ b/src/components/Chat.vue
@@ -41,7 +41,9 @@
v-on:download="download(selectedEvent)" v-on:more="
isEmojiQuickReaction= true
showMoreMessageOperations({event: selectedEvent, anchor: $event.anchor})
- " :originalEvent="selectedEvent" :timelineSet="timelineSet" />
+ " :originalEvent="selectedEvent" :timelineSet="timelineSet"
+ :readOnlyRoom="$matrix.currentRoomIsReadOnlyForUser"
+ />
diff --git a/src/components/CreateRoom.vue b/src/components/CreateRoom.vue
index 7825678..7835d2d 100644
--- a/src/components/CreateRoom.vue
+++ b/src/components/CreateRoom.vue
@@ -477,14 +477,25 @@ export default {
// Set power level event. Need to do that here, because we might not have the userId when the options object is created.
const powerLevels = {};
powerLevels[this.$matrix.currentUserId] = 100;
+ let powerLevelContent = {
+ users: powerLevels,
+ events_default: this.readOnlyRoom ? 50 : 0
+ }
+ if (this.readOnlyRoom) {
+ powerLevelContent.events = {
+ "m.room.encrypted": 0, // NOTE! Since practically all events in encrypted rooms get sent as "m.room.encrypted" we need to set
+ // power to 0 here. Otherwise we would not be able to send quick reactions or poll responses...
+ "m.poll.response": 0,
+ "org.matrix.msc3381.poll.response": 0,
+ "m.reaction": 0,
+ "m.room.redaction": 0,
+ };
+ }
createRoomOptions.initial_state.push(
{
type: "m.room.power_levels",
state_key: "",
- content: {
- users: powerLevels,
- events_default: this.readOnlyRoom ? 50 : 0
- }
+ content: powerLevelContent
});
return this.$matrix.matrixClient
diff --git a/src/components/messages/MessageIncoming.vue b/src/components/messages/MessageIncoming.vue
index 456b1f9..6e945be 100644
--- a/src/components/messages/MessageIncoming.vue
+++ b/src/components/messages/MessageIncoming.vue
@@ -15,7 +15,7 @@
-