#[non_exhaustive]pub struct RoomPowerLevels {
pub ban: Int,
pub events: BTreeMap<TimelineEventType, Int>,
pub events_default: Int,
pub invite: Int,
pub kick: Int,
pub redact: Int,
pub state_default: Int,
pub users: BTreeMap<OwnedUserId, Int>,
pub users_default: Int,
pub notifications: NotificationPowerLevels,
pub rules: RoomPowerLevelsRules,
}
Expand description
The effective power levels of a room.
This struct contains all the power levels settings from the specification and can be constructed
from several RoomPowerLevelsSource
s, which means that it can be used when wanting to inspect
the power levels of a room, regardless of whether the most recent power levels event is redacted
or not, or the room has no power levels event.
This can also be used to change the power levels of a room by mutating it and then converting it
to a RoomPowerLevelsEventContent
using RoomPowerLevelsEventContent::try_from
/
.try_into()
. This allows to validate the format of the power levels before sending them. Note
that the homeserver might still refuse the power levels changes depending on the current power
level of the sender.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. }
syntax; cannot be matched against without a wildcard ..
; and struct update syntax will not work.ban: Int
The level required to ban a user.
When built from RoomPowerLevelsSource::None
, defaults to 50
.
events: BTreeMap<TimelineEventType, Int>
The level required to send specific event types.
This is a mapping from event type to power level required.
When built from RoomPowerLevelsSource::None
, defaults to an empty map.
events_default: Int
The default level required to send message events.
When built from RoomPowerLevelsSource::None
, defaults to 0
.
invite: Int
The level required to invite a user.
When built from RoomPowerLevelsSource::None
, defaults to 0
.
kick: Int
The level required to kick a user.
When built from RoomPowerLevelsSource::None
, defaults to 50
.
redact: Int
The level required to redact an event.
When built from RoomPowerLevelsSource::None
, defaults to 50
.
state_default: Int
The default level required to send state events.
When built from RoomPowerLevelsSource::None
, defaults to 50
.
users: BTreeMap<OwnedUserId, Int>
The power levels for specific users.
This is a mapping from user_id
to power level for that user.
Must NOT contain creators of the room in room versions where the
explicitly_privilege_room_creators
field of AuthorizationRules
is set to true
. This
would result in an error when trying to convert this to a RoomPowerLevelsEventContent
.
When built from RoomPowerLevelsSource::None
:
- If
explicitly_privilege_room_creators
is set tofalse
for the room version, defaults to setting the power level to100
for the creator(s) of the room. - Otherwise, defaults to an empty map.
users_default: Int
The default power level for every user in the room.
When built from RoomPowerLevelsSource::None
, defaults to 0
.
notifications: NotificationPowerLevels
The power level requirements for specific notification types.
This is a mapping from key
to power level for that notifications key.
When built from RoomPowerLevelsSource::None
, uses its Default
implementation.
rules: RoomPowerLevelsRules
The tweaks for determining the power level of a user.
Implementations§
Source§impl RoomPowerLevels
impl RoomPowerLevels
Sourcepub fn new(
power_levels: RoomPowerLevelsSource,
rules: &AuthorizationRules,
creators: impl IntoIterator<Item = OwnedUserId> + Clone,
) -> Self
pub fn new( power_levels: RoomPowerLevelsSource, rules: &AuthorizationRules, creators: impl IntoIterator<Item = OwnedUserId> + Clone, ) -> Self
Constructs RoomPowerLevels
from RoomPowerLevelsSource
, AuthorizationRules
and the
creators of a room.
Sourcepub fn for_user(&self, user_id: &UserId) -> UserPowerLevel
pub fn for_user(&self, user_id: &UserId) -> UserPowerLevel
Get the power level of a specific user.
Sourcepub fn for_action(&self, action: PowerLevelAction) -> Int
pub fn for_action(&self, action: PowerLevelAction) -> Int
Get the power level required to perform a given action.
Sourcepub fn for_message(&self, msg_type: MessageLikeEventType) -> Int
pub fn for_message(&self, msg_type: MessageLikeEventType) -> Int
Get the power level required to send the given message type.
Sourcepub fn for_state(&self, state_type: StateEventType) -> Int
pub fn for_state(&self, state_type: StateEventType) -> Int
Get the power level required to send the given state event type.
Sourcepub fn user_can_ban(&self, user_id: &UserId) -> bool
pub fn user_can_ban(&self, user_id: &UserId) -> bool
Whether the given user can ban other users based on the power levels.
Shorthand for power_levels.user_can_do(user_id, PowerLevelAction::Ban)
.
Sourcepub fn user_can_ban_user(
&self,
acting_user_id: &UserId,
target_user_id: &UserId,
) -> bool
pub fn user_can_ban_user( &self, acting_user_id: &UserId, target_user_id: &UserId, ) -> bool
Whether the acting user can ban the target user based on the power levels.
On top of power_levels.user_can_ban(acting_user_id)
, this performs an extra check
to make sure the acting user has at greater power level than the target user.
Shorthand for power_levels.user_can_do_to_user(acting_user_id, target_user_id, PowerLevelUserAction::Ban)
.
Sourcepub fn user_can_unban(&self, user_id: &UserId) -> bool
pub fn user_can_unban(&self, user_id: &UserId) -> bool
Whether the given user can unban other users based on the power levels.
This action requires to be allowed to ban and to kick.
Shorthand for power_levels.user_can_do(user_id, PowerLevelAction::Unban)
.
Sourcepub fn user_can_unban_user(
&self,
acting_user_id: &UserId,
target_user_id: &UserId,
) -> bool
pub fn user_can_unban_user( &self, acting_user_id: &UserId, target_user_id: &UserId, ) -> bool
Whether the acting user can unban the target user based on the power levels.
This action requires to be allowed to ban and to kick.
On top of power_levels.user_can_unban(acting_user_id)
, this performs an extra check
to make sure the acting user has at greater power level than the target user.
Shorthand for power_levels.user_can_do_to_user(acting_user_id, target_user_id, PowerLevelUserAction::Unban)
.
Sourcepub fn user_can_invite(&self, user_id: &UserId) -> bool
pub fn user_can_invite(&self, user_id: &UserId) -> bool
Whether the given user can invite other users based on the power levels.
Shorthand for power_levels.user_can_do(user_id, PowerLevelAction::Invite)
.
Sourcepub fn user_can_kick(&self, user_id: &UserId) -> bool
pub fn user_can_kick(&self, user_id: &UserId) -> bool
Whether the given user can kick other users based on the power levels.
Shorthand for power_levels.user_can_do(user_id, PowerLevelAction::Kick)
.
Sourcepub fn user_can_kick_user(
&self,
acting_user_id: &UserId,
target_user_id: &UserId,
) -> bool
pub fn user_can_kick_user( &self, acting_user_id: &UserId, target_user_id: &UserId, ) -> bool
Whether the acting user can kick the target user based on the power levels.
On top of power_levels.user_can_kick(acting_user_id)
, this performs an extra check
to make sure the acting user has at least the same power level as the target user.
Shorthand for power_levels.user_can_do_to_user(acting_user_id, target_user_id, PowerLevelUserAction::Kick)
.
Sourcepub fn user_can_redact_own_event(&self, user_id: &UserId) -> bool
pub fn user_can_redact_own_event(&self, user_id: &UserId) -> bool
Whether the given user can redact their own events based on the power levels.
Shorthand for power_levels.user_can_do(user_id, PowerLevelAction::RedactOwn)
.
Sourcepub fn user_can_redact_event_of_other(&self, user_id: &UserId) -> bool
pub fn user_can_redact_event_of_other(&self, user_id: &UserId) -> bool
Whether the given user can redact events of other users based on the power levels.
Shorthand for power_levels.user_can_do(user_id, PowerLevelAction::RedactOthers)
.
Sourcepub fn user_can_send_message(
&self,
user_id: &UserId,
msg_type: MessageLikeEventType,
) -> bool
pub fn user_can_send_message( &self, user_id: &UserId, msg_type: MessageLikeEventType, ) -> bool
Whether the given user can send message events based on the power levels.
Shorthand for power_levels.user_can_do(user_id, PowerLevelAction::SendMessage(msg_type))
.
Sourcepub fn user_can_send_state(
&self,
user_id: &UserId,
state_type: StateEventType,
) -> bool
pub fn user_can_send_state( &self, user_id: &UserId, state_type: StateEventType, ) -> bool
Whether the given user can send state events based on the power levels.
Shorthand for power_levels.user_can_do(user_id, PowerLevelAction::SendState(state_type))
.
Sourcepub fn user_can_trigger_room_notification(&self, user_id: &UserId) -> bool
pub fn user_can_trigger_room_notification(&self, user_id: &UserId) -> bool
Whether the given user can notify everybody in the room by writing @room
in a message.
Shorthand for power_levels.user_can_do(user_id, PowerLevelAction::TriggerNotification(NotificationPowerLevelType::Room))
.
Sourcepub fn user_can_change_user_power_level(
&self,
acting_user_id: &UserId,
target_user_id: &UserId,
) -> bool
pub fn user_can_change_user_power_level( &self, acting_user_id: &UserId, target_user_id: &UserId, ) -> bool
Whether the acting user can change the power level of the target user.
Shorthand for power_levels.user_can_do_to_user(acting_user_id, target_user_id, PowerLevelUserAction::ChangePowerLevel
.
Sourcepub fn user_can_do(&self, user_id: &UserId, action: PowerLevelAction) -> bool
pub fn user_can_do(&self, user_id: &UserId, action: PowerLevelAction) -> bool
Whether the given user can do the given action based on the power levels.
Sourcepub fn user_can_do_to_user(
&self,
acting_user_id: &UserId,
target_user_id: &UserId,
action: PowerLevelUserAction,
) -> bool
pub fn user_can_do_to_user( &self, acting_user_id: &UserId, target_user_id: &UserId, action: PowerLevelUserAction, ) -> bool
Whether the acting user can do the given action to the target user based on the power levels.
Trait Implementations§
Source§impl Clone for RoomPowerLevels
impl Clone for RoomPowerLevels
Source§fn clone(&self) -> RoomPowerLevels
fn clone(&self) -> RoomPowerLevels
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more