From 817ffac04987a0b2623831add0f6773e6c660d02 Mon Sep 17 00:00:00 2001 From: Ichitux Date: Wed, 8 Apr 2026 00:45:32 +0200 Subject: [PATCH] Hotfix /all and styling --- .env | 3 ++ data/messages.db | Bin 122880 -> 122880 bytes src/rss.js | 100 ++++++++++++++++++++++++++++++++++++----------- 3 files changed, 80 insertions(+), 23 deletions(-) diff --git a/.env b/.env index e289375..650885b 100644 --- a/.env +++ b/.env @@ -6,6 +6,9 @@ DISCORD_TOKEN=MTQ5MTAxODYzOTc0MTI5MjY0NA.GxBqVk.dB3cWx8t8-kWLrMLGFL-g2ePkrs7l_XE # Right-click a channel and select "Copy Channel ID" (enable Developer Mode first) DISCORD_CHANNEL_IDS=600347996080701506,720537868996444230,1480636166150816007 +# Channel name mapping (channel_id=name, comma-separated) +CHANNEL_NAMES=600347996080701506=noticias,720537868996444230=eventos,1480636166150816007=changelog + # Server port (optional, defaults to 3000) PORT=8000 diff --git a/data/messages.db b/data/messages.db index 8a16843d008f47c83c959cb068a23eeb6128cdfe..7946588b5070435285dff868db789950af43ddfa 100644 GIT binary patch delta 10240 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 { + const [id, name] = pair.split('='); + if (id && name) { + names[id.trim()] = name.trim(); + } + }); + } + return names; +} + +function getChannelDisplayName(channelId) { + const names = getChannelNames(); + return names[channelId] || channelId; +} + +function getChannelEmoji(channelName) { + return CHANNEL_EMOJIS[channelName.toLowerCase()] || '📄'; +} + function generateRSSFeed(messages, channelInfo, feedUrlSuffix = null) { + const isCombined = channelInfo === 'All Channels'; const feed = new RSS({ - title: `Discord Channel - ${channelInfo}`, - description: 'Messages from Discord channel', + title: `Discord - ${channelInfo}`, + description: isCombined ? 'Latest messages from all channels' : `Messages from ${channelInfo}`, feed_url: `${process.env.BASE_URL || 'http://localhost:3000'}/rss/${feedUrlSuffix || channelInfo}`, site_url: process.env.BASE_URL || 'http://localhost:3000', language: 'en', @@ -17,9 +51,28 @@ function generateRSSFeed(messages, channelInfo, feedUrlSuffix = null) { for (const msg of messages) { const pubDate = new Date(msg.created_at); + const channelName = getChannelDisplayName(msg.channel_id); + const emoji = getChannelEmoji(channelName); + + // HTML-formatted description with visual badge + const formattedDescription = ` +
+ + ${emoji} ${channelName} + +
+
+ ${msg.content} +
+ `.trim(); + feed.item({ - title: `Update patch from ${pubDate.toISOString()}`, - description: msg.content, + title: `${emoji} [${channelName}] ${pubDate.toLocaleString()}`, + description: formattedDescription, + categories: [ + { name: channelName }, + { name: msg.author_name }, + ], url: `https://discord.com/channels/_/${msg.channel_id}/${msg.id}`, guid: msg.id, date: pubDate, @@ -41,25 +94,7 @@ router.get('/', (req, res) => { }); }); -// GET /rss/:channelId - RSS feed for specific channel -router.get('/:channelId', (req, res) => { - const { channelId } = req.params; - const limit = parseInt(req.query.limit, 10) || 50; - - const messages = getMessagesByChannel(channelId, limit); - - if (messages.length === 0) { - return res.status(404).json({ - error: 'No messages found for this channel', - hint: 'Make sure the bot has fetched messages from this channel', - }); - } - - const xml = generateRSSFeed(messages, channelId); - res.type('application/rss+xml').send(xml); -}); - -// GET /rss-all - Combined RSS feed from all channels +// GET /rss/all - Combined RSS feed from all channels router.get('/all', (req, res) => { const limit = parseInt(req.query.limit, 10) || 50; @@ -76,4 +111,23 @@ router.get('/all', (req, res) => { res.type('application/rss+xml').send(xml); }); +// GET /rss/:channelId - RSS feed for specific channel +router.get('/:channelId', (req, res) => { + const { channelId } = req.params; + const limit = parseInt(req.query.limit, 10) || 50; + + const messages = getMessagesByChannel(channelId, limit); + + if (messages.length === 0) { + return res.status(404).json({ + error: 'No messages found for this channel', + hint: 'Make sure the bot has fetched messages from this channel', + }); + } + + const displayName = getChannelDisplayName(channelId); + const xml = generateRSSFeed(messages, displayName, channelId); + res.type('application/rss+xml').send(xml); +}); + export default router;