From: Erik Mackdanz Date: Fri, 27 Feb 2026 05:27:14 +0000 (-0600) Subject: Fix upsert command to parse whole text message X-Git-Url: https://git.humopery.space/?a=commitdiff_plain;h=HEAD;p=private%2Fmemberbot.git Fix upsert command to parse whole text message --- diff --git a/Cargo.lock b/Cargo.lock index 1fad3c2..fb8a1ce 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2124,6 +2124,7 @@ dependencies = [ "matrix-sdk", "matrix-sdk-crypto", "matrix-sdk-sqlite", + "regex", "serde", "serde_json", "sqlx", diff --git a/Cargo.toml b/Cargo.toml index 7c3f429..3dfebb4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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" diff --git a/src/bot.rs b/src/bot.rs index 6de86eb..d684991 100644 --- a/src/bot.rs +++ b/src/bot.rs @@ -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;