1
0
Fork 0
mirror of https://gitlab.com/famedly/conduit.git synced 2025-08-06 17:40:59 +00:00

reply to messages

This commit is contained in:
tezlm 2023-10-04 20:13:04 -07:00
parent 910d166b5d
commit 4c03aa80ab
No known key found for this signature in database
GPG key ID: 649733FCD94AFBBA
2 changed files with 17 additions and 11 deletions

View file

@ -16,12 +16,12 @@ use ruma::{
history_visibility::{HistoryVisibility, RoomHistoryVisibilityEventContent}, history_visibility::{HistoryVisibility, RoomHistoryVisibilityEventContent},
join_rules::{JoinRule, RoomJoinRulesEventContent}, join_rules::{JoinRule, RoomJoinRulesEventContent},
member::{MembershipState, RoomMemberEventContent}, member::{MembershipState, RoomMemberEventContent},
message::RoomMessageEventContent, message::{RoomMessageEventContent, Relation::Reply},
name::RoomNameEventContent, name::RoomNameEventContent,
power_levels::RoomPowerLevelsEventContent, power_levels::RoomPowerLevelsEventContent,
topic::RoomTopicEventContent, topic::RoomTopicEventContent,
}, },
TimelineEventType, TimelineEventType, relation::InReplyTo,
}, },
EventId, OwnedRoomAliasId, RoomAliasId, RoomId, RoomVersionId, ServerName, UserId, EventId, OwnedRoomAliasId, RoomAliasId, RoomId, RoomVersionId, ServerName, UserId,
}; };
@ -285,7 +285,7 @@ enum ServerCommand {
#[derive(Debug)] #[derive(Debug)]
pub enum AdminRoomEvent { pub enum AdminRoomEvent {
ProcessMessage(String), ProcessMessage(String, Arc<EventId>),
SendMessage(RoomMessageEventContent), SendMessage(RoomMessageEventContent),
} }
@ -330,7 +330,11 @@ impl Service {
.expect("Database data for admin room alias must be valid") .expect("Database data for admin room alias must be valid")
.expect("Admin room must exist"); .expect("Admin room must exist");
let send_message = |message: RoomMessageEventContent, mutex_lock: &MutexGuard<'_, ()>| { let send_message = |mut message: RoomMessageEventContent, reply: Option<Arc<EventId>>, mutex_lock: &MutexGuard<'_, ()>| {
if let Some(reply) = reply {
message.relates_to = Some(Reply { in_reply_to: InReplyTo { event_id: reply.into() } })
}
services() services()
.rooms .rooms
.timeline .timeline
@ -353,9 +357,11 @@ impl Service {
loop { loop {
tokio::select! { tokio::select! {
Some(event) = receiver.recv() => { Some(event) = receiver.recv() => {
let message_content = match event { let (message_content, reply) = match event {
AdminRoomEvent::SendMessage(content) => content, AdminRoomEvent::SendMessage(content) => (content, None),
AdminRoomEvent::ProcessMessage(room_message) => self.process_admin_message(room_message).await AdminRoomEvent::ProcessMessage(room_message, reply_id) => {
(self.process_admin_message(room_message).await, Some(reply_id))
}
}; };
let mutex_state = Arc::clone( let mutex_state = Arc::clone(
@ -369,7 +375,7 @@ impl Service {
let state_lock = mutex_state.lock().await; let state_lock = mutex_state.lock().await;
send_message(message_content, &state_lock); send_message(message_content, reply, &state_lock);
drop(state_lock); drop(state_lock);
} }
@ -377,9 +383,9 @@ impl Service {
} }
} }
pub fn process_message(&self, room_message: String) { pub fn process_message(&self, room_message: String, event_id: Arc<EventId>) {
self.sender self.sender
.send(AdminRoomEvent::ProcessMessage(room_message)) .send(AdminRoomEvent::ProcessMessage(room_message, event_id))
.unwrap(); .unwrap();
} }

View file

@ -466,7 +466,7 @@ impl Service {
&& services().globals.emergency_password().is_none(); && services().globals.emergency_password().is_none();
if to_conduit && !from_conduit && admin_room.as_ref() == Some(&pdu.room_id) { if to_conduit && !from_conduit && admin_room.as_ref() == Some(&pdu.room_id) {
services().admin.process_message(body); services().admin.process_message(body, pdu.event_id.clone());
} }
} }
} }