Finish up set birthday command.

This commit is contained in:
2023-09-09 13:27:22 -04:00
parent 1a8c5616ef
commit efadcb30c7
+25 -6
View File
@@ -6,7 +6,8 @@ from datetime import datetime
import nextcord import nextcord
from nextcord.ext import commands from nextcord.ext import commands
from sqlalchemy import delete from sqlalchemy import delete, select
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from dakiny_bot import birthday_list from dakiny_bot import birthday_list
@@ -45,22 +46,40 @@ class setCog(commands.Cog, name="Set Commands"):
day (int, optional): The day a user was born. Is SlashOption. day (int, optional): The day a user was born. Is SlashOption.
""" """
# Must be deferred, apparently datetime takes a little bit on invalid dates.
await interaction.response.defer(ephemeral=True)
if month == 0 and day == 0: if month == 0 and day == 0:
stmt = delete(UserBirthday).where(UserBirthday.UserId == interaction.user.id) stmt = delete(UserBirthday).where(UserBirthday.UserId == interaction.user.id)
with Session(engine) as session: with Session(engine) as session:
session.scalar(stmt) session.execute(stmt)
session.commit() session.commit()
await interaction.followup.send("Removed birthday.", ephemeral=True)
return return
# check if valid day # check if valid day
today = datetime.today() today = datetime.today()
birthday = datetime(today.year, month, day) try:
birthday = datetime(today.year, month, day)
except ValueError:
await interaction.followup.send(f"Invalid date: {month}/{day}.", ephemeral=True)
return
# If the birthday is today, add to birthday_list # If the birthday is today, add to birthday_list
if today.date() == birthday.date(): if today.date() == birthday.date():
birthday_list.append(interaction.user.id) birthday_list.append(interaction.user.id)
new_birthday = UserBirthday(interaction.user.id, f"{month}/{day}") new_birthday = UserBirthday(UserId=interaction.user.id, Birthday=f"{month}/{day}")
with Session(engine) as session: with Session(engine) as session:
session.add(new_birthday) try:
session.commit() session.add(new_birthday)
session.commit()
except IntegrityError:
# User already has birthday, change it instead.
session.rollback()
stmt = select(UserBirthday).where(UserBirthday.UserId == interaction.user.id)
new_birthday = session.scalar(stmt)
new_birthday.Birthday = f"{month}/{day}"
session.commit()
await interaction.followup.send(f"Birthday set to {month}/{day}.", ephemeral=True)