From 51186172c070d4e84418cabb05f37be8038cc16b Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Sat, 10 Jul 2021 19:40:50 -0600 Subject: [PATCH] Set permissions for invited users to allow changing visible room name, inviting others, etc. --- main.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/main.js b/main.js index c0d3461..00eece2 100644 --- a/main.js +++ b/main.js @@ -121,11 +121,13 @@ function createOrJoinSMSRoom(tel, ournumber, callback) { if (inRoom) { // we're already in the room, do nothing logger.debug("Room " + roomName + " already joined."); + setSMSRoomPowerLevels(res.room_id); callback(res.room_id); } else { // not in the room, join it client.joinRoom(res.room_id).then((room) => { logger.debug("Room " + roomName + " joined."); + setSMSRoomPowerLevels(res.room_id); callback(room.room_id); }); } @@ -141,6 +143,7 @@ function createOrJoinSMSRoom(tel, ournumber, callback) { topic: "SMS conversation with " + formatPhoneNumber(tel, "(NNN) NNN-NNNN") + " (using " + formatPhoneNumber(ournumber, "(NNN) NNN-NNNN") + ")" }).then((room) => { logger.debug("Room" + roomName + " created with ID " + room.room_id); + setSMSRoomPowerLevels(res.room_id); // The first message or two we send doesn't go through unless we do this. // It just spits out "Error sending event M_FORBIDDEN: Unknown room" instead. @@ -149,6 +152,29 @@ function createOrJoinSMSRoom(tel, ournumber, callback) { }); } +function setSMSRoomPowerLevels(roomid) { + var userPowerLevels = {}; + for (var i = 0; i < settings.inviteusers.length; i++) { + userPowerLevels[settings.inviteusers[i]] = 50; + } + client.sendEvent(roomid, "m.room.power_levels", { + "events": { + "m.room.name": 50, + "m.room.power_levels": 50 + }, + "events_default": 0, + "invite": 50, + "kick": 50, + "notifications": { + "room": 50 + }, + "redact": 50, + "state_default": 50, + "users": userPowerLevels, + "users_default": 0 + }); +} + function getAndUploadFile(url, callback) { logger.info("Downloading MMS media " + url); // download @@ -357,6 +383,9 @@ client.login("m.login.password", {"user": settings.matrixuser, "password": setti }); } return; + } else if (event.getContent().body.startsWith("!fixperms")) { + sendMatrixNotice(event.getRoomId(), "Resetting power levels for this room."); + setSMSRoomPowerLevels(event.getRoomId()); } const matches = room.name.match(/([1-9][0-9]+)/g); if (matches.length == 1) {