getPowerLevelByUserId method
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,
);
}