diff --git a/cogs/cmds.py b/cogs/cmds.py new file mode 100644 index 0000000..cd94c6f --- /dev/null +++ b/cogs/cmds.py @@ -0,0 +1,293 @@ +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)) \ No newline at end of file