aboutsummaryrefslogtreecommitdiffstats
path: root/bot/exts/valentines/valentine_zodiac.py
diff options
context:
space:
mode:
authorGravatar Janine vN <[email protected]>2021-09-04 23:35:00 -0400
committerGravatar Janine vN <[email protected]>2021-09-04 23:35:00 -0400
commit7ea66723f5f9c09e77e0b063002d4b222e7cc9d0 (patch)
treeb175e14bafcc80ce164eb10ea81ed33f67e78420 /bot/exts/valentines/valentine_zodiac.py
parentMove Halloween to Holidays folder (diff)
Move Valentines to Holidays folder
Moves the valentine's day features to the holidays folders. Corrected the paths to reflect the folder moves.
Diffstat (limited to 'bot/exts/valentines/valentine_zodiac.py')
-rw-r--r--bot/exts/valentines/valentine_zodiac.py146
1 files changed, 0 insertions, 146 deletions
diff --git a/bot/exts/valentines/valentine_zodiac.py b/bot/exts/valentines/valentine_zodiac.py
deleted file mode 100644
index 243f156e..00000000
--- a/bot/exts/valentines/valentine_zodiac.py
+++ /dev/null
@@ -1,146 +0,0 @@
-import calendar
-import json
-import logging
-import random
-from datetime import datetime
-from pathlib import Path
-from typing import Union
-
-import discord
-from discord.ext import commands
-
-from bot.bot import Bot
-from bot.constants import Colours
-
-log = logging.getLogger(__name__)
-
-LETTER_EMOJI = ":love_letter:"
-HEART_EMOJIS = [":heart:", ":gift_heart:", ":revolving_hearts:", ":sparkling_heart:", ":two_hearts:"]
-
-
-class ValentineZodiac(commands.Cog):
- """A Cog that returns a counter compatible zodiac sign to the given user's zodiac sign."""
-
- def __init__(self):
- self.zodiacs, self.zodiac_fact = self.load_comp_json()
-
- @staticmethod
- def load_comp_json() -> tuple[dict, dict]:
- """Load zodiac compatibility from static JSON resource."""
- explanation_file = Path("bot/resources/valentines/zodiac_explanation.json")
- compatibility_file = Path("bot/resources/valentines/zodiac_compatibility.json")
-
- zodiac_fact = json.loads(explanation_file.read_text("utf8"))
-
- for zodiac_data in zodiac_fact.values():
- zodiac_data["start_at"] = datetime.fromisoformat(zodiac_data["start_at"])
- zodiac_data["end_at"] = datetime.fromisoformat(zodiac_data["end_at"])
-
- zodiacs = json.loads(compatibility_file.read_text("utf8"))
-
- return zodiacs, zodiac_fact
-
- def generate_invalidname_embed(self, zodiac: str) -> discord.Embed:
- """Returns error embed."""
- embed = discord.Embed()
- embed.color = Colours.soft_red
- error_msg = f"**{zodiac}** is not a valid zodiac sign, here is the list of valid zodiac signs.\n"
- names = list(self.zodiac_fact)
- middle_index = len(names) // 2
- first_half_names = ", ".join(names[:middle_index])
- second_half_names = ", ".join(names[middle_index:])
- embed.description = error_msg + first_half_names + ",\n" + second_half_names
- log.info("Invalid zodiac name provided.")
- return embed
-
- def zodiac_build_embed(self, zodiac: str) -> discord.Embed:
- """Gives informative zodiac embed."""
- zodiac = zodiac.capitalize()
- embed = discord.Embed()
- embed.color = Colours.pink
- if zodiac in self.zodiac_fact:
- log.trace("Making zodiac embed.")
- embed.title = f"__{zodiac}__"
- embed.description = self.zodiac_fact[zodiac]["About"]
- embed.add_field(name="__Motto__", value=self.zodiac_fact[zodiac]["Motto"], inline=False)
- embed.add_field(name="__Strengths__", value=self.zodiac_fact[zodiac]["Strengths"], inline=False)
- embed.add_field(name="__Weaknesses__", value=self.zodiac_fact[zodiac]["Weaknesses"], inline=False)
- embed.add_field(name="__Full form__", value=self.zodiac_fact[zodiac]["full_form"], inline=False)
- embed.set_thumbnail(url=self.zodiac_fact[zodiac]["url"])
- else:
- embed = self.generate_invalidname_embed(zodiac)
- log.trace("Successfully created zodiac information embed.")
- return embed
-
- def zodiac_date_verifier(self, query_date: datetime) -> str:
- """Returns zodiac sign by checking date."""
- for zodiac_name, zodiac_data in self.zodiac_fact.items():
- if zodiac_data["start_at"].date() <= query_date.date() <= zodiac_data["end_at"].date():
- log.trace("Zodiac name sent.")
- return zodiac_name
-
- @commands.group(name="zodiac", invoke_without_command=True)
- async def zodiac(self, ctx: commands.Context, zodiac_sign: str) -> None:
- """Provides information about zodiac sign by taking zodiac sign name as input."""
- final_embed = self.zodiac_build_embed(zodiac_sign)
- await ctx.send(embed=final_embed)
- log.trace("Embed successfully sent.")
-
- @zodiac.command(name="date")
- async def date_and_month(self, ctx: commands.Context, date: int, month: Union[int, str]) -> None:
- """Provides information about zodiac sign by taking month and date as input."""
- if isinstance(month, str):
- month = month.capitalize()
- try:
- month = list(calendar.month_abbr).index(month[:3])
- log.trace("Valid month name entered by user")
- except ValueError:
- log.info("Invalid month name entered by user")
- await ctx.send(f"Sorry, but `{month}` is not a valid month name.")
- return
- if (month == 1 and 1 <= date <= 19) or (month == 12 and 22 <= date <= 31):
- zodiac = "capricorn"
- final_embed = self.zodiac_build_embed(zodiac)
- else:
- try:
- zodiac_sign_based_on_date = self.zodiac_date_verifier(datetime(2020, month, date))
- log.trace("zodiac sign based on month and date received.")
- except ValueError as e:
- final_embed = discord.Embed()
- final_embed.color = Colours.soft_red
- final_embed.description = f"Zodiac sign could not be found because.\n```\n{e}\n```"
- log.info(f"Error in 'zodiac date' command:\n{e}.")
- else:
- final_embed = self.zodiac_build_embed(zodiac_sign_based_on_date)
-
- await ctx.send(embed=final_embed)
- log.trace("Embed from date successfully sent.")
-
- @zodiac.command(name="partnerzodiac", aliases=("partner",))
- async def partner_zodiac(self, ctx: commands.Context, zodiac_sign: str) -> None:
- """Provides a random counter compatible zodiac sign to the given user's zodiac sign."""
- embed = discord.Embed()
- embed.color = Colours.pink
- zodiac_check = self.zodiacs.get(zodiac_sign.capitalize())
- if zodiac_check:
- compatible_zodiac = random.choice(self.zodiacs[zodiac_sign.capitalize()])
- emoji1 = random.choice(HEART_EMOJIS)
- emoji2 = random.choice(HEART_EMOJIS)
- embed.title = "Zodiac Compatibility"
- embed.description = (
- f"{zodiac_sign.capitalize()}{emoji1}{compatible_zodiac['Zodiac']}\n"
- f"{emoji2}Compatibility meter : {compatible_zodiac['compatibility_score']}{emoji2}"
- )
- embed.add_field(
- name=f"A letter from Dr.Zodiac {LETTER_EMOJI}",
- value=compatible_zodiac["description"]
- )
- else:
- embed = self.generate_invalidname_embed(zodiac_sign)
- await ctx.send(embed=embed)
- log.trace("Embed from date successfully sent.")
-
-
-def setup(bot: Bot) -> None:
- """Load the Valentine zodiac Cog."""
- bot.add_cog(ValentineZodiac())