import os import logging from aiogram import Bot, Dispatcher, types from aiogram.contrib.middlewares.logging import LoggingMiddleware from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton from aiogram.utils import executor from aiogram.dispatcher.filters import Text from database import create_tables from logger import log_action from dotenv import load_dotenv # Загрузка переменных окружения из .env файла load_dotenv() API_TOKEN = os.getenv('BOT_API_TOKEN') OPERATORS_GROUP_ID = os.getenv('OPERATORS_GROUP_ID') ADMIN_GROUP_ID = os.getenv('ADMIN_GROUP_ID') logging.basicConfig(level=logging.INFO) bot = Bot(token=API_TOKEN) dp = Dispatcher(bot) dp.middleware.setup(LoggingMiddleware()) # Inline клавиатуры def main_menu_keyboard(): keyboard = InlineKeyboardMarkup() keyboard.add(InlineKeyboardButton('Учетные данные', callback_data='account_data')) keyboard.add(InlineKeyboardButton('Сделать заказ', callback_data='make_order')) keyboard.add(InlineKeyboardButton('История заказов', callback_data='order_history')) keyboard.add(InlineKeyboardButton('Заказать звонок', callback_data='request_call')) keyboard.add(InlineKeyboardButton('Начать разговор с оператором', callback_data='talk_operator')) return keyboard def account_data_keyboard(): keyboard = InlineKeyboardMarkup() keyboard.add(InlineKeyboardButton('Изменить ФИО', callback_data='change_name')) keyboard.add(InlineKeyboardButton('Изменить номер телефона', callback_data='change_phone')) keyboard.add(InlineKeyboardButton('Добавить адрес', callback_data='add_address')) keyboard.add(InlineKeyboardButton('Удалить адрес', callback_data='delete_address')) keyboard.add(InlineKeyboardButton('Поделиться контактом', callback_data='share_contact')) keyboard.add(InlineKeyboardButton('Назад', callback_data='back_to_main')) return keyboard def order_keyboard(): keyboard = InlineKeyboardMarkup() keyboard.add(InlineKeyboardButton('Добавить учетные данные', callback_data='add_account_data')) keyboard.add(InlineKeyboardButton('Выбрать адрес', callback_data='select_address')) keyboard.add(InlineKeyboardButton('Выбрать время для уборки', callback_data='select_time')) keyboard.add(InlineKeyboardButton('Выбрать тип уборки', callback_data='select_cleaning_type')) keyboard.add(InlineKeyboardButton('Выбрать способ оплаты', callback_data='select_payment_method')) keyboard.add(InlineKeyboardButton('Подтвердить заказ', callback_data='confirm_order')) keyboard.add(InlineKeyboardButton('Назад', callback_data='back_to_main')) return keyboard # Обработчики команд @dp.message_handler(commands=['start']) async def send_welcome(message: types.Message): await message.answer("Добро пожаловать в BOTKlining!", reply_markup=main_menu_keyboard()) log_action(message.from_user.id, 'start') @dp.callback_query_handler(lambda c: c.data == 'account_data') async def process_account_data(callback_query: types.CallbackQuery): await bot.answer_callback_query(callback_query.id) await bot.send_message(callback_query.from_user.id, "Учетные данные:", reply_markup=account_data_keyboard()) log_action(callback_query.from_user.id, 'account_data') @dp.callback_query_handler(lambda c: c.data == 'make_order') async def process_make_order(callback_query: types.CallbackQuery): await bot.answer_callback_query(callback_query.id) await bot.send_message(callback_query.from_user.id, "Сделать заказ:", reply_markup=order_keyboard()) log_action(callback_query.from_user.id, 'make_order') @dp.callback_query_handler(lambda c: c.data == 'order_history') async def process_order_history(callback_query: types.CallbackQuery): await bot.answer_callback_query(callback_query.id) # Добавьте логику для просмотра истории заказов await bot.send_message(callback_query.from_user.id, "История заказов:") log_action(callback_query.from_user.id, 'order_history') @dp.callback_query_handler(lambda c: c.data == 'request_call') async def process_request_call(callback_query: types.CallbackQuery): await bot.answer_callback_query(callback_query.id) # Добавьте логику для заказа звонка await bot.send_message(callback_query.from_user.id, "Заказ звонка оформлен. Ожидайте звонок в течение 30 минут.") log_action(callback_query.from_user.id, 'request_call') @dp.callback_query_handler(lambda c: c.data == 'talk_operator') async def process_talk_operator(callback_query: types.CallbackQuery): await bot.answer_callback_query(callback_query.id) # Добавьте логику для начала разговора с оператором await bot.send_message(callback_query.from_user.id, "Разговор с оператором начат.") log_action(callback_query.from_user.id, 'talk_operator') @dp.callback_query_handler(lambda c: c.data == 'back_to_main') async def process_back_to_main(callback_query: types.CallbackQuery): await bot.answer_callback_query(callback_query.id) await bot.send_message(callback_query.from_user.id, "Главное меню:", reply_markup=main_menu_keyboard()) log_action(callback_query.from_user.id, 'back_to_main') if __name__ == '__main__': create_tables() executor.start_polling(dp, skip_updates=True)