function isDiscordWebhook(url) { return /(^https?:\/\/)(ptb\.|canary\.)?(discord(app)?\.com)\/api\/webhooks\//i.test(String(url || '')); } function formatDurationShort(sec) { const s = Math.max(0, Math.round(Number(sec) || 0)); const h = Math.floor(s / 3600); const m = Math.floor((s % 3600) / 60); const r = s % 60; if (h > 0) return `${h}h ${m}m`; if (m > 0) return `${m}m ${r}s`; return `${r}s`; } function summarizePerHosterFromBatch(summary) { const out = {}; if (!summary || !Array.isArray(summary.files)) return out; for (const f of summary.files) { if (!f || !Array.isArray(f.results)) continue; for (const r of f.results) { if (!r || !r.hoster) continue; const b = out[r.hoster] || (out[r.hoster] = { ok: 0, fail: 0 }); if (r.status === 'done') b.ok++; else b.fail++; } } return out; } function buildWebhookRequest(url, summary, meta) { const m = meta || {}; const total = Number(summary && summary.total) || 0; const succeeded = Number(summary && summary.succeeded) || 0; const failed = Number(summary && summary.failed) || 0; const perHoster = summarizePerHosterFromBatch(summary); const duration = formatDurationShort(m.durationSec); let body; if (isDiscordWebhook(url)) { const hosterLines = Object.entries(perHoster) .map(([h, b]) => `${h}: ${b.ok}/${b.ok + b.fail}`) .join(' · '); const lines = [ `**Multi-Hoster-Upload — Batch fertig**${m.machineName ? ` (${m.machineName})` : ''}`, `✅ ${succeeded} ok · ❌ ${failed} Fehler · 📦 ${total} gesamt · ⏱ ${duration}` ]; if (hosterLines) lines.push(hosterLines); body = JSON.stringify({ content: lines.join('\n') }); } else { body = JSON.stringify({ event: 'batch-done', app: 'multi-hoster-upload', version: m.appVersion || null, machine: m.machineName || null, total, succeeded, failed, durationSec: Math.round(Number(m.durationSec) || 0), perHoster, timestamp: m.timestamp || null }); } return { url: String(url), method: 'POST', headers: { 'Content-Type': 'application/json' }, body }; } module.exports = { isDiscordWebhook, formatDurationShort, summarizePerHosterFromBatch, buildWebhookRequest };