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