Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Python Код поомгите

Артём Мусаелян Ученик (123), открыт 4 недели назад
Вот код в тг не открывает кнопок
import telebot
from telebot import types

bot = telebot.TeleBot("7388191311:AAE-taUw6qzlM7E1mQPSWvb7ktSrJQdE-yY")

shop = {
'goods': {},
'orders': {}
}

@bot.message_handler(commands=['start'])
def start(message):
bot.send_message(message.chat.id, 'Привет! Я — магазин. Что ты хочешь купить?')

@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
if call.data == 'каталог':
bot.send_document(call.message.from_user, open('catalog.txt', 'rb'))

elif call.data == 'автор':
bot.send_text(call.message.from_user, 'Автор магазина: [имя автора]')

elif call.data == 'товары':
bot.send_document(call.message.from_user, open('goods.txt', 'rb'))

elif call.data == 'купить':
item = call.data.split(' ')[1]
bot.send_text(call.message.from_user, f'Хорошо, {item} добавлен в корзину.')

# Обработка заказа
@bot.message_handler()
def get_order(message):
items = message.text.split(', ')
for item in items:
if item not in shop['goods']:
bot.reply_to(message, 'Я не знаю такого товара. Попробуй ещё раз.')
return

total = sum([shop['goods'][item]['price'] for item in items])
bot.send_text(message.from_ user.id , f"Ваш заказ на сумму {total} успешно оформлен!")

shop['orders'][message.chat.id] = items

# Отправка подтверждения и информации о доставке
@bot.message_handler(content_types=['text'])
def send_confirmation(message):
if message.text == 'подтвердить':
bot.send_text(message.from_ user.id , "Ваш заказ успешно подтверждён!")
else: bot.reply_to(message, "Я не понимаю ваш запрос. Попробуйте ещё раз.")

# Отображение купленных товаров
@bot.message_handler()
def show_bought_items(message):
items = shop['orders'][message.chat.id]
bot.send_document(message.chat.id, open('bought.txt', 'rb'))

bot.polling(none_stop=True)
3 ответа
Перекись Водорода Знаток (269) 4 недели назад
Попробуй похлопать 5 раз в ладоши
Николай Армоньев Гуру (4355) 4 недели назад
Ваш код содержит несколько ошибок и недочетов, которые могут мешать его правильной работе. Давайте разберем его и исправим.

Недостаток кнопок:

В коде не создаются кнопки для взаимодействия с пользователем. Чтобы создать кнопки, используйте InlineKeyboardMarkup и InlineKeyboardButton.

Функция отправки сообщений:

Необходимо использовать правильные методы для отправки текстовых сообщений и файлов.

Ошибки в именах методов:

Методы bot.send_text и bot.send_document нужно заменить на bot.send_message и bot.send_document.

Некорректная обработка чатов:

При вызове методов необходимо правильно передавать идентификаторы и сообщения.

Логика обработки заказа:

В коде есть некорректные определения обработчиков сообщений.

Вот улучшенная версия вашего кода с учетом вышеперечисленных моментов:

import telebot

from telebot import types

bot = telebot.TeleBot("7388191311:AAE-taUw6qzlM7E1mQPSWvb7ktSrJQdE-yY")

shop = {

'goods': {

'товар1': {'price': 100},

'товар2': {'price': 200}

},

'orders': {}

}

@bot.message_handler(commands=['start'])

def start(message):

markup = types.InlineKeyboardMarkup()

btn_catalog = types.InlineKeyboardButton("Каталог", callback_data='каталог')

btn_author = types.InlineKeyboardButton("Автор", callback_data='автор')

markup.add(btn_catalog, btn_author)

bot.send_message(message.chat.id, 'Привет! Я — магазин. Что ты хочешь купить?', reply_markup=markup)

@bot.callback_query_handler(func=lambda call: True)

def callback_inline(call):

if call.data == 'каталог':

bot.send_document(call.message.chat.id, open('catalog.txt', 'rb'))

elif call.data == 'автор':

bot.send_message(call.message.chat.id, 'Автор магазина: [имя автора]')

elif call.data.startswith('купить'):

item = call.data.split(' ')[1]

bot.send_message(call.message.chat.id, f'Хорошо, {item} добавлен в корзину.')

@bot.message_handler(func=lambda message: True)

def get_order(message):

items = message.text.split(', ')

for item in items:

if item not in shop['goods']:

bot.reply_to(message, 'Я не знаю такого товара. Попробуй ещё раз.')

return

total = sum([shop['goods'][item]['price'] for item in items if item in shop['goods']])

bot.send_message(message.chat.id, f"Ваш заказ на сумму {total} успешно оформлен!")

shop['orders'][message.chat.id] = items

@bot.message_handler(func=lambda message: message.text == 'подтвердить')

def send_confirmation(message):
Николай АрмоньевГуру (4355) 4 недели назад
bot.send_message(message.chat.id, "Ваш заказ успешно подтверждён!")

@bot.message_handler(func=lambda message: True)

def show_bought_items(message):

if message.chat.id in shop['orders']:

items = shop['orders'][message.chat.id]

bot.send_message(message.chat.id, f"Вы купили: {', '.join(items)}")

else:

bot.send_message(message.chat.id, "У вас нет купленных товаров.")

bot.polling(none_stop=True)

Ключевые изменения:

Добавлены кнопки для взаимодействия с пользователем.

Исправлены методы для отправки сообщений.

Введены проверки на наличие товара в shop['goods'].

Оптимизирована логика обработки сообщений.

Попробуйте использовать этот код и проверьте, работают ли кнопки корректно
Артём МусаелянУченик (123) 4 недели назад
Привет line 25
markup = types.InlineKeyboardMarkup()
^
IndentationError: expected an indented block after function definition on line 23
Выдаёт эту ошибку
Похожие вопросы