newsbot/src/formatter.js
2026-04-14 07:02:21 +00:00

55 lines
1.9 KiB
JavaScript

// ============================================================
// formatter.js — Formatiert News-Nachrichten für Matrix
// ============================================================
function formatDailyDigest(grouped) {
const date = new Date().toLocaleDateString('de-DE', {
weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'
});
// Plain text version
let plain = `📰 Täglicher News-Digest — ${date}\n`;
plain += '─'.repeat(50) + '\n\n';
// HTML version (für Matrix Clients die Formatting unterstützen)
let html = `<h3>📰 Täglicher News-Digest</h3>`;
html += `<p><em>${date}</em></p><hr>`;
for (const [category, items] of Object.entries(grouped)) {
if (items.length === 0) continue;
plain += `${category}\n${'─'.repeat(30)}\n`;
html += `<h4>${category}</h4><ul>`;
for (const item of items) {
const source = item.feedName ? ` [${item.feedName}]` : '';
plain += `${item.title}${source}\n ${item.link}\n\n`;
html += `<li><a href="${item.link}"><strong>${item.title}</strong></a>`;
if (item.feedName) html += ` <em>(${item.feedName})</em>`;
if (item.summary) html += `<br><small>${item.summary}</small>`;
html += `</li>`;
}
plain += '\n';
html += `</ul>`;
}
const totalItems = Object.values(grouped).flat().length;
plain += `\n📊 ${totalItems} Artikel heute · Powered by noctura newsbot`;
html += `<p><small>📊 ${totalItems} Artikel heute · Powered by noctura newsbot</small></p>`;
return { plain, html };
}
function formatNoNews() {
return {
plain: '📰 Heute keine neuen Artikel in den konfigurierten Feeds.',
html: '<p>📰 Heute keine neuen Artikel in den konfigurierten Feeds.</p>'
};
}
function formatError(feedName, error) {
return `⚠️ Feed-Fehler [${feedName}]: ${error.message}`;
}
module.exports = { formatDailyDigest, formatNoNews, formatError };