pub struct Rooms { /* private fields */ }Implementations§
source§impl Rooms
impl Rooms
pub async fn own_display_name_in_room( &self, room: &Room, ) -> Result<Option<String>>
sourcepub async fn start_typing_notice(&self, room: &Room) -> TypingNoticeGuard
pub async fn start_typing_notice(&self, room: &Room) -> TypingNoticeGuard
Starts sending typing notices for the given room and returns a guard object.
If multiple callers invoke this method for the same room, only the first caller will start the typing notice sending loop and it will remain active until all callers have released their guards.
When all guard objects for a given room have gone out of scope, the typing notice will be turned off.
sourcepub fn on_invitation<F, Fut>(&self, callback: F)where
F: FnOnce(StrippedRoomMemberEvent, Room) -> Fut + Send + 'static + Clone + Sync,
Fut: Future<Output = Result<InvitationDecision, CallbackError>> + Send + 'static,
pub fn on_invitation<F, Fut>(&self, callback: F)where
F: FnOnce(StrippedRoomMemberEvent, Room) -> Fut + Send + 'static + Clone + Sync,
Fut: Future<Output = Result<InvitationDecision, CallbackError>> + Send + 'static,
Register a callback to be called when an invitation for the room arrives. The callback is expected to return a decision as to whether the room should be joined or not.
Examples found in repository?
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
async fn register_event_handlers(matrix_link: MatrixLink) {
let rooms = matrix_link.rooms();
// We auto-accept all invitations
rooms.on_invitation(|_event, _room| async move { Ok(InvitationDecision::Join) });
// We send an introduction to all rooms we join
let messaging = matrix_link.messaging();
rooms.on_joined(|_event, room| async move {
let _ = messaging
.send_text_markdown(&room, "Hello!".to_owned(), MessageResponseType::InRoom)
.await
.expect("Failed to send message");
Ok(())
});
// We listen for reactions to messages and send a reply to the original message that received the reaction
let messaging = matrix_link.messaging();
let reacting = matrix_link.reacting();
reacting.on_actionable_reaction(|event, room, reaction_event_content| async move {
let response_text = if reaction_event_content.relates_to.key == "👍️" {
format!("{} reacted to this message with thumbs up!", event.sender())
} else {
format!(
"{} reacted to this message with an unknown-to-me reaction ({}).",
event.sender(),
reaction_event_content.relates_to.key,
)
};
let response_type =
MessageResponseType::Reply(reaction_event_content.relates_to.event_id.clone());
let _ = messaging
.send_notice_markdown(&room, response_text, response_type)
.await
.expect("Failed to send message");
Ok(())
});
}sourcepub fn on_joined<F, Fut>(&self, callback: F)
pub fn on_joined<F, Fut>(&self, callback: F)
Register a callback to be called when a room has been joined.
Examples found in repository?
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
async fn register_event_handlers(matrix_link: MatrixLink) {
let rooms = matrix_link.rooms();
// We auto-accept all invitations
rooms.on_invitation(|_event, _room| async move { Ok(InvitationDecision::Join) });
// We send an introduction to all rooms we join
let messaging = matrix_link.messaging();
rooms.on_joined(|_event, room| async move {
let _ = messaging
.send_text_markdown(&room, "Hello!".to_owned(), MessageResponseType::InRoom)
.await
.expect("Failed to send message");
Ok(())
});
// We listen for reactions to messages and send a reply to the original message that received the reaction
let messaging = matrix_link.messaging();
let reacting = matrix_link.reacting();
reacting.on_actionable_reaction(|event, room, reaction_event_content| async move {
let response_text = if reaction_event_content.relates_to.key == "👍️" {
format!("{} reacted to this message with thumbs up!", event.sender())
} else {
format!(
"{} reacted to this message with an unknown-to-me reaction ({}).",
event.sender(),
reaction_event_content.relates_to.key,
)
};
let response_type =
MessageResponseType::Reply(reaction_event_content.relates_to.event_id.clone());
let _ = messaging
.send_notice_markdown(&room, response_text, response_type)
.await
.expect("Failed to send message");
Ok(())
});
}sourcepub fn on_being_last_member<F, Fut>(&self, callback: F)
pub fn on_being_last_member<F, Fut>(&self, callback: F)
Register a callback to be called when we’ve determined to be the last member in the room. When this happens, you usually may wish to clean up and leave the room.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Rooms
impl !RefUnwindSafe for Rooms
impl Send for Rooms
impl Sync for Rooms
impl Unpin for Rooms
impl !UnwindSafe for Rooms
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,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit)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,
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§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