getPowerLevelByUserId method

PowerLevel getPowerLevelByUserId(
  1. String userId
)

Returns the power level of the given user ID. If a user_id is in the users list, then that user_id has the associated power level. Otherwise they have the default level users_default. If users_default is not supplied, it is assumed to be 0. If the room contains no m.room.power_levels event, the room’s creator has a power level of 100, and all other users have a power level of 0. For room version 12 and above the room creator always has maximum power level.

Implementation

PowerLevel getPowerLevelByUserId(String userId) {
  // Room creator has maximum power level:
  if (creatorUserIds.contains(userId) &&
      !((int.tryParse(roomVersion ?? '') ?? 0) < 12)) {
    return PowerLevel.owner;
  }

  final powerLevelMap = getState(EventTypes.RoomPowerLevels)?.content;

  final userSpecificPowerLevel = powerLevelMap
      ?.tryGetMap<String, Object?>('users')
      ?.tryGet<int>(userId);

  final defaultUserPowerLevel = powerLevelMap?.tryGet<int>('users_default');

  final fallbackPowerLevel =
      getState(EventTypes.RoomCreate)?.senderId == userId
      ? PowerLevel.defaultAdminLevel
      : PowerLevel.defaultUserLevel;

  return PowerLevel(
    userSpecificPowerLevel ?? defaultUserPowerLevel ?? fallbackPowerLevel,
  );
}