120 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import os
 | ||
| from config import dp, db, bot, supp_group_id, oper_group_id, notification_group_id, use_chats
 | ||
| from aiogram import types
 | ||
| from aiogram.dispatcher import FSMContext
 | ||
| from functions import get_categories_user, get_subcategories_user, send_good
 | ||
| from markups import menu_mkp, promo_mkp
 | ||
| from states import NewBuy
 | ||
| from personnel import *
 | ||
| 
 | ||
| @dp.callback_query_handler(text='shop')
 | ||
| @dp.callback_query_handler(text='toshop')
 | ||
| async def toshopcall(call: types.CallbackQuery):
 | ||
| 	if db.check_ban(call.from_user.id):
 | ||
| 		await call.message.delete()
 | ||
| 		await call.message.answer('Выберите категорию:', reply_markup=get_categories_user())
 | ||
| 
 | ||
| @dp.callback_query_handler(text_contains='usercat_')
 | ||
| async def usercatcall(call: types.CallbackQuery):
 | ||
|     if db.check_ban(call.from_user.id):
 | ||
|         catid = call.data.split('_')[1]
 | ||
|         await call.message.delete()
 | ||
|         await call.message.answer('Выберите подкатегорию:', reply_markup=get_subcategories_user(int(catid)))
 | ||
| 
 | ||
| @dp.callback_query_handler(text_contains='usersubcat_', state=NewBuy.Paying)
 | ||
| @dp.callback_query_handler(text_contains='usersubcat_', state=NewBuy.Promo)
 | ||
| @dp.callback_query_handler(text_contains='usersubcat_')
 | ||
| async def usersubcatcall(call: types.CallbackQuery, state: FSMContext):
 | ||
|     if db.check_ban(call.from_user.id):
 | ||
|         try:
 | ||
|             await state.finish()
 | ||
|         except:
 | ||
|             pass
 | ||
|         subcatid = call.data.split('_')[1]
 | ||
|         if len(db.check_goods(int(subcatid))) == 0:
 | ||
|             await call.answer('К сожалению тут пусто', show_alert=True)
 | ||
|         else:
 | ||
|             await call.message.delete()
 | ||
|             await send_good(0, int(subcatid), call.from_user.id)
 | ||
| 
 | ||
| @dp.callback_query_handler(text_contains='catback_')
 | ||
| async def catbackcall(call: types.CallbackQuery):
 | ||
|     if db.check_ban(call.from_user.id):
 | ||
|         await call.message.delete()
 | ||
|         subcatid = call.data.split('_')[1]
 | ||
|         step = call.data.split('_')[2]
 | ||
|         await send_good(int(step), int(subcatid), call.from_user.id)
 | ||
| 
 | ||
| @dp.callback_query_handler(text_contains='catnext_')
 | ||
| async def catnextcall(call: types.CallbackQuery):
 | ||
|     if db.check_ban(call.from_user.id):
 | ||
|         await call.message.delete()
 | ||
|         subcatid = call.data.split('_')[1]
 | ||
|         step = call.data.split('_')[2]
 | ||
|         await send_good(int(step), int(subcatid), call.from_user.id)
 | ||
| 
 | ||
| @dp.callback_query_handler(text_contains='buyGood_')
 | ||
| async def buyGood(call: types.CallbackQuery, state: FSMContext):
 | ||
|     if db.check_ban(call.from_user.id):
 | ||
|         await call.message.delete()
 | ||
|         goodId = call.data.split('_')[1]
 | ||
|         subCatId = call.data.split('_')[2]
 | ||
|         goodInfo = db.get_goodinfo(goodId)
 | ||
|         await NewBuy.Promo.set()
 | ||
|         async with state.proxy() as data:
 | ||
|             data['GoodId'] = {"goodId": goodId, "subCatId": subCatId}
 | ||
|         await call.message.answer(f'⌛ Покупка <b>{goodInfo[0]}</b>\nЦена: <b>{goodInfo[2]}</b>₽ \n\nВведите промокод (если есть) :', reply_markup=promo_mkp(subCatId))
 | ||
| 
 | ||
| @dp.message_handler(state=NewBuy.Promo)
 | ||
| async def newBuyPromo(message: types.Message, state: FSMContext):
 | ||
|     promocode = message.text
 | ||
|     promoInfo = db.get_promo_info(promocode)
 | ||
