diff options
| author | 2019-05-11 22:20:12 -0400 | |
|---|---|---|
| committer | 2019-05-11 22:20:12 -0400 | |
| commit | f85ab4e4507481d0b5119b4e6722fb82e711c24e (patch) | |
| tree | 528dbd0ac83a36350bb811bc35b9f573c16be6e0 /bot/seasons/christmas | |
| parent | Fix broken avatar URL getter patterns (diff) | |
| parent | Hanukkah embed (#164) (diff) | |
Merge branch 'master' into pypi-dpy
Diffstat (limited to 'bot/seasons/christmas')
| -rw-r--r-- | bot/seasons/christmas/adventofcode.py | 4 | ||||
| -rw-r--r-- | bot/seasons/christmas/hanukkah_embed.py | 112 | 
2 files changed, 114 insertions, 2 deletions
| diff --git a/bot/seasons/christmas/adventofcode.py b/bot/seasons/christmas/adventofcode.py index 075c5606..440484b4 100644 --- a/bot/seasons/christmas/adventofcode.py +++ b/bot/seasons/christmas/adventofcode.py @@ -13,7 +13,7 @@ from bs4 import BeautifulSoup  from discord.ext import commands  from pytz import timezone -from bot.constants import AdventOfCode as AocConfig, Colours, Emojis, Tokens +from bot.constants import AdventOfCode as AocConfig, Channels, Colours, Emojis, Tokens  log = logging.getLogger(__name__) @@ -88,7 +88,7 @@ async def day_countdown(bot: commands.Bot):          await asyncio.sleep(time_left.seconds) -        channel = bot.get_channel(AocConfig.channel_id) +        channel = bot.get_channel(Channels.seasonalbot_chat)          if not channel:              log.error("Could not find the AoC channel to send notification in") diff --git a/bot/seasons/christmas/hanukkah_embed.py b/bot/seasons/christmas/hanukkah_embed.py new file mode 100644 index 00000000..652a1f35 --- /dev/null +++ b/bot/seasons/christmas/hanukkah_embed.py @@ -0,0 +1,112 @@ +import datetime +import logging + +from discord import Embed +from discord.ext import commands + +from bot.constants import Colours + + +log = logging.getLogger(__name__) + + +class HanukkahEmbed(commands.Cog): +    """A cog that returns information about Hanukkah festival.""" + +    def __init__(self, bot): +        self.bot = bot +        self.url = ("https://www.hebcal.com/hebcal/?v=1&cfg=json&maj=on&min=on&mod=on&nx=on&" +                    "year=now&month=x&ss=on&mf=on&c=on&geo=geoname&geonameid=3448439&m=50&s=on") +        self.hanukkah_days = [] +        self.hanukkah_months = [] +        self.hanukkah_years = [] + +    async def get_hanukkah_dates(self): +        """Gets the dates for hanukkah festival.""" +        hanukkah_dates = [] +        async with self.bot.http_session.get(self.url) as response: +            json_data = await response.json() +        festivals = json_data['items'] +        for festival in festivals: +            if festival['title'].startswith('Chanukah'): +                date = festival['date'] +                hanukkah_dates.append(date) +        return hanukkah_dates + +    @commands.command(name='hanukkah', aliases=['chanukah']) +    async def hanukkah_festival(self, ctx): +        """Tells you about the Hanukkah Festivaltime of festival, festival day, etc).""" +        hanukkah_dates = await self.get_hanukkah_dates() +        self.hanukkah_dates_split(hanukkah_dates) +        hanukkah_start_day = int(self.hanukkah_days[0]) +        hanukkah_start_month = int(self.hanukkah_months[0]) +        hanukkah_start_year = int(self.hanukkah_years[0]) +        hanukkah_end_day = int(self.hanukkah_days[8]) +        hanukkah_end_month = int(self.hanukkah_months[8]) +        hanukkah_end_year = int(self.hanukkah_years[8]) + +        hanukkah_start = datetime.date(hanukkah_start_year, hanukkah_start_month, hanukkah_start_day) +        hanukkah_end = datetime.date(hanukkah_end_year, hanukkah_end_month, hanukkah_end_day) +        today = datetime.date.today() +        # today = datetime.date(2019, 12, 24) (for testing) +        day = str(today.day) +        month = str(today.month) +        year = str(today.year) +        embed = Embed() +        embed.title = 'Hanukkah' +        embed.colour = Colours.blue +        if day in self.hanukkah_days and month in self.hanukkah_months and year in self.hanukkah_years: +            if int(day) == hanukkah_start_day: +                now = datetime.datetime.utcnow() +                now = str(now) +                hours = int(now[11:13]) + 4  # using only hours +                hanukkah_start_hour = 18 +                if hours < hanukkah_start_hour: +                    embed.description = (f"Hanukkah hasnt started yet, " +                                         f"it will start in about {hanukkah_start_hour-hours} hour/s.") +                    return await ctx.send(embed=embed) +                elif hours > hanukkah_start_hour: +                    embed.description = (f'It is the starting day of Hanukkah ! ' +                                         f'Its been {hours-hanukkah_start_hour} hours hanukkah started !') +                    return await ctx.send(embed=embed) +            festival_day = self.hanukkah_days.index(day) +            number_suffixes = ['st', 'nd', 'rd', 'th'] +            suffix = '' +            if int(festival_day) == 1: +                suffix = number_suffixes[0] +            if int(festival_day) == 2: +                suffix = number_suffixes[1] +            if int(festival_day) == 3: +                suffix = number_suffixes[2] +            if int(festival_day) > 3: +                suffix = number_suffixes[3] +            message = '' +            for _ in range(1, festival_day + 1): +                message += ':menorah:' +            embed.description = f'It is the {festival_day}{suffix} day of Hanukkah ! \n {message}' +            await ctx.send(embed=embed) +        else: +            if today < hanukkah_start: +                festival_starting_month = hanukkah_start.strftime('%B') +                embed.description = (f"Hanukkah has not started yet. " +                                     f"Hanukkah will start at sundown on {hanukkah_start_day}th " +                                     f"of {festival_starting_month}.") +            else: +                festival_end_month = hanukkah_end.strftime('%B') +                embed.description = (f"Looks like you missed Hanukkah !" +                                     f"Hanukkah ended on {hanukkah_end_day}th of {festival_end_month}.") + +            await ctx.send(embed=embed) + +    def hanukkah_dates_split(self, hanukkah_dates): +        """We are splitting the dates for hanukkah into days, months and years.""" +        for date in hanukkah_dates: +            self.hanukkah_days.append(date[8:10]) +            self.hanukkah_months.append(date[5:7]) +            self.hanukkah_years.append(date[0:4]) + + +def setup(bot): +    """Cog load.""" +    bot.add_cog(HanukkahEmbed(bot)) +    log.info("Hanukkah embed cog loaded") | 
