use std::{fs, path::PathBuf, sync::Arc};
+use regex::Regex;
use anyhow::Result;
use futures_util::StreamExt;
}
}
"!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?;
async fn handle_upsert_command(
room: &Room,
- args: &[&str],
+ message: &str,
sender: &UserId,
db: &Database,
) -> Result<()> {
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;