Archived
generated from imcompiling/discord-bot-template
Create birthday set command.
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
from nextcord.ext import commands
|
||||
|
||||
from cogs.commands.birthday import BirthdayCog
|
||||
from cogs.commands.hi import HiCog
|
||||
|
||||
|
||||
@@ -9,4 +10,5 @@ from cogs.commands.hi import HiCog
|
||||
# It is necessary to add these functions to the bot.
|
||||
def setup(bot: commands.Bot) -> None:
|
||||
"""Add all command classes to bot."""
|
||||
bot.add_cog(BirthdayCog())
|
||||
bot.add_cog(HiCog(bot))
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
"""Contains commands for birthday feature."""
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
import nextcord
|
||||
from nextcord.ext import commands
|
||||
from pytz import UTC
|
||||
from sqlmodel import Session, select
|
||||
|
||||
from database.db import engine
|
||||
from database.models import UserBirthday
|
||||
from main import birthday_list
|
||||
|
||||
|
||||
class BirthdayCog(commands.Cog, name="Birthday Commands"):
|
||||
"""Class holds birthday commands."""
|
||||
|
||||
@nextcord.slash_command()
|
||||
async def birthday(self, interaction: nextcord.Interaction) -> None:
|
||||
"""Parent slash command for birthday. Never called."""
|
||||
|
||||
@birthday.subcommand(description="Set your birthday month and day for birthday fun!")
|
||||
async def set(
|
||||
self,
|
||||
interaction: nextcord.Interaction,
|
||||
month: int = nextcord.SlashOption(required=True, min_value=1, max_value=12, description="Your birth month."),
|
||||
day: int = nextcord.SlashOption(required=True, min_value=1, max_value=31, description="Your birth day."),
|
||||
) -> None:
|
||||
"""
|
||||
Set a user's birthday in the database. If birthday is today, adds to the birthday_list.
|
||||
|
||||
Args:
|
||||
interaction (nextcord.Interaction): Interaction that invoked the command.
|
||||
month (int, optional): The month a user was born. Is SlashOption.
|
||||
day (int, optional): The day a user was born. Is SlashOption.
|
||||
|
||||
"""
|
||||
# Ensure that a person used the command.
|
||||
if interaction.user is None:
|
||||
return
|
||||
|
||||
await interaction.response.defer(ephemeral=True)
|
||||
|
||||
# check if valid day
|
||||
today = datetime.now(tz=UTC)
|
||||
try:
|
||||
birthday = datetime(today.year, month, day, tzinfo=UTC)
|
||||
except ValueError:
|
||||
await interaction.followup.send(f"Invalid date: {month}/{day}.", ephemeral=True)
|
||||
return
|
||||
|
||||
# If the birthday is today, add to birthday_list
|
||||
if today.date() == birthday.date():
|
||||
birthday_list.append(interaction.user.id)
|
||||
|
||||
new_birthday = UserBirthday(user_id=interaction.user.id, month=month, day=day)
|
||||
with Session(engine) as session:
|
||||
stmt = select(UserBirthday).where(UserBirthday.user_id == interaction.user.id)
|
||||
if (new_birthday := session.scalar(stmt)) is None:
|
||||
new_birthday = UserBirthday(user_id=interaction.user.id, month=month, day=day)
|
||||
session.add(new_birthday)
|
||||
else:
|
||||
new_birthday.month = month
|
||||
new_birthday.day = day
|
||||
session.commit()
|
||||
|
||||
await interaction.followup.send(f"Birthday set to {month}/{day}.", ephemeral=True)
|
||||
Reference in New Issue
Block a user