async function fetchRedditPosts() { const response = await fetch(redditURL, { headers: { 'User-Agent': 'UmaBot/0.1.0', }, }); if (!response.ok) { let errorText = `Error fetching ${response.url}: ${response.status} ${response.statusText}`; try { const error = await response.text(); if (error) errorText = `${errorText} \n\n ${error}`; } catch { // } throw new Error(errorText); } const data = await response.json(); return data.data.children.map((post) => post.data); } function filterPostsByFlair(posts, excludedFlairs = [], includedFlairs = []) { return posts.filter((post) => { if (post.is_gallery) return false; const hasMedia = post.media?.reddit_video?.fallback_url || post.secure_media?.reddit_video?.fallback_url || post.url; if (!hasMedia) return false; const postFlair = post.link_flair_text?.toLowerCase() || ''; const isNSFW = post.over_18 || postFlair.includes('nsfw'); if ( includedFlairs.length > 0 && includedFlairs.some((flair) => flair.toLowerCase() === 'nsfw') ) if (includedFlairs.some((flair) => flair.toLowerCase() === 'nsfw')) return isNSFW; if (isNSFW) return false; if (includedFlairs.length > 0) return includedFlairs.some((flair) => postFlair.includes(flair.toLowerCase()), ); if (excludedFlairs.length > 0) return !excludedFlairs.some((flair) => postFlair.includes(flair.toLowerCase()), ); return true; }); } function getRandomPost(posts) { if (posts.length === 0) throw new Error('No posts found matching the criteria'); const randomIndex = Math.floor(Math.random() * posts.length); return posts[randomIndex]; } export async function getCutePost() { const posts = await fetchRedditPosts(); const filteredPosts = filterPostsByFlair(posts, ['roleplay', 'announcement']); return getRandomPost(filteredPosts); } export async function getRoleplayPost() { const posts = await fetchRedditPosts(); const filteredPosts = filterPostsByFlair(posts, [], ['roleplay']); return getRandomPost(filteredPosts); } export async function getNSFWPost() { const posts = await fetchRedditPosts(); const filteredPosts = filterPostsByFlair(posts, [], ['nsfw']); return getRandomPost(filteredPosts); } export const redditURL = 'https://www.reddit.com/r/okbuddyumamusume/hot.json';