mirror of
https://github.com/nexy7574/LCC-bot.git
synced 2024-09-19 18:16:34 +01:00
Add term time breaks to timetable system
This commit is contained in:
parent
2a11ae112f
commit
124edea57a
1 changed files with 58 additions and 24 deletions
|
@ -1,5 +1,5 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
from typing import Optional, Union
|
from typing import Optional, Union, Dict
|
||||||
|
|
||||||
import discord
|
import discord
|
||||||
from discord.ext import commands, tasks
|
from discord.ext import commands, tasks
|
||||||
|
@ -24,6 +24,20 @@ class TimeTableCog(commands.Cog):
|
||||||
self.timetable = json.load(file)
|
self.timetable = json.load(file)
|
||||||
self.update_status.start()
|
self.update_status.start()
|
||||||
|
|
||||||
|
def are_on_break(self, date: datetime = None) -> Optional[Dict[str, Union[str, datetime]]]:
|
||||||
|
"""Checks if the date is one as a term break"""
|
||||||
|
date = date or datetime.now()
|
||||||
|
# That description made no sense what
|
||||||
|
for name, dates in self.timetable["breaks"].items():
|
||||||
|
start_date = datetime.strptime(dates["start"], "%d/%m/%Y")
|
||||||
|
end_date = datetime.strptime(dates["end"], "%d/%m/%Y")
|
||||||
|
if date.timestamp() in range(int(start_date.timestamp()), int(end_date.timestamp())):
|
||||||
|
return {
|
||||||
|
"name": name,
|
||||||
|
"start": start_date,
|
||||||
|
"end": end_date
|
||||||
|
}
|
||||||
|
|
||||||
def cog_unload(self):
|
def cog_unload(self):
|
||||||
self.update_status.stop()
|
self.update_status.stop()
|
||||||
|
|
||||||
|
@ -90,30 +104,50 @@ class TimeTableCog(commands.Cog):
|
||||||
no_prefix: bool = False,
|
no_prefix: bool = False,
|
||||||
):
|
):
|
||||||
date = date or datetime.now()
|
date = date or datetime.now()
|
||||||
lesson = self.current_lesson(date)
|
_break = self.are_on_break(date)
|
||||||
if not lesson:
|
if _break:
|
||||||
next_lesson = self.next_lesson(date)
|
next_lesson = await asyncio.to_thread(
|
||||||
if not next_lesson:
|
self.absolute_next_lesson,
|
||||||
next_lesson = await asyncio.to_thread(
|
_break["end"] + timedelta(days=1, hours=7)
|
||||||
self.absolute_next_lesson
|
)
|
||||||
)
|
next_lesson = next_lesson or {
|
||||||
text = "[tt] No more lessons today!\n" \
|
"name": "Unknown",
|
||||||
f"[tt] Next Lesson: {next_lesson['name']!r} with {next_lesson['tutor']} in " \
|
"tutor": "Unknown",
|
||||||
f"{next_lesson['room']} - " \
|
"room": "Unknown"
|
||||||
f"Starts {discord.utils.format_dt(next_lesson['start_datetime'], 'R')}"
|
}
|
||||||
|
text = "[tt] On break {!r} from {} until {}. Break ends {}, and the first lesson back is " \
|
||||||
else:
|
"{lesson[name!r]} with {lesson[tutor]} in {lesson[room]}.".format(
|
||||||
text = f"[tt] Next Lesson: {next_lesson['name']!r} with {next_lesson['tutor']} in " \
|
_break["name"],
|
||||||
f"{next_lesson['room']} - Starts {discord.utils.format_dt(next_lesson['start_datetime'], 'R')}"
|
discord.utils.format_dt(_break["start"], "d"),
|
||||||
|
discord.utils.format_dt(_break["end"], "d"),
|
||||||
|
discord.utils.format_dt(_break["end"], "R"),
|
||||||
|
lesson=next_lesson
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
text = f"[tt] Current Lesson: {lesson['name']!r} with {lesson['tutor']} in {lesson['room']} - " \
|
lesson = self.current_lesson(date)
|
||||||
f"ends {discord.utils.format_dt(lesson['end_datetime'], 'R')}"
|
if not lesson:
|
||||||
next_lesson = self.next_lesson(date)
|
next_lesson = self.next_lesson(date)
|
||||||
if next_lesson:
|
if not next_lesson:
|
||||||
text += "\n[tt] Next lesson: {0[name]!r} with {0[tutor]} in {0[room]} - starts {1}".format(
|
next_lesson = await asyncio.to_thread(
|
||||||
next_lesson,
|
self.absolute_next_lesson
|
||||||
discord.utils.format_dt(next_lesson["start_datetime"], 'R')
|
)
|
||||||
)
|
text = "[tt] No more lessons today!\n" \
|
||||||
|
f"[tt] Next Lesson: {next_lesson['name']!r} with {next_lesson['tutor']} in " \
|
||||||
|
f"{next_lesson['room']} - " \
|
||||||
|
f"Starts {discord.utils.format_dt(next_lesson['start_datetime'], 'R')}"
|
||||||
|
|
||||||
|
else:
|
||||||
|
text = f"[tt] Next Lesson: {next_lesson['name']!r} with {next_lesson['tutor']} in " \
|
||||||
|
f"{next_lesson['room']} - Starts {discord.utils.format_dt(next_lesson['start_datetime'], 'R')}"
|
||||||
|
else:
|
||||||
|
text = f"[tt] Current Lesson: {lesson['name']!r} with {lesson['tutor']} in {lesson['room']} - " \
|
||||||
|
f"ends {discord.utils.format_dt(lesson['end_datetime'], 'R')}"
|
||||||
|
next_lesson = self.next_lesson(date)
|
||||||
|
if next_lesson:
|
||||||
|
text += "\n[tt] Next lesson: {0[name]!r} with {0[tutor]} in {0[room]} - starts {1}".format(
|
||||||
|
next_lesson,
|
||||||
|
discord.utils.format_dt(next_lesson["start_datetime"], 'R')
|
||||||
|
)
|
||||||
|
|
||||||
if no_prefix:
|
if no_prefix:
|
||||||
text = text.replace("[tt] ", "")
|
text = text.replace("[tt] ", "")
|
||||||
|
|
Loading…
Reference in a new issue