diff --git a/xmpp/src/message/receive/chat.rs b/xmpp/src/message/receive/chat.rs index 49c542f652fbfc55e3b5ea221882045f1bd2780e..39c23212336363b736c35cbd6ebdaf07e6a06ce5 100644 --- a/xmpp/src/message/receive/chat.rs +++ b/xmpp/src/message/receive/chat.rs @@ -20,14 +20,26 @@ pub async fn handle_message_chat( ) { let langs: Vec<&str> = agent.lang.iter().map(String::as_str).collect(); + let confirm = message.extract_valid_payload::(); + let is_muc_pm = message.extract_valid_payload::().is_some(); + + // First process events that do not require the message body + if !is_muc_pm && confirm.is_some() { + events.push(Event::AuthConfirm( + from.to_bare(), + confirm.unwrap(), + time_info, + )); + return; + } + + // For other events, a message body is required, so stop here if there isn't one let Some((_lang, body)) = message.get_best_body_cloned(langs) else { debug!("Received normal/chat message without body:\n{:#?}", message); return; }; - let is_muc_pm = message.extract_valid_payload::().is_some(); let correction = message.extract_valid_payload::(); - let confirm = message.extract_valid_payload::(); if is_muc_pm { if from.resource().is_none() { @@ -58,8 +70,6 @@ pub async fn handle_message_chat( let event = if let Some(correction) = correction { // TODO: Check that correction is valid (only for last N minutes or last N messages) Event::ChatMessageCorrection(correction.id, from.to_bare(), body.clone(), time_info) - } else if let Some(confirm) = confirm { - Event::AuthConfirm(from.to_bare(), confirm, time_info) } else { Event::ChatMessage(message.id.clone(), from.to_bare(), body, time_info) };