Struct RoomPowerLevels
#[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§
§impl RoomPowerLevels
impl RoomPowerLevels
pub fn new(
power_levels: RoomPowerLevelsSource,
rules: &AuthorizationRules,
creators: impl IntoIterator<Item = OwnedUserId> + Clone,
) -> RoomPowerLevels
pub fn new( power_levels: RoomPowerLevelsSource, rules: &AuthorizationRules, creators: impl IntoIterator<Item = OwnedUserId> + Clone, ) -> RoomPowerLevels
Constructs RoomPowerLevels
from RoomPowerLevelsSource
, AuthorizationRules
and the
creators of a room.
pub 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.
pub 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.
pub 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.
pub 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.
pub 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)
.
pub 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)
.
pub 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)
.
pub 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)
.
pub 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)
.
pub 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)
.
pub 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)
.
pub 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)
.
pub 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)
.
pub 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))
.
pub 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))
.
pub 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))
.
pub 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
.
pub 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.
pub 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§
§impl Clone for RoomPowerLevels
impl Clone for RoomPowerLevels
§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§impl Debug for RoomPowerLevels
impl Debug for RoomPowerLevels
§impl From<RoomPowerLevels> for PushConditionPowerLevelsCtx
impl From<RoomPowerLevels> for PushConditionPowerLevelsCtx
§fn from(c: RoomPowerLevels) -> PushConditionPowerLevelsCtx
fn from(c: RoomPowerLevels) -> PushConditionPowerLevelsCtx
Source§impl From<RoomPowerLevels> for RoomPowerLevelChanges
impl From<RoomPowerLevels> for RoomPowerLevelChanges
Source§fn from(value: RoomPowerLevels) -> Self
fn from(value: RoomPowerLevels) -> Self
§impl TryFrom<RoomPowerLevels> for RoomPowerLevelsEventContent
impl TryFrom<RoomPowerLevels> for RoomPowerLevelsEventContent
§type Error = PowerLevelsError
type Error = PowerLevelsError
§fn try_from(
c: RoomPowerLevels,
) -> Result<RoomPowerLevelsEventContent, <RoomPowerLevelsEventContent as TryFrom<RoomPowerLevels>>::Error>
fn try_from( c: RoomPowerLevels, ) -> Result<RoomPowerLevelsEventContent, <RoomPowerLevelsEventContent as TryFrom<RoomPowerLevels>>::Error>
Auto Trait Implementations§
impl Freeze for RoomPowerLevels
impl RefUnwindSafe for RoomPowerLevels
impl Send for RoomPowerLevels
impl Sync for RoomPowerLevels
impl Unpin for RoomPowerLevels
impl UnwindSafe for RoomPowerLevels
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> CompatExt for T
impl<T> CompatExt for T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T, UT> HandleAlloc<UT> for T
impl<T, UT> HandleAlloc<UT> for T
Source§fn consume_handle(handle: Handle) -> Arc<T>
fn consume_handle(handle: Handle) -> Arc<T>
Arc<>
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more