Can edit message

This commit is contained in:
2025-11-24 13:18:23 +01:00
parent 0a395b0d26
commit 4d72644a31
2 changed files with 48 additions and 1 deletions

View File

@@ -6,7 +6,10 @@ use futures_util::{StreamExt, stream};
use matrix_sdk::Room; use matrix_sdk::Room;
use matrix_sdk::deserialized_responses::{TimelineEvent, TimelineEventKind}; use matrix_sdk::deserialized_responses::{TimelineEvent, TimelineEventKind};
use matrix_sdk::room::MessagesOptions; use matrix_sdk::room::MessagesOptions;
use matrix_sdk::ruma::events::room::message::RoomMessageEventContent; use matrix_sdk::room::edit::EditedContent;
use matrix_sdk::ruma::events::room::message::{
RoomMessageEventContent, RoomMessageEventContentWithoutRelation,
};
use matrix_sdk::ruma::{MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedUserId, RoomId, UInt}; use matrix_sdk::ruma::{MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedUserId, RoomId, UInt};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_json::value::RawValue; use serde_json::value::RawValue;
@@ -117,6 +120,46 @@ pub struct EventIdInPath {
pub(crate) event_id: OwnedEventId, pub(crate) event_id: OwnedEventId,
} }
pub async fn set_text_content(
client: MatrixClientExtractor,
path: web::Path<RoomIdInPath>,
event_path: web::Path<EventIdInPath>,
) -> HttpResult {
let req = client.auth.decode_json_body::<SendTextMessageRequest>()?;
let Some(room) = client.client.client.get_room(&path.room_id) else {
return Ok(HttpResponse::NotFound().json("Room not found!"));
};
let edit_event = match room
.make_edit_event(
&event_path.event_id,
EditedContent::RoomMessage(RoomMessageEventContentWithoutRelation::text_plain(
req.content,
)),
)
.await
{
Ok(msg) => msg,
Err(e) => {
log::error!(
"Failed to created edit message event {}: {e}",
event_path.event_id
);
return Ok(HttpResponse::InternalServerError()
.json(format!("Failed to create edit message event! {e}")));
}
};
Ok(match room.send(edit_event).await {
Ok(_) => HttpResponse::Accepted().finish(),
Err(e) => {
log::error!("Failed to edit event message {}: {e}", event_path.event_id);
HttpResponse::InternalServerError().json(format!("Failed to edit event! {e}"))
}
})
}
pub async fn redact_event( pub async fn redact_event(
client: MatrixClientExtractor, client: MatrixClientExtractor,
path: web::Path<RoomIdInPath>, path: web::Path<RoomIdInPath>,

View File

@@ -173,6 +173,10 @@ async fn main() -> std::io::Result<()> {
"/api/matrix/room/{room_id}/send_text_message", "/api/matrix/room/{room_id}/send_text_message",
web::post().to(matrix_event_controller::send_text_message), web::post().to(matrix_event_controller::send_text_message),
) )
.route(
"/api/matrix/room/{room_id}/event/{event_id}/set_text_content",
web::post().to(matrix_event_controller::set_text_content),
)
.route( .route(
"/api/matrix/room/{room_id}/event/{event_id}", "/api/matrix/room/{room_id}/event/{event_id}",
web::delete().to(matrix_event_controller::redact_event), web::delete().to(matrix_event_controller::redact_event),