import type { DiscordEmbed } from './interfaces.ts'; import type { RedditPost } from '../reddit.ts'; const decodeHtmlEntities = (str: string): string => { return str .replace(/&/g, '&') .replace(/</g, '<') .replace(/>/g, '>') .replace(/"/g, '"') .replace(/'/g, "'") .replace(///g, '/') .replace(/`/g, '`') .replace(/=/g, '='); }; export const createPostEmbed = (post: RedditPost): DiscordEmbed => { const mediaUrl = post.media?.reddit_video?.fallback_url || post.secure_media?.reddit_video?.fallback_url || post.url; let description = post.selftext || ''; if (description.length > 1000) description = description.substring(0, 997).trim() + ' ...'; const embed: DiscordEmbed = { title: post.title, description: description, url: `https://reddit.com${post.permalink}`, color: 0xff4500, author: { name: `u/${post.author}`, url: `https://reddit.com/u/${post.author}`, }, fields: [ { name: 'Score', value: `${post.score} ⬆️`, inline: true, }, { name: 'Comments', value: `${post.num_comments} 💬`, inline: true, }, ], timestamp: new Date(post.created_utc * 1000).toISOString(), footer: { text: 'r/okbuddyumamusume', }, }; if (mediaUrl) if (post.media?.reddit_video || post.secure_media?.reddit_video) { if (!description) description = ''; description += '\n\n📹 **This post contains a video** - [Click here to view](' + mediaUrl + ')'; embed.description = description; if (post.preview?.images?.[0]?.source?.url) { const decodedURL = decodeHtmlEntities( post.preview.images[0].source.url, ); console.log('Using preview image:', decodedURL); embed.image = { url: decodedURL }; } else if ( post.thumbnail && post.thumbnail !== 'self' && post.thumbnail !== 'default' ) { const decodedThumbnail = decodeHtmlEntities(post.thumbnail); console.log('Using thumbnail:', decodedThumbnail); embed.image = { url: decodedThumbnail }; } else { console.log('No suitable thumbnail found for video post'); } } else { embed.image = { url: mediaUrl }; } return embed; };