Skip to content

Commit

Permalink
Merge pull request #155 from stijndcl/3.2.0
Browse files Browse the repository at this point in the history
3.2.0
  • Loading branch information
stijndcl authored Nov 7, 2022
2 parents c1721b9 + 8f8f7fe commit 3bc9c15
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 11 deletions.
13 changes: 8 additions & 5 deletions database/crud/deadlines.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import datetime
from typing import Optional
from zoneinfo import ZoneInfo

Expand All @@ -24,13 +25,15 @@ async def add_deadline(session: AsyncSession, course_id: int, name: str, date_st
await session.commit()


async def get_deadlines(session: AsyncSession, *, course: Optional[UforaCourse] = None) -> list[Deadline]:
"""Get a list of all deadlines that are currently known
This includes deadlines that have passed already
"""
async def get_deadlines(
session: AsyncSession, *, after: Optional[datetime.date] = None, course: Optional[UforaCourse] = None
) -> list[Deadline]:
"""Get a list of all upcoming deadlines"""
statement = select(Deadline)

if after is not None:
statement = statement.where(Deadline.deadline > after)

if course is not None:
statement = statement.where(Deadline.course_id == course.course_id)

Expand Down
14 changes: 9 additions & 5 deletions didier/cogs/school.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from didier.exceptions import HTTPException, NotInMainGuildException
from didier.utils.discord.converters.time import DateTransformer
from didier.utils.discord.flags.school import StudyGuideFlags
from didier.utils.discord.users import to_main_guild_member
from didier.utils.discord.users import has_course, to_main_guild_member
from didier.utils.types.datetime import skip_weekends, tz_aware_today


Expand All @@ -30,11 +30,15 @@ def __init__(self, client: Didier):
@commands.hybrid_command(name="deadlines")
async def deadlines(self, ctx: commands.Context):
"""Show upcoming deadlines."""
async with self.client.postgres_session as session:
deadlines = await get_deadlines(session)
async with ctx.typing():
async with self.client.postgres_session as session:
deadlines = await get_deadlines(session, after=tz_aware_today())

member = to_main_guild_member(self.client, ctx.author)
deadlines = list(filter(lambda d: has_course(member, d.course), deadlines))

embed = Deadlines(deadlines).to_embed()
await ctx.reply(embed=embed, mention_author=False, ephemeral=False)
embed = Deadlines(deadlines).to_embed()
await ctx.reply(embed=embed, mention_author=False, ephemeral=False)

@commands.hybrid_command(name="les", aliases=["sched", "schedule"])
@app_commands.rename(day_dt="date")
Expand Down
18 changes: 17 additions & 1 deletion didier/utils/discord/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,26 @@

import discord

from database.schemas import UforaCourse
from didier import Didier
from didier.exceptions import NotInMainGuildException

__all__ = ["to_main_guild_member"]
__all__ = ["has_course", "to_main_guild_member"]


def has_course(member: discord.Member, course: UforaCourse) -> bool:
"""Check if a member is taking a Ufora course"""
for role in member.roles:
if role.id == course.role_id:
return True

if course.overarching_role_id is not None and course.overarching_role_id == role.id:
return True

if course.alternative_overarching_role_id is not None and course.alternative_overarching_role_id == role.id:
return True

return False


def to_main_guild_member(client: Didier, user: Union[discord.User, discord.Member]) -> discord.Member:
Expand Down

0 comments on commit 3bc9c15

Please sign in to comment.