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()