import discord import os import requests from discord.ext import commands import json import random import pyautogui import cv2 import psutil import pytumblr from bs4 import BeautifulSoup from datetime import datetime from PIL import Image import io from urllib.parse import urljoin import time import re # Replace with your own API keys CONSUMER_KEY = os.getenv("CONSUMER_KEY") CONSUMER_SECRET = os.getenv("CONSUMER_SECRET") TOKEN_KEY = os.getenv("TOKEN_KEY") TOKEN_SECRET = os.getenv("TOKEN_SECRET") class Cmds(commands.Cog): def __init__(self, client): self.client = client @commands.command(brief='Grabs a random Sparklecare page', help='Highly experimental command that generates a random page number and shows it') async def sparklecare(self, ctx): async with ctx.typing(): base_url = "https://sparklecarehospital.com" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "Accept-Language": "en-US,en;q=0.9", } def fetch_random_link(): response = requests.get(base_url + "/archive/", headers=headers) tabcontentid = [ 'tabcontent', 'tabcontent3', 'tabcontent4' ] tabcontentt = random.choice(tabcontentid) if response.status_code == 200: soup = BeautifulSoup(response.content, "html.parser") tabelement = soup.find("div", {"id": {tabcontentt}}) if tabelement: links = tabelement.find_all("a", text=lambda text: text and "volume summary" not in text.lower() and "no warning" not in text.lower()) if links: random_link = random.choice(links) return random_link.get("href") return None async def process_page(url): full_url = urljoin(base_url, random_link) response = requests.get(full_url, headers=headers) page_number = None match = re.search(r'page(\d+)', url, re.IGNORECASE) # Search for 'page' followed by a number if match: pagee = int(match.group(1)) pagenumber = f"Page {pagee}" print(f"The page number in the URL is: {pagenumber}") elif 'cover' in random_link: pagenumber = 'Cover' elif 'cover2' in random_link: pagenumber = 'Back Cover' elif 'cover3' in random_link: pagenumber = 'Inside Cover' elif 'cover4' in random_link: pagenumber = 'Content Warning' else: ctx.reply('grevious error (no page number found)') if 'fules' in random_link: title = f"April Fools 2019 {pagenumber}" elif 'aprilfools' in random_link: title = f"April Fools 2022 {pagenumber}" elif 'comic2' in random_link: title = f"ESV2 {pagenumber}" elif 'comic' in random_link and 'fules' not in random_link and 'comic3' not in random_link: title = f"ESV1 {pagenumber}" elif 'comic3' in random_link and 'fules' not in random_link: title = f"ESV3 {pagenumber}" else: title = "grevious error" has_series = "unknown" if response.status_code == 200: soup = BeautifulSoup(response.content, 'html.parser') content_warning = soup.find("div", {"id": "content-warning"}) main_content = soup.find("div", {"id": "main"}) css_files = [link.get('href') for link in soup.find_all('link', {'rel': 'stylesheet'})] # Filter CSS files containing 'theme' in their name theme_css_files = [css for css in css_files if 'theme' in css] if theme_css_files: for css_file in theme_css_files: # Fetch the content of each 'theme' CSS file absolute_css_url = urljoin(base_url, css_file) css_response = requests.get(absolute_css_url, headers=headers) if css_response.status_code == 200: css_content = css_response.text # Search for the 'topnav' class and extract its color property topnav_color_match = re.search(r'\.topnav\s*{[^}]*color:\s*([^;}]*)', css_content) if topnav_color_match: topnav_color_hex = topnav_color_match.group(1) print(f"In {absolute_css_url}: The color of 'topnav' class is: {topnav_color_hex}") topnav_color = int(topnav_color_hex[1:], 16) else: print(f"In {absolute_css_url}: 'topnav' class color not found.") topnav_color = 0xff00aa else: print(f"Failed to fetch CSS file: {absolute_css_url}") topnav_color = 0xff00aa else: print("No CSS files containing 'theme' in their name found.") topnav_color = 0xff00aa if content_warning and "display: none" not in content_warning.get("style", ""): content_warning_text = content_warning.find("p").text.strip() if content_warning.find("p") else "No content warning text available." embeddesc = f'This page has a trigger warning.\n⚠️ {content_warning_text}' embedt=discord.Embed(title=f"{title}", url=f'{base_url}{random_link}', description=f"{embeddesc}", color=0xff0000) await ctx.reply(embed=embedt) elif main_content: main_image = main_content.find("img") if main_image: main_image_src = main_image.get("src") cleaned_imageURL = main_image_src.replace("../../..", "") cleaned_cleaned_imageURL = cleaned_imageURL.replace("https://sparklecarehospital.com", "") print(f'{base_url}{cleaned_cleaned_imageURL}') embedcolor = 0xff00aa embeddesc = f"This page doesn't have a trigger warning." embed=discord.Embed(title=f"{title}", url=f'{base_url}{random_link}', description=f"{embeddesc}", color=topnav_color) embed.set_image(url=f'{base_url}{cleaned_cleaned_imageURL}') await ctx.reply(embed=embed) else: await ctx.reply("No image found in the main content.") else: await ctx.reply("Content sections not found.") else: await ctx.reply("Failed to fetch the webpage. Status code:", response.status_code) random_link = fetch_random_link() if random_link: print("Random Link:", random_link) time.sleep(1) await process_page(random_link) else: await ctx.reply("No suitable random link found.") @commands.command(brief='Converts sentences to Countrountrish', help="Puts sentences backwards, but in the same word order") async def countrountrish(self, ctx, *, message): reversed_words = [] words = message.split() for word in words: reversed_word = word[::-1] reversed_words.append(reversed_word) reversed_message = ' '.join(reversed_words) embed=discord.Embed(description=f"```{reversed_message}```", color=0xff00aa) await ctx.reply(embed=embed) @commands.command(brief='Gets a random Cometcare page', help='Gets a random Cometcare page') async def cometcare(self, ctx): cliont = pytumblr.TumblrRestClient( CONSUMER_KEY, CONSUMER_SECRET, TOKEN_KEY, TOKEN_SECRET ) posts = cliont.posts('askcometcare.tumblr.com', type='photo', tag="cometcare au") postsinposts = len(posts['posts']) random_number = random.randint(1, postsinposts) if 'posts' in posts and len(posts['posts']) > 0: latest_post = posts['posts'][random_number] # Get the HTML content from the JSON html_content = latest_post['body'] # Parse the HTML using BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') # Find the img tag and extract the src attribute img_tag = soup.find('img') img_src = img_tag['src'] embed=discord.Embed(color=0x8A37D5) embed.set_image(url=f'{img_src}') await ctx.reply(embed=embed) else: await ctx.reply("An error occurred. No posts were returned.") @commands.command(brief='Gets a random Darker Matters page', help='Gets a random Darker Matters page') async def darkermatters(self, ctx): cliont = pytumblr.TumblrRestClient( CONSUMER_KEY, CONSUMER_SECRET, TOKEN_KEY, TOKEN_SECRET ) posts = cliont.posts('askdarkermatters.tumblr.com', type='photo', tag="ask blog") postsinposts = len(posts['posts']) random_number = random.randint(1, postsinposts) if 'posts' in posts and len(posts['posts']) > 0: latest_post = posts['posts'][random_number] # Get the HTML content from the JSON html_content = latest_post['body'] # Parse the HTML using BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') # Find the img tag and extract the src attribute img_tag = soup.find('img') img_src = img_tag['src'] embed=discord.Embed(color=0x8A37D5) embed.set_image(url=f'{img_src}') await ctx.reply(embed=embed) else: await ctx.reply("An error occurred. No posts were returned.") @commands.command(brief='Gets a random Askblog page', help='Gets a random Askblog page') async def askblog(self, ctx): cliont = pytumblr.TumblrRestClient( CONSUMER_KEY, CONSUMER_SECRET, TOKEN_KEY, TOKEN_SECRET ) posts = cliont.posts('asksparklecare.tumblr.com', type='photo') image_urls = [] for post in posts['posts']: if 'photos' in post: for photo in post['photos']: image_urls.append(photo['original_size']['url']) # Select a random image URL random_image_url = random.choice(image_urls) embed=discord.Embed(color=0xff47d1) embed.set_image(url=f'{random_image_url}') await ctx.reply(embed=embed) @commands.command(brief='Gets a random story and a paragraph from that story', help='Grabs a random story from sparklecarehospital.com/stories') async def story(self, ctx): async with ctx.typing(): stories = [ 'Scribbles', 'Fact or Fiction', 'Goldfish' ] random_story = random.choice(stories) if random_story == 'Scribbles': tnail = 'https://sparklecarehospital.com/media/assets/rates.png' story_url = "https://sparklecarehospital.com/stories/scribbles" elif random_story == 'Fact or Fiction': tnail = 'https://sparklecarehospital.com/media/assets/factfiction1.png' story_url = "https://sparklecarehospital.com/stories/fact-or-fiction" else: tnail = 'https://sparklecarehospital.com/media/assets/factfiction1.png' story_url = "https://sparklecarehospital.com/stories/goldfish" # Define headers with a User-Agent headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } response = requests.get(story_url, headers=headers) # Check if the request was successful if response.status_code == 200: # Parse the HTML content using BeautifulSoup soup = BeautifulSoup(response.content, 'html.parser') body_div = soup.find('td', class_='body') # Find all
elements p_elements = body_div.find_all('p') # Choose a random
element random_p = random.choice(p_elements) # Print the text of the random
element paragraph = random_p.get_text() embed=discord.Embed(title=f"{random_story}", description=f"{paragraph}", url=f"{story_url}", color=0xff47d1) embed.set_thumbnail(url=f"{tnail}") await ctx.reply(embed=embed) async def setup(client): await client.add_cog(Cmds(client))