Проблема с ботом телеграм

muravleff

Новичок
Пользователь
Сен 27, 2023
1
1
3
Добрый вечер, у меня такая проблема, при нажатии пользователя на кнопку «Сделать заказ», бот просит фотографию товара, и пока пользователь не отправит фотографию и не оформит заказ, он не успокоится, помогает только перезагрузка бота, вот мне нужно, чтобы после кнопки «сделать заказ» можно было нажать на кнопку «вернуться в главное меню» и бот смог вернуть человека на главный экран, заранее спасибо

Вот код:
import telebot
from telebot import types

# Создайте бота и укажите его токен
bot = telebot.TeleBot('')

# Словарь для хранения данных о заказе каждого пользователя
order_data = {}



# Обработчик команды /start и создание кнопок
@bot.message_handler(commands=['start'])
def send_welcome(message):
bot.reply_to(message, f"Добро пожаловать, {message.from_user.first_name}! Я ваш бот для онлайн заказов.")
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
item1 = types.KeyboardButton("Сделать заказ🛒")
item2 = types.KeyboardButton("Скачать Poizon🟦")
item3 = types.KeyboardButton("Оставить отзыв💬")
item4 = types.KeyboardButton("Поддержка🙋‍")
item5 = types.KeyboardButton("Узнать цену💰")
item6 = types.KeyboardButton("Узнать курс Юаня и Лиры💴")
item7 = types.KeyboardButton("Предоплаченные карты PlayStation🇹🇷")
markup.add(item1)
markup.add(item2, item3)
markup.add(item4, item5)
markup.add(item6)
markup.add(item7)
bot.send_message(message.chat.id, "Выберите действие:", reply_markup=markup)


# Обработчик нажатия кнопки "Сделать заказ🛒"
@bot.message_handler(func=lambda message: message.text == "Сделать заказ🛒")
def handle_order_start(message):
chat_id = message.chat.id
bot.send_message(chat_id, "Для оформления заказа, пожалуйста, пришлите фотографию товара.")
bot.register_next_step_handler(message, process_order_photo, chat_id)


def process_order_photo(message, chat_id):
if message.photo:
order_data[chat_id] = {"photo": message.photo[-1].file_id}
bot.send_message(chat_id, "Отлично! Теперь введите ваше ФИО:")
bot.register_next_step_handler(message, process_order_fullname, chat_id)
else:
bot.send_message(chat_id, "Пожалуйста, отправьте фотографию товара.")
bot.register_next_step_handler(message, process_order_photo, chat_id)


def process_order_fullname(message, chat_id):
fullname = message.text
order_data[chat_id]["fullname"] = fullname
bot.send_message(chat_id, "Хорошо! Теперь введите ваш адрес:")
bot.register_next_step_handler(message, process_order_address, chat_id)


def process_order_address(message, chat_id):
address = message.text
order_data[chat_id]["address"] = address

# Получаем короткое имя пользователя
username = message.from_user.username

# Отправляем данные владельцу бота
owner_chat_id = "" # Замените на ID вашего аккаунта
order_info = order_data[chat_id]
photo_id = order_info['photo']
fullname = order_info['fullname']
address = order_info['address']

# После отправки заказа, спрашиваем пользователя о корректности данных
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
item1 = types.KeyboardButton("Да✅")
item2 = types.KeyboardButton("Нет❌")
markup.add(item1, item2)
bot.send_message(chat_id, "Проверьте корректность ваших данных:\n"
f"ФИО: {fullname}\n"
f"Адрес: {address}\n"
"Всё верно?", reply_markup=markup)
bot.register_next_step_handler(message, process_order_confirmation, chat_id)


def process_order_confirmation(message, chat_id):
if message.text.lower() == "да✅":
# Отправляем изображение и имя пользователя
username = message.from_user.username
owner_chat_id = "-4092636907" # Замените на ID вашего аккаунта
order_info = order_data[chat_id]
photo_id = order_info['photo']
fullname = order_info['fullname']
address = order_info['address']
bot.send_photo(owner_chat_id, photo_id, caption=f"Новый заказ от @{username}:\nФИО: {fullname}\nАдрес: {address}")

bot.send_message(chat_id, "Спасибо! Ваш заказ успешно оформлен. Нажмите /start, чтобы вернуться на главную страницу")
else:
bot.send_message(chat_id, "Пожалуйста, введите данные заново.")
handle_order_start(message) # Начинаем процесс оформления заново


# Обработчик нажатия кнопок
@bot.message_handler(func=lambda message: True)
def handle_buttons(message):
if message.text == "Сделать заказ🛒":
bot.send_message(message.chat.id, "Переход на страницу заказа: https://t.me/ordernexus")
elif message.text == "Скачать Poizon🟦":
bot.send_message(message.chat.id, f"Переход на страницу скачивания Poizon:\nВерсия для iPhone - https://apps.apple.com/app/id1012871328\nВерсия для Anroid - https://a.app.qq.com/o/simple.jsp?pkgname=com")
elif message.text == "Оставить отзыв💬":
bot.send_message(message.chat.id, "Переход на страницу для отзывов: https://t.me/feedbacknexus")
elif message.text == "Поддержка🙋‍":
bot.send_message(message.chat.id, "Переход на страницу поддержки: https://t.me/nexushelp")
elif message.text == "Узнать курс Юаня и Лиры💴":
bot.send_message(message.chat.id, "Курс ¥: 14₽, Курс ₺: 5₽")
elif message.text == "Предоплаченные карты PlayStation🇹🇷":
bot.send_message(message.chat.id, "Вы можете приобрести турецкие карты для пополнения кошелька в PlayStation Store от 300₺ до 2700₺, для оформления заказа перейдите по ссылке: https://t.me/nexushelp")
elif message.text == "Узнать цену💰":
# Здесь добавим обработчик для запроса цены товара
bot.send_message(message.chat.id, "Введите цену товара в ¥:")
bot.register_next_step_handler(message, process_price_input)

def process_price_input(message):
try:
price = int(message.text)
# Здесь можно добавить логику для расчета полной стоимости с доставкой и комиссией
# и отправить ответ пользователю
total_cost = calculate_total_cost(price)
bot.send_message(message.chat.id, f"Примерная стоимость заказа с доставкой и комиссией🚚: {total_cost}₽\nТочную цену узнаете при оформлении заказа")
except ValueError:
bot.send_message(message.chat.id, "Пожалуйста, введите корректную цену товара.")

def calculate_total_cost(price):
return price * 14 + 2000


bot.polling()
 
  • Ха-ха!
Реакции: 4olshoy_blen

PYDEV

Пользователь
Пользователь
Авг 31, 2023
72
18
8
Я с telebot не знаком конечно, но вам state в помощь (есть ли в телеботе состояние или нет, не в курсе)
 

Форум IT Специалистов