Skip to content

setPowerLevel seems to clobber existing power levels #1844

Closed
@reivilibre

Description

@reivilibre

setPowerLevel (

matrix-js-sdk/src/client.ts

Lines 3327 to 3357 in 696b3ef

/**
* Set a user's power level.
* @param {string} roomId
* @param {string} userId
* @param {Number} powerLevel
* @param {MatrixEvent} event
* @param {module:client.callback} callback Optional.
* @return {Promise} Resolves: to an ISendEventResponse object
* @return {module:http-api.MatrixError} Rejects: with an error response.
*/
public setPowerLevel(
roomId: string,
userId: string,
powerLevel: number,
event: MatrixEvent,
callback?: Callback,
): Promise<ISendEventResponse> {
let content = {
users: {},
};
if (event?.getType() === EventType.RoomPowerLevels) {
// take a copy of the content to ensure we don't corrupt
// existing client state with a failed power level change
content = utils.deepCopy(event.getContent()) as typeof content;
}
content.users[userId] = powerLevel;
const path = utils.encodeUri("/rooms/$roomId/state/m.room.power_levels", {
$roomId: roomId,
});
return this.http.authedRequest(callback, "PUT", path, undefined, content);
}
) is described as setting a user's power level.

However, when using it, it seemed to discard the remaining power levels.

I notice now that it takes a slightly underdocumented event parameter. Is this meant to be the prior power level state event?

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions