def mensa_handler(update: Update, context: CallbackContext):
    text = " ".join(context.args)
    pattern = text.strip()
    code_name = None
    for retries in range(config.retries_api_failure):
        try:
            code_name = client.get_mensas(config.endpoint, pattern)
            break
        except JSONDecodeError:
            logging.debug(
                f"JSONDecodeError: Try number {retries + 1} / {config.retries_api_failure}"
            )
            sleep(1)
            continue
    if code_name is None:
        logging.exception("Failed to load code_names")
        return
    mensa_chooser = InlineKeyboardMarkup(
        inline_keyboard=[
            [InlineKeyboardButton(text=name, callback_data=code)]
            for code, name in sorted(code_name.items(), key=lambda item: item[1])
        ]
    )
    context.bot.send_message(
        update.effective_message.chat_id,
        emojize("Wähle Deine Mensa aus. :index_pointing_up:"),
        reply_markup=mensa_chooser,
    )
def mensa_handler(update: Update, context: CallbackContext):
    text = " ".join(context.args)
    pattern = text.strip()
    code_name = client.get_mensas(config.endpoint, pattern)
    mensa_chooser = InlineKeyboardMarkup(
        inline_keyboard=[[InlineKeyboardButton(text=name, callback_data=code)]
                         for code, name in sorted(code_name.items(),
                                                  key=lambda item: item[1])])
    context.bot.send_message(
        update.message.chat_id,
        emojize("Wähle Deine Mensa aus. :index_pointing_up:"),
        reply_markup=mensa_chooser,
    )
def callback_handler(update: Update, context: CallbackContext):
    query = update.callback_query
    if query:
        if query.data.startswith("A"):
            allergen_number = query.data.lstrip("A")
            name = client.get_allergens(config.endpoint)[allergen_number]
            context.bot.answer_callback_query(query.id, text=f"„{name}” usgewählt.")
            allergens = user_db.allergens_of(query.message.chat_id)
            allergens.add(allergen_number)
            user_db.set_allergens_for(query.message.chat_id, allergens)
            logging.info(f"Set {query.message.chat_id} allergens to {allergens}")
        else:
            name = client.get_mensas(config.endpoint)[int(query.data)]
            context.bot.answer_callback_query(
                query.id,
                text=f"„{name}“ ausgewählt.",
            )
            user_db.set_mensa_for(query.message.chat_id, query.data)
            logging.info(f"Set {query.message.chat_id} mensa to {query.data}")
def info_handler(update: Update, context: CallbackContext):
    number_name = client.get_allergens(config.endpoint)
    code_name = client.get_mensas(config.endpoint)
    myallergens = user_db.allergens_of(update.message.chat_id)
    mymensa = user_db.mensa_of(update.message.chat_id)
    subscribed = user_db.is_subscriber(update.message.chat_id)
    subscription_filter = (user_db.menu_filter_of(update.message.chat_id)
                           or "kein Filter")
    context.bot.send_message(
        update.message.chat_id,
        "*MENSA*\n{mensa}\n\n*ABO*\n{subscription}\n\n*ALLERGENE*\n{allergens}"
        .format(
            mensa=code_name[mymensa] if mymensa is not None else "keine",
            allergens="\n".join(number_name[number] for number in myallergens),
            subscription=emojize(
                (":thumbs_up:" if subscribed else ":thumbs_down:") +
                " ({})".format(subscription_filter)),
        ),
        parse_mode=ParseMode.MARKDOWN,
    )
def callback_handler(update: Update, context: CallbackContext):
    query = update.callback_query
    if query:
        if query.data.startswith("A"):
            allergen_number = query.data.lstrip("A")
            name = client.get_allergens(config.endpoint)[allergen_number]
            context.bot.answer_callback_query(
                query.id,
                text=emojize(f"„{name}” ausgewählt. :heavy_check_mark:"))
            allergens = user_db.allergens_of(query.message.chat_id)
            allergens.add(allergen_number)
            user_db.set_allergens_for(query.message.chat_id, allergens)
            logging.info("Set {}.allergens to {}".format(
                query.message.chat_id, allergens))
        else:
            name = client.get_mensas(config.endpoint)[int(query.data)]
            context.bot.answer_callback_query(
                query.id,
                text=emojize(
                    "„{}“ ausgewählt. :heavy_check_mark:".format(name)),
            )
            user_db.set_mensa_for(query.message.chat_id, query.data)
            logging.info("Set {}.mensa to {}".format(query.message.chat_id,
                                                     query.data))