|     async with state.proxy() as data:
 | ||
|         goodId = data['GoodId']["goodId"]
 | ||
|         subCatId = data['GoodId']["subCatId"]
 | ||
| 
 | ||
|     if promoInfo != None:
 | ||
|         async with state.proxy() as data:
 | ||
|             data['Promo'] = promocode
 | ||
| 
 | ||
|         promoPercent = promoInfo[1]
 | ||
|         goodInfo = db.get_goodinfo(goodId)
 | ||
|         mkp = types.InlineKeyboardMarkup()
 | ||
|         btn1 = types.InlineKeyboardButton('✅  Оформить заказ', callback_data='buyOrder')
 | ||
|         btn2 = types.InlineKeyboardButton('❌ Отменить покупку', callback_data=f'usersubcat_{subCatId}')
 | ||
|         mkp.add(btn1).add(btn2)
 | ||
|         newPrice = float(goodInfo[2]) * ((100 - int(promoPercent))/100)
 | ||
|         await message.answer(f'📦 Применен промокод <b>{promocode}</b>\nЗаказ:\n\nТовар: <b>{goodInfo[0]}</b>\nЦена: <b>{goodInfo[2]}</b>₽ \nС учетом скидок: <b>{newPrice}</b>₽\n\nХотите оформить заказ?', reply_markup=mkp)
 | ||
|         await NewBuy.next()
 | ||
| 
 | ||
|     else:
 | ||
|         await message.answer(f'⏳ Промокод <b>{promocode}</b> введен неверно или он не существует! Введите промокод повторно (если есть :', reply_markup=promo_mkp(subCatId))
 | ||
| 
 | ||
| @dp.callback_query_handler(text='buyOrder', state=NewBuy.Paying)
 | ||
| @dp.callback_query_handler(text='skipPromo', state=NewBuy.Promo)
 | ||
| async def buyOrder(call: types.CallbackQuery, state: FSMContext):
 | ||
|     if db.check_ban(call.from_user.id):
 | ||
|         async with state.proxy() as data:
 | ||
|             goodId = data['GoodId']["goodId"]
 | ||
|             subCatId = data['GoodId']["subCatId"]
 | ||
|             goodInfo = db.get_goodinfo(goodId)
 | ||
|             if call.data == "buyOrder":
 | ||
|                 promocode = data['Promo']
 | ||
|                 promoInfo = db.get_promo_info(promocode)
 | ||
|                 promoPercent = promoInfo[1]
 | ||
|                 newPrice = float(goodInfo[2]) * ((100 - int(promoPercent))/100)
 | ||
|             else:
 | ||
|                 promocode = None
 | ||
|                 newPrice = float(goodInfo[2])
 | ||
|         await call.message.delete()
 | ||
|         orderId = db.add_order(call.from_user.id, goodId, promocode, newPrice)
 | ||
|         mkp = types.InlineKeyboardMarkup(row_width=4)
 | ||
|         userId = call.from_user.id
 | ||
|         client = db.get_usernamerev(int(userId))
 | ||
|         if use_chats == True:
 | ||
|          await bot.send_message(oper_group_id, f"💡 Новый заказ! \n\nПользователь <b>{client}</b>\nНомер заказа: <b>{orderId}</b> \nТовар: <b>{goodInfo[0]}</b> \nЦена: <b>{goodInfo[2]}</b>₽ \nС учетом скидок: <b>{newPrice}</b>₽")
 | ||
|         else:
 | ||
|        	 await bot.send_message(operators, f"💡 Новый заказ! \n\nПользователь:<b>{client}</b>\nНомер заказа: <b>{orderId}</b> \nТовар: <b>{goodInfo[0]}</b>\nЦена: <b>{goodInfo[2]}₽</b> \nС учетом скидок: <b>{newPrice}</b>₽")
 | ||
|         await call.message.answer(f"Спасибо <b>{client}</b> за обращение! \n\nЗаказ передан операторам, ожидайте дальнейших инструкций, во избежание мошенничества, спросите у оператора номер вашего заказа.\n\nНомер заказа: <b>{orderId}</b> \nТовар: <b>{goodInfo[0]}</b> \nЦена: <b>{goodInfo[2]}₽</b> \nС учетом скидок: <b>{newPrice}</b>₽")
 | ||
|         await state.finish()
 |