]> Humopery - private/memberbot.git/commitdiff
Fix upsert command to parse whole text message main
authorErik Mackdanz <erikmack@gmail.com>
Fri, 27 Feb 2026 05:27:14 +0000 (23:27 -0600)
committerErik Mackdanz <erikmack@gmail.com>
Fri, 27 Feb 2026 05:27:14 +0000 (23:27 -0600)
Cargo.lock
Cargo.toml
src/bot.rs

index 1fad3c241a03c8cd5e13de1e70ec8b009caa1374..fb8a1ced83a5c863d0ca7c0c06ff62b13f51a334 100644 (file)
@@ -2124,6 +2124,7 @@ dependencies = [
  "matrix-sdk",
  "matrix-sdk-crypto",
  "matrix-sdk-sqlite",
+ "regex",
  "serde",
  "serde_json",
  "sqlx",
index 7c3f42931441ca39ee02e21cdc6691d4ec643541..3dfebb4fe8b12864409a9dc1443ddb791f3c9a87 100644 (file)
@@ -17,4 +17,5 @@ serde_json = "1.0.123"
 dotenvy = "0.15.7"
 thiserror = "1.0.69"
 futures-util = "0.3.30"
+regex = "1.12.3"
 
index 6de86eb830964e8e543a3eb675c3e51b420c9ee5..d684991efff9b351d12c39404adb9b14350df9fb 100644 (file)
@@ -1,4 +1,5 @@
 use std::{fs, path::PathBuf, sync::Arc};
+use regex::Regex;
 
 use anyhow::Result;
 use futures_util::StreamExt;
@@ -338,7 +339,7 @@ async fn handle_message(
             }
         }
         "!upsert" => {
-            handle_upsert_command(&room, args, &sender, db).await?;
+            handle_upsert_command(&room, message, &sender, db).await?;
         }
         "!list" => {
             handle_list_command(&room, &sender, db).await?;
@@ -368,7 +369,7 @@ async fn send_reply(room: &Room, message: &str) -> Result<()> {
 
 async fn handle_upsert_command(
     room: &Room,
-    args: &[&str],
+    message: &str,
     sender: &UserId,
     db: &Database,
 ) -> Result<()> {
@@ -386,15 +387,19 @@ async fn handle_upsert_command(
         return Ok(());
     }
 
+    let stripped_command = Regex::new("^!upsert(\n| *)")?;
+    let matches = stripped_command.captures(message).unwrap();
+    let first_match = matches.iter().next().unwrap().unwrap();
+    let first_match_len = first_match.len();
+    let tsv_data = &message[first_match_len..];
+
     // Parse TSV data
-    if args.is_empty() {
+    if tsv_data.is_empty() {
         let reply = "Error: Please provide TSV data. Format: member_id\temail\tmatrix_user (optional)";
         send_reply(room, reply).await?;
         return Ok(());
     }
 
-    // Join args back into TSV data
-    let tsv_data = args.join(" ");
     let lines: Vec<&str> = tsv_data.split('\n').collect();
     
     let mut success_count = 0;