diff --git a/data/Birthday.py b/data/Birthday.py index 6d58307..37179e3 100644 --- a/data/Birthday.py +++ b/data/Birthday.py @@ -33,3 +33,23 @@ class Birthday: ids = [item[0] for item in ids] return ids + + @staticmethod + def get_upcoming_birthdays(): + query = """ + SELECT user_id, DATE_FORMAT(birthday, '%m-%d') AS upcoming_birthday + FROM birthdays + WHERE DAYOFYEAR(birthday) > DAYOFYEAR(NOW()) + ORDER BY DAYOFYEAR(birthday) + LIMIT 5; + """ + data = database.select_query(query) + + upcoming = [] + for row in data: + user_id = row[0] + birthday = row[1] + upcoming.append((user_id, birthday)) + + return upcoming + diff --git a/main.py b/main.py index 1501581..2e096d9 100644 --- a/main.py +++ b/main.py @@ -113,8 +113,8 @@ async def on_message(message): return # remove if debugging leveling or reaction handler: - # if instance.lower() != "main": - # return + if instance.lower() != "main": + return try: xp_handler = XPHandler() diff --git a/modules/birthday.py b/modules/birthday.py index 8540a0c..908fc80 100644 --- a/modules/birthday.py +++ b/modules/birthday.py @@ -6,6 +6,7 @@ import random import discord from discord import default_permissions +from discord.commands import SlashCommandGroup from discord.ext import commands, tasks from config import json_loader @@ -29,8 +30,10 @@ class BirthdayCog(commands.Cog): self.bot = sbbot self.daily_birthday_check.start() - @commands.slash_command( - name="birthday", + birthday = SlashCommandGroup("birthday", "various birthday commands.") + + @birthday.command( + name="set", description="Set your birthday.", guild_only=True ) @@ -53,8 +56,46 @@ class BirthdayCog(commands.Cog): await ctx.respond(strings["birthday_set"].format(ctx.author.name, month, day), ephemeral=True) - @commands.slash_command( - name="override-birthday", + @birthday.command( + name="upcoming", + description="See upcoming birthdays!", + guild_only=True + ) + @commands.cooldown(1, 10, commands.BucketType.user) + async def upcoming_birthdays(self, ctx): + upcoming_birthdays = Birthday.get_upcoming_birthdays() + icon = ctx.guild.icon if ctx.guild.icon else "https://i.imgur.com/79XfsbS.png" + + embed = discord.Embed( + color=discord.Color.embed_background() + ) + embed.set_author(name="Upcoming Birthdays!", icon_url=icon) + embed.set_thumbnail(url="https://i.imgur.com/79XfsbS.png") + + for i, (user_id, birthday) in enumerate(upcoming_birthdays, start=1): + try: + member = await ctx.guild.fetch_member(user_id) + name = member.name + except: + name = "Unknown User" + + try: + birthday_date = datetime.datetime.strptime(birthday, "%m-%d") + formatted_birthday = birthday_date.strftime("%B %-d") + except ValueError: + # leap year error + formatted_birthday = "February 29" + + embed.add_field( + name=f"{name}", + value=f"🎂 {formatted_birthday}", + inline=False + ) + + await ctx.respond(embed=embed) + + @birthday.command( + name="override", description="Override a birthday - requires Manage Server.", guild_only=True )