Генерация сообщения с выбранными товарами в телеграм боте

У меня есть список в котором хранятся кортежи с информацией о товаре.

cart = [
    (6754, 'Футболка', '50 грн', 'XL'),
    (666, 'Кроссовки Abibas', '300 грн', '39'),
    (7954, 'Штаны', '40 гривень', 'XXXXXXL')
]

Количество товаров может быть разное, и я не буду его знать, поэтому нужно сгенерировать сообщение выбранные товары пользователем.

Мне нужно отправить сообщение в Телеграмм боте по команде "/cart", где и будут те самые товары. Но я не могу понять как это можно реализовать. Сообщение должно выглядеть примерно так: Пример сообщения

Заранее спасибо!


Ответы (3 шт):

Автор решения: N1kitaFil

Используйте aiogram.

Либо pyTelegramBotAPI.

Нужная для вас информация и примеры есть в документации.

Для форматирования \n и прочее используйте.

→ Ссылка
Автор решения: Maxim Chyorny

введите сюда описание изображения

В красивом оформлении:

beautiful_message = (
        '? Список товаров в корзине:'
        '\n\n'
        f'       1. {cart[0][1]}:\n'
        f'          Цена: {cart[0][2]}\n'
        f'          Размер: {cart[0][3]}\n'
        '\n'
        f'       2. {cart[1][1]}:\n'
        f'          Цена: {cart[1][2]}\n'
        f'          Размер: {cart[1][3]}\n'
        '\n'
        f'       3. {cart[2][1]}:\n'
        f'          Цена: {cart[2][2]}\n'
        f'          Размер: {cart[2][3]}\n'
    )

Также вы можете использовать цикл, который будет генерировать это сообщение, чтобы не пришлось писать постоянно вручную.. а сделать это можно пройдясь двумя циклами, сперва по всем имеющимся товарам, после по данным в каждом из кортежей для получения информации о товаре, в итоге получаем такую карусель:

beautiful_message = ('? Список товаров в корзине:\n\n')

for product in cart:
    for beauty_text in range(len(product)):
        if beauty_text != 0 and beauty_text == 1:
            beautiful_message += f'     {cart.index(product)+1}. {product[beauty_text]}:\n'
        elif beauty_text == 2:
            beautiful_message += f'         Цена: {product[beauty_text]}\n'
        elif beauty_text == 3:
            beautiful_message += f'         Размер: {product[beauty_text]}\n\n'

# весь текст расположен в переменной beautiful_message
→ Ссылка
Автор решения: Даниил
def generate(cart: tuple) -> str:
    result = "? Список товаров в корзине:"
    if len(cart) == 0:
        result += f"\n\n{' '*8}Корзина пуста."

    for index, item in enumerate(cart):
        result += f"\n\n{' '*8}{index+1}. {item[1]}:\n{' '*12}Цена: {item[2]}\n{' '*12}Размер: {item[3]}"
    return result

Результат работы функции, полностью готовое сообщение:

Можете сами отредактировать параметры {' '*8}, чтобы задать другой отступ (*8 это кол-во пробелов).

→ Ссылка