Телеграм-бот - кнопка "Добавить в корзину "
У меня не выходит кнопку добавить под этой инфой товара
в utils.py я написала этот код
def generate_add_to_card_button(product_id):
button = {"inline_keyboard": []}
products = database.get_products_from_one_category(product_id)
for i in products:
button['inline_keyboard'].append([{
'text': "Добавить",
'callback_data': "add_to_card"
}])
return button
этот код в bot.py
elif "products" in data:
product_id = data.split("_")[2]
await self.bot.send_message(text=utils.generate_add_to_card_button(product_id), chat_id=chat_id)
Ответы (1 шт):
Автор решения: Violet
→ Ссылка
в функции generate_add_to_card_button() сериализуйте button в строку JSON-формата:
import json
...
def generate_add_to_card_button():
products = ['asd']
button = {"inline_keyboard": []}
for _ in products:
button['inline_keyboard'].append([{
'text': "Добавить",
'callback_data': "add_to_card"
}])
return json.dumps(button)
Вопрос только как вы поймёте, что именно было добавлено в корзину, ведь callback_data не содержит информации о товаре.
Можно воспользоваться следующим кодом для передачи дополнительных данных:
{"inline_keyboard":
[[{"text": "Утвердить",
"callback_data": "['order_true', '123']"},
{"text": "Отклонить",
"callback_data": "['order_false', '456']"}]]}
import ast
...
if call.data.startswith("['order_true'"):
number = ast.literal_eval(call.data)[1]
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
text='{0}\n{1}'.format(call.message.text, number))
Таким образом в сообщении number будет 123.
Только не забывайте про ограничение на callback_data в 64 байта.
Так же можете рассмотреть вариант со встроенным функционалом приёма платежей.
