Compare commits

..

3 Commits

3 changed files with 34 additions and 8 deletions

View File

@ -4,7 +4,7 @@ LABEL maintainer="Lord Baryhobal <lordbaryhobal@gmail.com>"
RUN echo "Installing Typst" \ RUN echo "Installing Typst" \
&& wget -q -O /tmp/typst.tar.xz https://github.com/typst/typst/releases/download/v0.11.1/typst-x86_64-unknown-linux-musl.tar.xz \ && wget -q -O /tmp/typst.tar.xz https://github.com/typst/typst/releases/download/v0.11.1/typst-x86_64-unknown-linux-musl.tar.xz \
&& tar -x /tmp/typst.tar.xz -C /tmp/ \ && tar -xf /tmp/typst.tar.xz -C /tmp/ \
&& mv /tmp/typst-x86_64-unknown-linux-musl/typst /usr/bin/typst \ && mv /tmp/typst-x86_64-unknown-linux-musl/typst /usr/bin/typst \
&& chmod +x /usr/bin/typst \ && chmod +x /usr/bin/typst \
&& rm -r /tmp/typst-x86_64-unknown-linux-musl \ && rm -r /tmp/typst-x86_64-unknown-linux-musl \

View File

@ -12,6 +12,7 @@ import aiohttp
import telegram.constants import telegram.constants
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from telegram import Update, InlineKeyboardMarkup, InlineKeyboardButton from telegram import Update, InlineKeyboardMarkup, InlineKeyboardButton
from telegram.constants import ParseMode
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes, CallbackQueryHandler, Application from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes, CallbackQueryHandler, Application
log_dir = os.getenv("BEEBOT_LOGS") log_dir = os.getenv("BEEBOT_LOGS")
@ -96,6 +97,7 @@ class BeeBot:
self.load_i18n() self.load_i18n()
self.tg_app = ApplicationBuilder().token(self.tg_token).build() self.tg_app = ApplicationBuilder().token(self.tg_token).build()
self.tg_app.add_handler(CommandHandler("start", self.cmd_start))
self.tg_app.add_handler(CommandHandler("week", self.cmd_week)) self.tg_app.add_handler(CommandHandler("week", self.cmd_week))
self.tg_app.add_handler(CommandHandler("today", self.cmd_today)) self.tg_app.add_handler(CommandHandler("today", self.cmd_today))
self.tg_app.add_handler(CommandHandler("settings", self.cmd_settings)) self.tg_app.add_handler(CommandHandler("settings", self.cmd_settings))
@ -115,6 +117,11 @@ class BeeBot:
return f"[{key}]" return f"[{key}]"
return self.langs[lang][key] return self.langs[lang][key]
async def cmd_start(self, update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
logger.debug("Received /start")
lang = self.get_user_pref(update, context)["lang"]
await update.effective_chat.send_message(text=self.i18n(lang, "notif.start"), parse_mode=ParseMode.HTML)
async def cmd_week(self, update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: async def cmd_week(self, update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
logger.debug("Received /week") logger.debug("Received /week")
await self.request_menu(update, context, False) await self.request_menu(update, context, False)
@ -215,9 +222,14 @@ class BeeBot:
async with self.fetch_lock: async with self.fetch_lock:
if not os.path.exists(menu_path) or self.is_outdated(menu_id, today_only): if not os.path.exists(menu_path) or self.is_outdated(menu_id, today_only):
if today_only: if today_only:
await self.fetch_today_menu() available = await self.fetch_today_menu()
else: else:
await self.fetch_week_menu() available = await self.fetch_week_menu()
if not available:
await msg.edit_text(self.i18n(prefs["lang"], "notif.unavailable"))
return
await msg.delete() await msg.delete()
# If image needs to be (re)generated # If image needs to be (re)generated
@ -338,33 +350,41 @@ class BeeBot:
self.cache[menu_id] = datetime.datetime.today().strftime("%Y-%m-%d") self.cache[menu_id] = datetime.datetime.today().strftime("%Y-%m-%d")
self.save_cache() self.save_cache()
async def fetch_week_menu(self) -> None: async def fetch_week_menu(self) -> bool:
logger.info("Fetching week menu") logger.info("Fetching week menu")
today = datetime.datetime.today() today = datetime.datetime.today()
delta = datetime.timedelta(days=today.weekday()) delta = datetime.timedelta(days=today.weekday())
monday = today - delta monday = today - delta
days = [] days = []
menus_count = 0
for i in range(5): for i in range(5):
dt = datetime.timedelta(days=i) dt = datetime.timedelta(days=i)
date = monday + dt date = monday + dt
menus = await self.fetch_menu(date) menus = await self.fetch_menu(date)
menus_count += len(menus)
days.append({ days.append({
"date": date.strftime("%Y-%m-%d"), "date": date.strftime("%Y-%m-%d"),
"menus": menus "menus": menus
}) })
if menus_count == 0:
return False
self.save_menu(days, "week_menu", "menus_week.json") self.save_menu(days, "week_menu", "menus_week.json")
return True
async def fetch_today_menu(self) -> None: async def fetch_today_menu(self) -> bool:
logger.info("Fetching today menu") logger.info("Fetching today menu")
today = datetime.datetime.today() today = datetime.datetime.today()
menus = await self.fetch_menu(today) menus = await self.fetch_menu(today)
if len(menus) == 0:
return False
days = [{ days = [{
"date": today.strftime("%Y-%m-%d"), "date": today.strftime("%Y-%m-%d"),
"menus": menus "menus": menus
}] }]
self.save_menu(days, "today_menu", "menus_today.json") self.save_menu(days, "today_menu", "menus_today.json")
return True
async def fetch_menu(self, date: datetime.date) -> list: async def fetch_menu(self, date: datetime.date) -> list:
url = self.MENU_URL.format(date=date.strftime("%Y-%m-%d")) url = self.MENU_URL.format(date=date.strftime("%Y-%m-%d"))

View File

@ -10,7 +10,9 @@
"menu.back_to_settings": "Retour aux paramètres", "menu.back_to_settings": "Retour aux paramètres",
"setting.language": "Langue: {}", "setting.language": "Langue: {}",
"setting.categories": "Catégories: {}", "setting.categories": "Catégories: {}",
"notif.wait_updating": "Le menu est en train d'être mis à jour, veuillez patienter..." "notif.wait_updating": "Le menu est en train d'être mis à jour, veuillez patienter...",
"notif.unavailable": "Il semblerait que le menu ne soit actuellement pas disponible",
"notif.start": "<b>Salut, je suis BeeBot 🐝, le robot des menus de la cafétéria de l'HEI !</b>\n<i>(changer la langue / change language / Sprache ändern: /settings)</i>\n\nPour voir les menus de la <u>semaine</u>, utilisez la commande /week\nPour voir les menus du <u>jour</u>, utilisez /today\n\nSi vous souhaitez changer la <u>langue</u> dans laquelle je parle ou les <u>catégories de prix</u> affichées dans les menus, utilisez la commande /settings\n\n<b>Merci de ne pas spammer</b> afin de ne pas impacter l'utilisation de ce service par les autres personnes\n\n<b>Bon appétit ! 🍽</b>"
}, },
"en": { "en": {
"category.student": "Student", "category.student": "Student",
@ -23,7 +25,9 @@
"menu.back_to_settings": "Back to settings", "menu.back_to_settings": "Back to settings",
"setting.language": "Language: {}", "setting.language": "Language: {}",
"setting.categories": "Categories: {}", "setting.categories": "Categories: {}",
"notif.wait_updating": "The menu is being updated, please wait..." "notif.wait_updating": "The menu is being updated, please wait...",
"notif.unavailable": "It seems that the menu is currently unavailable",
"notif.start": "<b>Hi, I'm BeeBot 🐝, the HEI cafeteria menu robot !</b>\n<i>(changer la langue / change language / Sprache ändern: /settings)</i>\n\nTo see the menus for the <u>week</u>, use the command /week\nTo see <u>today</u>'s menus, use /today\n\nIf you want to change the <u>language</u> I speak or the <u>price categories</u> displayed in the menus, use the command /settings\n\n<b>Please do not spam</b> to avoid affecting other people's use of this service\n\n<b>Enjoy your meal ! 🍽</b>"
}, },
"de": { "de": {
"category.student": "Student", "category.student": "Student",
@ -36,6 +40,8 @@
"menu.back_to_settings": "Zurück zu Einstellungen", "menu.back_to_settings": "Zurück zu Einstellungen",
"setting.language": "Sprache: {}", "setting.language": "Sprache: {}",
"setting.categories": "Kategorien: {}", "setting.categories": "Kategorien: {}",
"notif.wait_updating": "Das Menü wird gerade aktualisiert, bitte warten Sie..." "notif.wait_updating": "Das Menü wird gerade aktualisiert, bitte warten Sie...",
"notif.unavailable": "Es scheint, dass das Menü derzeit nicht verfügbar ist",
"notif.start": "<b>Hallo, ich bin BeeBot 🐝, der Menüroboter der Cafeteria der HEI !</b>\n<i>(changer la langue / change language / Sprache ändern: /settings)</i>\n\nUm die Menüs der <u>Woche</u> zu sehen, verwende den Befehl /week\nUm die Menüs des <u>Tages</u> zu sehen, verwenden Sie /today\n\nWenn Sie die <u>Sprache</u>, in der ich spreche, oder die <u>Preiskategorien</u>, die in den Menüs angezeigt werden, ändern möchten, verwenden Sie den Befehl /settings\n\n<b>Bitte spammen Sie nicht</b>, um die Nutzung dieses Dienstes durch andere Personen nicht zu beeinträchtigen\n\n<b>Guten Appetit ! 🍽</b>"
} }
} }