Найти тему
BiSMARK~LiFE

Код для бота телеграм.

import logging

from telegram import InlineKeyboardMarkup, InlineKeyboardButton, ReplyKeyboardMarkup

from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackQueryHandler

# Инициализация бота

updater = Updater(token='YOUR_TOKEN', use_context=True)

dispatcher = updater.dispatcher

# Логирование ошибок

logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)

# Глобальные переменные

services = [

   {"name": "Услуга 1", "price": 100},

   {"name": "Услуга 2", "price": 200},

   {"name": "Услуга 3", "price": 300}

]

active_orders = {}

# Команда /start

def start(update, context):

   user = update.message.from_user

   reply_markup = get_services_keyboard()

   context.bot.send_message(chat_id=update.effective_chat.id, text="Привет, я бот! Чем могу помочь?", reply_markup=reply_markup)

# Обработка выбора услуги

def select_service(update, context):

   query = update.callback_query

   service_index = int(query.data)

   service = services[service_index]

   active_orders[query.message.chat_id] = {

       "service": service["name"],

       "price": service["price"],

       "status": "На рассмотрении"

   }

   reply_markup = get_order_actions_keyboard()

   context.bot.send_message(chat_id=query.message.chat_id, text=f"Вы выбрали услугу: {service['name']}\n\nПожалуйста, укажите комментарий:", reply_markup=reply_markup)

   context.bot.delete_message(chat_id=query.message.chat_id, message_id=query.message.message_id)

# Обработка комментария к заказу

def add_comment(update, context):

   comment = update.message.text

   chat_id = update.message.chat_id

   order = active_orders[chat_id]

   order["comment"] = comment

   context.bot.send_message(chat_id=chat_id, text="Спасибо за комментарий!\n\nЧто бы вы хотели сделать с заказом?", reply_markup=get_order_actions_keyboard())

# Обработка выбора действия с заказом

def handle_order_action(update, context):

   query = update.callback_query

   action = query.data

   chat_id = query.message.chat_id

   order = active_orders[chat_id]

   if action == "dialog":

       context.bot.send_message(chat_id=chat_id, text="Ожидайте, менеджер свяжется с вами в ближайшее время.")

   elif action == "invoice":

       reply_markup = ReplyKeyboardMarkup([["Подтвердить оплату"]], one_time_keyboard=True)

       context.bot.send_message(chat_id=chat_id, text="Пожалуйста, укажите сумму для выставления счета:")

       context.bot.send_message(chat_id=chat_id, text="Выберите платежную систему:", reply_markup=reply_markup)

   elif action == "cancel":

       order["status"] = "Отменен"

       context.bot.send_message(chat_id=chat_id, text="Заказ отменен.")

   context.bot.delete_message(chat_id=query.message.chat_id, message_id=query.message.message_id)

# Обработка подтверждения оплаты

def confirm_payment(update, context):

   chat_id = update.message.chat_id

   order = active_orders[chat_id]

   order["status"] = "Активен"

   context.bot.send_message(chat_id=chat_id, text="Оплата прошла успешно! Ваш заказ теперь активен.")

# Клавиатура с доступными услугами

def get_services_keyboard():

   buttons = []

   for i, service in enumerate(services):

       buttons.append([InlineKeyboardButton(service["name"], callback_data=str(i))])

   return InlineKeyboardMarkup(buttons)

# Клавиатура с действиями над заказом

def get_order_actions_keyboard():

   buttons = [

       [InlineKeyboardButton("Диалог", callback_data="dialog")],

       [InlineKeyboardButton("Выставить счёт", callback_data="invoice")],

       [InlineKeyboardButton("Отменить", callback_data="cancel")]

   ]

   return InlineKeyboardMarkup(buttons)

# Обработчики команд и сообщений

start_handler = CommandHandler('start', start)

select_service_handler = CallbackQueryHandler(select_service)

add_comment_handler = MessageHandler(Filters.text & (~Filters.command), add_comment)

handle_order_action_handler = CallbackQueryHandler(handle_order_action)

confirm_payment_handler = MessageHandler(Filters.text & (~Filters.command), confirm_payment)

# Регистрация обработчиков

dispatcher.add_handler(start_handler)

dispatcher.add_handler(select_service_handler)

dispatcher.add_handler(add_comment_handler)

dispatcher.add_handler(handle_order_action_handler)

dispatcher.add_handler(confirm_payment_handler)

# Запуск своего бота.

updater.start_polling()