From b57dc0e6a4c968527245ecdd68d82e0ea1709e8a Mon Sep 17 00:00:00 2001 From: "brobert (aider)" Date: Sun, 23 Mar 2025 21:53:59 +0100 Subject: [PATCH] fix: improve task assignment with flexible user identifier handling --- src/bot/commands/task.ts | 20 ++++++++++++++------ src/utils/userUtils.ts | 5 +++++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/bot/commands/task.ts b/src/bot/commands/task.ts index 1b40529..6680d10 100644 --- a/src/bot/commands/task.ts +++ b/src/bot/commands/task.ts @@ -22,12 +22,20 @@ export function handleTaskCommand(body: string, sender: string, groupId: string, // Extract WhatsApp mention (format: @) const assignedUserMatch = description.match(/@\d+/); - const assignedUser = assignedUserMatch ? assignedUserMatch[0] : null; + let assignedUser = null; - // Validate phone number format - if (assignedUser && !/^@\d{8,}$/.test(assignedUser)) { - sendMessage(sender, 'Formato de mención inválido. Usa @ seguido del número de teléfono'); - return; + if (assignedUserMatch) { + try { + assignedUser = normalizeUserIdentifier(assignedUserMatch[0]); + // Check if assigned user is in the community + if (!linkedGroups.has(`${assignedUser.replace('@', '')}@s.whatsapp.net`)) { + sendMessage(sender, `El usuario ${assignedUser} no está en la comunidad`); + return; + } + } catch (error) { + sendMessage(sender, `Formato de mención inválido: ${error.message}`); + return; + } } const dueDateMatch = description.match(/\d{4}-\d{2}-\d{2}/); @@ -51,7 +59,7 @@ export function handleTaskCommand(body: string, sender: string, groupId: string, } } else if (action === 'nueva') { try { - const finalAssignedUser = assignedUser || `@${sender.split('@')[0]}`; + const finalAssignedUser = assignedUser || normalizeUserIdentifier(sender); const task = createTask(sender, { description: cleanDescription, assignedTo: finalAssignedUser, diff --git a/src/utils/userUtils.ts b/src/utils/userUtils.ts index f26c867..9e20f46 100644 --- a/src/utils/userUtils.ts +++ b/src/utils/userUtils.ts @@ -1,4 +1,9 @@ export function normalizeUserIdentifier(input: string): string { + // Handle JID format (12345678@s.whatsapp.net) + if (input.includes('@s.whatsapp.net')) { + return `@${input.split('@')[0]}`; + } + // Remove @ prefix if present const cleanInput = input.startsWith('@') ? input.slice(1) : input;