diff options
Diffstat (limited to '')
| -rw-r--r-- | bot/constants.py | 10 | ||||
| -rw-r--r-- | bot/seasons/christmas/adventofcode.py | 4 | ||||
| -rw-r--r-- | bot/seasons/christmas/hanukkah_embed.py | 112 | ||||
| -rw-r--r-- | bot/seasons/halloween/candy_collection.py | 10 | ||||
| -rw-r--r-- | bot/seasons/halloween/halloween_facts.py | 4 | ||||
| -rw-r--r-- | bot/seasons/valentines/be_my_valentine.py | 4 | 
6 files changed, 127 insertions, 17 deletions
| diff --git a/bot/constants.py b/bot/constants.py index d362c90e..bf542daf 100644 --- a/bot/constants.py +++ b/bot/constants.py @@ -18,7 +18,6 @@ class AdventOfCode:      leaderboard_join_code = str(environ.get("AOC_JOIN_CODE", None))      leaderboard_max_displayed_members = 10      year = 2018 -    channel_id = int(environ.get("AOC_CHANNEL_ID", 517745814039166986))      role_id = int(environ.get("AOC_ROLE_ID", 518565788744024082)) @@ -61,13 +60,14 @@ class Client(NamedTuple):  class Colours: -    yellow = 0xf9f586 -    soft_red = 0xcd6d6d -    soft_green = 0x68c290 +    blue = 0x0279fd      bright_green = 0x01d277      dark_green = 0x1f8b4c      orange = 0xe67e22      pink = 0xcf84e0 +    soft_green = 0x68c290 +    soft_red = 0xcd6d6d +    yellow = 0xf9f586  class Emojis: @@ -84,12 +84,10 @@ class Emojis:  class Lovefest: -    channel_id = int(environ.get("LOVEFEST_CHANNEL_ID", 542272993192050698))      role_id = int(environ.get("LOVEFEST_ROLE_ID", 542431903886606399))  class Hacktoberfest(NamedTuple): -    channel_id = 498804484324196362      voice_id = 514420006474219521 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") diff --git a/bot/seasons/halloween/candy_collection.py b/bot/seasons/halloween/candy_collection.py index 70648e64..f8ab4c60 100644 --- a/bot/seasons/halloween/candy_collection.py +++ b/bot/seasons/halloween/candy_collection.py @@ -7,7 +7,7 @@ import random  import discord  from discord.ext import commands -from bot.constants import Hacktoberfest +from bot.constants import Channels  log = logging.getLogger(__name__) @@ -41,7 +41,7 @@ class CandyCollection(commands.Cog):          if message.author.bot:              return          # ensure it's hacktober channel -        if message.channel.id != Hacktoberfest.channel_id: +        if message.channel.id != Channels.seasonalbot_chat:              return          # do random check for skull first as it has the lower chance @@ -65,7 +65,7 @@ class CandyCollection(commands.Cog):              return          # check to ensure it is in correct channel -        if message.channel.id != Hacktoberfest.channel_id: +        if message.channel.id != Channels.seasonalbot_chat:              return          # if its not a candy or skull, and it is one of 10 most recent messages, @@ -127,7 +127,7 @@ class CandyCollection(commands.Cog):          ten_recent = []          recent_msg = max(message.id for message                           in self.bot._connection._messages -                         if message.channel.id == Hacktoberfest.channel_id) +                         if message.channel.id == Channels.seasonalbot_chat)          channel = await self.hacktober_channel()          ten_recent.append(recent_msg.id) @@ -159,7 +159,7 @@ class CandyCollection(commands.Cog):      async def hacktober_channel(self):          """Get #hacktoberbot channel from its ID.""" -        return self.bot.get_channel(id=Hacktoberfest.channel_id) +        return self.bot.get_channel(id=Channels.seasonalbot_chat)      async def remove_reactions(self, reaction):          """Remove all candy/skull reactions.""" diff --git a/bot/seasons/halloween/halloween_facts.py b/bot/seasons/halloween/halloween_facts.py index ee90dbd3..ad9aa716 100644 --- a/bot/seasons/halloween/halloween_facts.py +++ b/bot/seasons/halloween/halloween_facts.py @@ -7,7 +7,7 @@ from pathlib import Path  import discord  from discord.ext import commands -from bot.constants import Hacktoberfest +from bot.constants import Channels  log = logging.getLogger(__name__) @@ -40,7 +40,7 @@ class HalloweenFacts(commands.Cog):      async def on_ready(self):          """Get event Channel object and initialize fact task loop.""" -        self.channel = self.bot.get_channel(Hacktoberfest.channel_id) +        self.channel = self.bot.get_channel(Channels.seasonalbot_chat)          self.bot.loop.create_task(self._fact_publisher_task())      def random_fact(self): diff --git a/bot/seasons/valentines/be_my_valentine.py b/bot/seasons/valentines/be_my_valentine.py index 5ff5857b..8340d7fa 100644 --- a/bot/seasons/valentines/be_my_valentine.py +++ b/bot/seasons/valentines/be_my_valentine.py @@ -8,7 +8,7 @@ import discord  from discord.ext import commands  from discord.ext.commands.cooldowns import BucketType -from bot.constants import Client, Colours, Lovefest +from bot.constants import Channels, Client, Colours, Lovefest  log = logging.getLogger(__name__) @@ -99,7 +99,7 @@ class BeMyValentine(commands.Cog):          emoji_1, emoji_2 = self.random_emoji()          lovefest_role = discord.utils.get(ctx.guild.roles, id=Lovefest.role_id) -        channel = self.bot.get_channel(Lovefest.channel_id) +        channel = self.bot.get_channel(Channels.seasonalbot_chat)          valentine, title = self.valentine_check(valentine_type)          if user is None: | 
