Compare commits
	
		
			3 Commits
		
	
	
		
			71af05c3ba
			...
			main
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| d890215b12 | |||
| c9c95350a8 | |||
| 2cb5186258 | 
| @@ -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 \ | ||||||
|   | |||||||
| @@ -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")) | ||||||
|   | |||||||
| @@ -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>" | ||||||
|   } |   } | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user