From d739b7edcb9d9755de1e91e885ffe9aee3b0367f Mon Sep 17 00:00:00 2001 From: elishadavidi <62501723+elishadavidi@users.noreply.github.com> Date: Tue, 2 Jun 2026 14:56:50 +0300 Subject: [PATCH] Fixed formatting of photos and stuff --- index.js | 54 ++++++++++++++++++++++++++++++++++++++++++++--------- uploader.js | 18 ++++-------------- 2 files changed, 49 insertions(+), 23 deletions(-) diff --git a/index.js b/index.js index 4346a43..3df4de0 100644 --- a/index.js +++ b/index.js @@ -45,8 +45,16 @@ function formatBatch(queue) { const parts = []; for (const [group, msgs] of Object.entries(groups)) { parts.push(`[šŸ‘„ ${group} šŸ‘„]`); + let prevSender = ''; for (const m of msgs) { - parts.push(`${m.sender}: ${m.text}`); + if (m.showSender === false) { + parts.push(''); + parts.push(m.text); + } else { + if (prevSender && prevSender !== m.sender) parts.push(''); + prevSender = m.sender; + parts.push(`${m.sender}: ${m.text}`); + } } } return parts.join('\n'); @@ -94,13 +102,15 @@ async function flushQueue() { } } -function enqueue(group, sender, text) { +function enqueue(group, sender, text, showSender = true) { msgCounter++; - messageQueue.push({ group, sender, text }); + messageQueue.push({ group, sender, text, showSender }); scheduleFlush(); log('QUEUE', `Queue #${msgCounter} - Message from ${sender}, flushed at ${flushTime()}`); + console.log(formatBatch(messageQueue)) + if (queueSize() >= config.batch.maxChars) { clearTimeout(flushTimer); flushTimer = null; @@ -252,22 +262,48 @@ async function startClient() { ? config.ownName : (contact.name || contact.pushname || contact.shortName || contact.number || 'Unknown'); - const mediaLabel = { image: 'šŸ“· Image', video: 'šŸŽ„ Video', ptt: 'šŸŽ¤ Voice', audio: 'šŸŽµ Audio', document: 'šŸ“„ Document', sticker: 'šŸ–¼ļø Sticker' }[message.type]; + const typeLabel = { image: 'šŸ“· Image', video: 'šŸŽ„ Video', ptt: 'šŸŽ¤ Voice', audio: 'šŸŽµ Audio', document: 'šŸ“„ Document', sticker: 'šŸ–¼ļø Sticker' }[message.type]; let body = message.body || ''; - if (message.hasMedia && config.appsScriptUrl) { + let isReply = false; + + if (message.hasQuotedMsg) { + try { + const quoted = await message.getQuotedMessage(); + if (quoted) { + const qContact = await quoted.getContact(); + const qName = qContact.name || qContact.pushname || qContact.shortName || 'Unknown'; + let qText = quoted.body || ({ image: 'šŸ“· Image', video: 'šŸŽ„ Video', ptt: 'šŸŽ¤ Voice', audio: 'šŸŽµ Audio', document: 'šŸ“„ Document', sticker: 'šŸ–¼ļø Sticker' })[quoted.type] || '[media]'; + if (qText.length > 50) qText = qText.slice(0, 50) + '...'; + body = `ā†©ļø ${qName} ××ž×Ø: ${qText} ā†©ļø\n${sender}: ${body}`; + isReply = true; + } + } catch (_) {} + } + + if (message.isForwarded) { + let fwdFrom = ''; + if (message.author) { + try { + const fwdContact = await client.getContactById(message.author); + fwdFrom = fwdContact.name || fwdContact.pushname || fwdContact.shortName || ''; + } catch (_) {} + } + body = `ā© הועבר${fwdFrom ? ' מ' + fwdFrom : ''}ā©\n` + body; + } + if (message.hasMedia && config.appsScriptUrl && message.type !== 'sticker') { try { const media = await message.downloadMedia(); if (media) { const { uploadMedia } = require('./uploader'); - const ext = media.mimeType ? media.mimeType.split('/')[1] || 'bin' : 'bin'; + const ext = media.mimeType ? media.mimeType.split('/')[1] || '' : ''; const link = await uploadMedia(media.data, media.mimeType, ext, media.filename); - if (link) body = (body ? `${body}\nšŸ“Ž ${link}` : `šŸ“Ž ${link}`); + if (link) body = (body ? `${body}\n[${typeLabel}]\n[${link}]` : `[${typeLabel}]\n[${link}]`); } } catch (err) { log('ERROR', `Media upload: ${err.message}`); } } - if (!body && mediaLabel) body = mediaLabel; + if (!body && typeLabel) body = typeLabel; if (!body) return; if (message.mentionedIds && message.mentionedIds.length > 0) { @@ -282,7 +318,7 @@ async function startClient() { } } - enqueue(chat.name, sender, body); + enqueue(chat.name, sender, body, !isReply && !message.isForwarded); } catch (err) { log('ERROR', `Message handler: ${err.message}`); } diff --git a/uploader.js b/uploader.js index cf2f822..892b254 100644 --- a/uploader.js +++ b/uploader.js @@ -5,21 +5,11 @@ function pad(n) { } function buildFileName(originalName, ext) { + if (originalName) return originalName; const now = new Date(); - - // Format: YYYY-MM-DD - const dateStr = `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())}`; - - // Format: HH-MM-SS (using dashes since colons can be problematic in filenames) - const timeStr = `${pad(now.getHours())}-${pad(now.getMinutes())}-${pad(now.getSeconds())}`; - - if (originalName) { - // Option A: original name - return originalName; - } else { - // Option B: Fallback if no name is provided - return `${dateStr}_${timeStr}.${ext || 'bin'}`; - } + const base = `${now.getFullYear()}${pad(now.getMonth() + 1)}${pad(now.getDate())}_` + + `${pad(now.getHours())}${pad(now.getMinutes())}${pad(now.getSeconds())}`; + return ext ? `${base}.${ext}` : base; } async function uploadMedia(base64Data, mimeType, ext, originalName) {