diff options
| author | Fuwn <[email protected]> | 2025-09-07 02:28:34 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-09-07 02:28:34 -0700 |
| commit | 188c714f43635fb57eac70b167dba682d6b93a2f (patch) | |
| tree | 28a5bc64a6a8efd78c19cdaa666b98e42d3b90b5 /src/reddit.js | |
| parent | feat: Add top command (diff) | |
| download | umabotdiscord-188c714f43635fb57eac70b167dba682d6b93a2f.tar.xz umabotdiscord-188c714f43635fb57eac70b167dba682d6b93a2f.zip | |
build: Switch to TypeScript
Diffstat (limited to 'src/reddit.js')
| -rw-r--r-- | src/reddit.js | 100 |
1 files changed, 0 insertions, 100 deletions
diff --git a/src/reddit.js b/src/reddit.js deleted file mode 100644 index 543e6ff..0000000 --- a/src/reddit.js +++ /dev/null @@ -1,100 +0,0 @@ -async function fetchRedditPosts(sort = 'hot', time = 'day') { - const url = `https://www.reddit.com/r/okbuddyumamusume/${sort}.json${sort === 'top' ? `?t=${time}` : ''}`; - const response = await fetch(url, { - 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('hot'); - const filteredPosts = filterPostsByFlair(posts, ['roleplay', 'announcement']); - - return getRandomPost(filteredPosts); -} - -export async function getRoleplayPost() { - const posts = await fetchRedditPosts('hot'); - const filteredPosts = filterPostsByFlair(posts, [], ['roleplay']); - - return getRandomPost(filteredPosts); -} - -export async function getNSFWPost() { - const posts = await fetchRedditPosts('hot'); - const filteredPosts = filterPostsByFlair(posts, [], ['nsfw']); - - return getRandomPost(filteredPosts); -} - -export async function getTopPost(time = 'day') { - const posts = await fetchRedditPosts('top', time); - const filteredPosts = filterPostsByFlair(posts, ['roleplay', 'announcement']); - - return getRandomPost(filteredPosts); -} |