@@ -20,14 +20,26 @@ pub async fn handle_message_chat(
2020) {
2121 let langs: Vec < & str > = agent. lang . iter ( ) . map ( String :: as_str) . collect ( ) ;
2222
23+ let confirm = message. extract_valid_payload :: < Confirm > ( ) ;
24+ let is_muc_pm = message. extract_valid_payload :: < MucUser > ( ) . is_some ( ) ;
25+
26+ // First process events that do not require the message body
27+ if !is_muc_pm && confirm. is_some ( ) {
28+ events. push ( Event :: AuthConfirm (
29+ from. to_bare ( ) ,
30+ confirm. unwrap ( ) ,
31+ time_info,
32+ ) ) ;
33+ return ;
34+ }
35+
36+ // For other events, a message body is required, so stop here if there isn't one
2337 let Some ( ( _lang, body) ) = message. get_best_body_cloned ( langs) else {
2438 debug ! ( "Received normal/chat message without body:\n {:#?}" , message) ;
2539 return ;
2640 } ;
2741
28- let is_muc_pm = message. extract_valid_payload :: < MucUser > ( ) . is_some ( ) ;
2942 let correction = message. extract_valid_payload :: < Replace > ( ) ;
30- let confirm = message. extract_valid_payload :: < Confirm > ( ) ;
3143
3244 if is_muc_pm {
3345 if from. resource ( ) . is_none ( ) {
@@ -58,8 +70,6 @@ pub async fn handle_message_chat(
5870 let event = if let Some ( correction) = correction {
5971 // TODO: Check that correction is valid (only for last N minutes or last N messages)
6072 Event :: ChatMessageCorrection ( correction. id , from. to_bare ( ) , body. clone ( ) , time_info)
61- } else if let Some ( confirm) = confirm {
62- Event :: AuthConfirm ( from. to_bare ( ) , confirm, time_info)
6373 } else {
6474 Event :: ChatMessage ( message. id . clone ( ) , from. to_bare ( ) , body, time_info)
6575 } ;
0 commit comments