Merge remote-tracking branch 'upstream/main' into conduwuit-changes
This commit is contained in:
		
						commit
						d5d2698da3
					
				@ -365,6 +365,35 @@ impl RoomPowerLevels {
 | 
				
			|||||||
        self.users.get(user_id).map_or(self.users_default, |pl| *pl)
 | 
					        self.users.get(user_id).map_or(self.users_default, |pl| *pl)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Get the power level required to perform a given action.
 | 
				
			||||||
 | 
					    pub fn for_action(&self, action: PowerLevelAction) -> Int {
 | 
				
			||||||
 | 
					        match action {
 | 
				
			||||||
 | 
					            PowerLevelAction::Ban => self.ban,
 | 
				
			||||||
 | 
					            PowerLevelAction::Unban => self.ban.max(self.kick),
 | 
				
			||||||
 | 
					            PowerLevelAction::Invite => self.invite,
 | 
				
			||||||
 | 
					            PowerLevelAction::Kick => self.kick,
 | 
				
			||||||
 | 
					            PowerLevelAction::RedactOwn => self.for_message(MessageLikeEventType::RoomRedaction),
 | 
				
			||||||
 | 
					            PowerLevelAction::RedactOther => {
 | 
				
			||||||
 | 
					                self.redact.max(self.for_message(MessageLikeEventType::RoomRedaction))
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            PowerLevelAction::SendMessage(msg_type) => self.for_message(msg_type),
 | 
				
			||||||
 | 
					            PowerLevelAction::SendState(state_type) => self.for_state(state_type),
 | 
				
			||||||
 | 
					            PowerLevelAction::TriggerNotification(NotificationPowerLevelType::Room) => {
 | 
				
			||||||
 | 
					                self.notifications.room
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Get the power level required to send the given message type.
 | 
				
			||||||
 | 
					    pub fn for_message(&self, msg_type: MessageLikeEventType) -> Int {
 | 
				
			||||||
 | 
					        self.events.get(&msg_type.into()).copied().unwrap_or(self.events_default)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Get the power level required to send the given state event type.
 | 
				
			||||||
 | 
					    pub fn for_state(&self, state_type: StateEventType) -> Int {
 | 
				
			||||||
 | 
					        self.events.get(&state_type.into()).copied().unwrap_or(self.state_default)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Whether the given user can ban other users based on the power levels.
 | 
					    /// Whether the given user can ban other users based on the power levels.
 | 
				
			||||||
    ///
 | 
					    ///
 | 
				
			||||||
    /// Shorthand for `power_levels.user_can_do(user_id, PowerLevelAction::Ban)`.
 | 
					    /// Shorthand for `power_levels.user_can_do(user_id, PowerLevelAction::Ban)`.
 | 
				
			||||||
@ -455,24 +484,14 @@ impl RoomPowerLevels {
 | 
				
			|||||||
    ///
 | 
					    ///
 | 
				
			||||||
    /// Shorthand for `power_levels.user_can_do(user_id, PowerLevelAction::SendMessage(msg_type))`.
 | 
					    /// Shorthand for `power_levels.user_can_do(user_id, PowerLevelAction::SendMessage(msg_type))`.
 | 
				
			||||||
    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 {
 | 
				
			||||||
        self.for_user(user_id)
 | 
					        self.for_user(user_id) >= self.for_message(msg_type)
 | 
				
			||||||
            >= self
 | 
					 | 
				
			||||||
                .events
 | 
					 | 
				
			||||||
                .get(&msg_type.into())
 | 
					 | 
				
			||||||
                .map(ToOwned::to_owned)
 | 
					 | 
				
			||||||
                .unwrap_or(self.events_default)
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Whether the given user can send state events based on the power levels.
 | 
					    /// 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))`.
 | 
					    /// Shorthand for `power_levels.user_can_do(user_id, PowerLevelAction::SendState(state_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 {
 | 
				
			||||||
        self.for_user(user_id)
 | 
					        self.for_user(user_id) >= self.for_state(state_type)
 | 
				
			||||||
            >= self
 | 
					 | 
				
			||||||
                .events
 | 
					 | 
				
			||||||
                .get(&state_type.into())
 | 
					 | 
				
			||||||
                .map(ToOwned::to_owned)
 | 
					 | 
				
			||||||
                .unwrap_or(self.state_default)
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Whether the given user can notify everybody in the room by writing `@room` in a message.
 | 
					    /// Whether the given user can notify everybody in the room by writing `@room` in a message.
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user