didier/didier/data/embeds/hydra/menu.py

49 lines
1.5 KiB
Python
Raw Normal View History

2022-08-28 22:15:03 +02:00
from datetime import datetime
from typing import Literal, Optional, cast
import discord
from overrides import overrides
from pydantic import BaseModel
from didier.data.embeds.base import EmbedPydantic
from didier.utils.discord.colours import ghent_university_blue
2022-08-28 22:15:03 +02:00
from didier.utils.types.datetime import int_to_weekday
from didier.utils.types.string import leading
2022-08-28 22:15:03 +02:00
__all__ = ["Menu", "no_menu_found"]
class _Meal(BaseModel):
"""Model for an item on the menu"""
kind: Literal["meat", "fish", "soup", "vegetarian", "vegan"]
name: str
price: str
2022-08-28 22:15:03 +02:00
type: Literal["cold", "main", "side"]
class Menu(EmbedPydantic):
"""Embed that shows the menu in Ghent University restaurants"""
meals: list[_Meal] = []
open: bool
vegetables: list[str] = []
message: Optional[str] = None
@overrides
2022-08-28 22:15:03 +02:00
def to_embed(self, **kwargs) -> discord.Embed:
day_dt: datetime = cast(datetime, kwargs.get("day_dt"))
weekday = int_to_weekday(day_dt.weekday())
formatted_date = f"{leading('0', str(day_dt.day))}/{leading('0', str(day_dt.month))}/{day_dt.year}"
embed = discord.Embed(title=f"Menu - {weekday} {formatted_date}", colour=ghent_university_blue())
return embed
2022-08-28 22:15:03 +02:00
def no_menu_found(day_dt: datetime) -> discord.Embed:
"""Return a different embed if no menu could be found"""
embed = discord.Embed(title="Menu", colour=discord.Colour.red())
embed.description = f"Unable to retrieve menu for {day_dt.strftime('%d/%m/%Y')}."
return embed