Загрузить файлы в «/»
This commit is contained in:
		
							
								
								
									
										119
									
								
								shop.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								shop.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,119 @@ | |||||||
|  | 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() | ||||||
							
								
								
									
										51
									
								
								start.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								start.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,51 @@ | |||||||
|  | from config import dp, db, shop_desc | ||||||
|  | from aiogram import types | ||||||
|  | from captcha import Captcha | ||||||
|  | from markups import rules_mkp, menu_mkp | ||||||
|  | from functions import anti_flood | ||||||
|  |  | ||||||
|  | @dp.message_handler(commands='start') | ||||||
|  | @dp.throttled(anti_flood,rate=1) | ||||||
|  | async def startcmd(message: types.Message): | ||||||
|  |     stat = db.check_userstat(message.from_user.id) | ||||||
|  |     db.add_user(message.from_user.id, message.from_user.mention) | ||||||
|  |     if stat == 'rules': | ||||||
|  |         await message.answer(f'Правила использования бота:\n\n{db.get_rules()}', reply_markup=rules_mkp()) | ||||||
|  |     elif stat == 'ban': | ||||||
|  |         await message.answer('Вы заблокированы') | ||||||
|  |     elif stat == 'ok': | ||||||
|  |         await message.answer(shop_desc, reply_markup=menu_mkp()) | ||||||
|  |     else: | ||||||
|  |         captcha = Captcha() | ||||||
|  |         captcha.register_handlers(dp) | ||||||
|  |         await message.answer( | ||||||
|  |             captcha.get_caption(), | ||||||
|  |             reply_markup=captcha.get_captcha_keyboard() | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  | @dp.message_handler(commands='id') | ||||||
|  | @dp.throttled(anti_flood,rate=1) | ||||||
|  | async def idcmd(message: types.Message): | ||||||
|  |     await message.answer(f'Ваш ID: <code>{message.from_user.id}</code>') | ||||||
|  |  | ||||||
|  | @dp.message_handler(commands=['chat_id']) | ||||||
|  | async def chatidcmd(message: types.Message): | ||||||
|  |     await message.answer(f'Чат ID: <code>{message.chat.id}</code>') | ||||||
|  |  | ||||||
|  | @dp.callback_query_handler(text='rulesok') | ||||||
|  | async def rulesokcall(call: types.CallbackQuery): | ||||||
|  |     await call.message.delete() | ||||||
|  |     db.change_status(call.from_user.id, 'ok') | ||||||
|  |     await call.message.answer(shop_desc, reply_markup=menu_mkp()) | ||||||
|  |  | ||||||
|  | @dp.callback_query_handler(text='rulesno') | ||||||
|  | async def rulesnocall(call: types.CallbackQuery): | ||||||
|  |     db.change_status(call.from_user.id, 'ban') | ||||||
|  |     await call.message.delete() | ||||||
|  |     await call.message.answer('Вы заблокированы') | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @dp.callback_query_handler(text='menu') | ||||||
|  | async def menuCall(call: types.CallbackQuery): | ||||||
|  |     await call.message.delete() | ||||||
|  |     await call.message.answer(shop_desc, reply_markup=menu_mkp()) | ||||||
							
								
								
									
										110
									
								
								states.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								states.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,110 @@ | |||||||
|  | from aiogram.dispatcher.filters.state import State, StatesGroup | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class NewBuy(StatesGroup): | ||||||
|  |     GoogId = State() | ||||||
|  |     Promo = State() | ||||||
|  |     Paying = State() | ||||||
|  |  | ||||||
|  | class SuppUser(StatesGroup): | ||||||
|  |     UserId = State() | ||||||
|  |  | ||||||
|  | class AddPromo(StatesGroup): | ||||||
|  |     Promo = State() | ||||||
|  |  | ||||||
|  | class SuppAdmin(StatesGroup): | ||||||
|  |     UserId = State() | ||||||
|  |     QuestId = State() | ||||||
|  |     Text = State() | ||||||
|  |  | ||||||
|  | class NewFaq(StatesGroup): | ||||||
|  |     Name = State() | ||||||
|  |     Text = State() | ||||||
|  |     Photo = State() | ||||||
|  |  | ||||||
|  | class FaqName(StatesGroup): | ||||||
|  |     FaqId = State() | ||||||
|  |     Name = State() | ||||||
|  |  | ||||||
|  | class FaqText(StatesGroup): | ||||||
|  |     FaqId = State() | ||||||
|  |     Text = State() | ||||||
|  |  | ||||||
|  | class AddCatRus(StatesGroup): | ||||||
|  |     CatName = State() | ||||||
|  |  | ||||||
|  | class ChangeNamecatRus(StatesGroup): | ||||||
|  |     CatId = State() | ||||||
|  |     CatName = State() | ||||||
|  |  | ||||||
|  | class AddSubcatRus(StatesGroup): | ||||||
|  |     CatId = State() | ||||||
|  |     SubcatName = State() | ||||||
|  |  | ||||||
|  | class ChangeNamesubcatRus(StatesGroup): | ||||||
|  |     SubcatId = State() | ||||||
|  |     SubcatName = State() | ||||||
|  |  | ||||||
|  | class AddGood(StatesGroup): | ||||||
|  |     SubcatId = State() | ||||||
|  |     CatId = State() | ||||||
|  |     Name = State() | ||||||
|  |     Description = State() | ||||||
|  |     Photo = State() | ||||||
|  |     Price = State() | ||||||
|  |  | ||||||
|  | class AddInstance(StatesGroup): | ||||||
|  |     GoodId = State() | ||||||
|  |     FileName = State() | ||||||
|  |  | ||||||
|  | class ChangeNameGoodRus(StatesGroup): | ||||||
|  |     GoodId = State() | ||||||
|  |     GoodName = State() | ||||||
|  |  | ||||||
|  | class ChangeDescGoodRus(StatesGroup): | ||||||
|  |     GoodId = State() | ||||||
|  |     GoodDesc = State() | ||||||
|  |  | ||||||
|  | class ChangePriceGood(StatesGroup): | ||||||
|  |     GoodId = State() | ||||||
|  |  | ||||||
|  | class NewOrder(StatesGroup): | ||||||
|  |     Delivery = State() | ||||||
|  |     Adress = State() | ||||||
|  |     Comment = State() | ||||||
|  |     Promo = State() | ||||||
|  |  | ||||||
|  | class OrderEnd(StatesGroup): | ||||||
|  |     OrderId = State() | ||||||
|  |  | ||||||
|  | class RassilkaAll(StatesGroup): | ||||||
|  |     Text = State() | ||||||
|  |  | ||||||
|  | class ChangeToken(StatesGroup): | ||||||
|  |     Paym = State() | ||||||
|  |     Token = State() | ||||||
|  |  | ||||||
|  | class ChangeStatus(StatesGroup): | ||||||
|  |     UserId = State() | ||||||
|  |  | ||||||
|  | class ChangeRules(StatesGroup): | ||||||
|  |     Rules = State() | ||||||
|  |  | ||||||
|  | class ReviewTake(StatesGroup): | ||||||
|  |     OrderId = State() | ||||||
|  |     Stars = State() | ||||||
|  |     Review = State() | ||||||
|  |  | ||||||
|  | class QuestAddQuest(StatesGroup): | ||||||
|  |     CountMsg = State() | ||||||
|  |     QuestId = State() | ||||||
|  |  | ||||||
|  | class ChangeReviewPay(StatesGroup): | ||||||
|  |     Pay = State() | ||||||
|  |  | ||||||
|  | class NewUsername(StatesGroup): | ||||||
|  |     Username = State() | ||||||
|  |  | ||||||
|  | class ChageNicknameAdm(StatesGroup): | ||||||
|  |     UserId = State() | ||||||
|  |     Nickname = State() | ||||||
							
								
								
									
										47
									
								
								support.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								support.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,47 @@ | |||||||
|  | from config import db, dp, oper_group_id, supp_group_id, use_chats, bot | ||||||
|  | from aiogram import types | ||||||
|  | from aiogram.dispatcher import FSMContext | ||||||
|  | from aiogram.types import ParseMode, Message | ||||||
|  | from essentials import * | ||||||
|  | from personnel import * | ||||||
|  |  | ||||||
|  | call_oper = False | ||||||
|  | call_supp = False | ||||||
|  |  | ||||||
|  | @dp.callback_query_handler(text='askpers') | ||||||
|  | async def permsg(call: types.CallbackQuery): | ||||||
|  |     await call.message.answer('☎ Связь с персоналом.') | ||||||
|  |     mkp = types.InlineKeyboardMarkup() | ||||||
|  |     btn1 = types.InlineKeyboardButton('Написать оператору', call_oper = True) | ||||||
|  |     btn2 = types.InlineKeyboardButton('Написать в поддержку', call_supp = True) | ||||||
|  |     btn2 = types.InlineKeyboardButton('В меню', callback_data='menu') | ||||||
|  |     mkp.add(btn1, btn2, btn3).add(btn3) | ||||||
|  |     return mkp | ||||||
|  |  | ||||||
|  | if call_oper == True: | ||||||
|  |  | ||||||
|  |  @dp.message_handler() | ||||||
|  |  async def opermsg(message): | ||||||
|  |    await bot.send_message(f'Вызван оператор, ожидайте.') | ||||||
|  |    call_oper = False | ||||||
|  |    if use_chats == True: | ||||||
|  |     await bot.send_message(oper_group_id, f'Запрос оператора для: {client}') | ||||||
|  |     await bot.forward_message(oper_group_id, message.chat.id, message.message_id) | ||||||
|  |    else: | ||||||
|  |     await bot.send_message(operators, f'Запрос оператора для: {client}') | ||||||
|  |     await bot.forward_message(operators, message.chat.id, message.message_id) | ||||||
|  |    await state.finish() | ||||||
|  |  | ||||||
|  | if call_supp == True: | ||||||
|  |  | ||||||
|  |  @dp.message_handler() | ||||||
|  |  async def suppmsg(message): | ||||||
|  |    await bot.send_message(f'Ваш тикет передан, ожидайте.') | ||||||
|  |    call_supp = False | ||||||
|  |    if use_chats == True: | ||||||
|  |     await bot.send_message(supp_group_id, f'Запрос оператора для: {client}') | ||||||
|  |     await bot.forward_message(supp_group_id, message.chat.id, message.message_id) | ||||||
|  |    else: | ||||||
|  |     await bot.send_message(supporters, f'Запрос оператора для: {client}') | ||||||
|  |     await bot.forward_message(supporters, message.chat.id, message.message_id) | ||||||
|  |    await state.finish() | ||||||
							
								
								
									
										15
									
								
								usermenu.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								usermenu.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | import os | ||||||
|  | from config import dp, bot, db | ||||||
|  | from aiogram import types | ||||||
|  |  | ||||||
|  | from markups import menu_back_mkp | ||||||
|  |  | ||||||
|  | @dp.callback_query_handler(text='myPurchs') | ||||||
|  | async def myPurchases (call: types.CallbackQuery): | ||||||
|  |     await call.message.delete_reply_markup() | ||||||
|  |     db.remove_old_orders() | ||||||
|  |     user_info = db.get_user_info(call.from_user.id) | ||||||
|  |     pay_count = user_info[1] | ||||||
|  |     if pay_count == None: | ||||||
|  |         pay_count = 0 | ||||||
|  |     await call.message.answer(f'Ваш ID: {call.from_user.id} \n\nНа данный момент это всё что тут есть. TODO: Возможность добавить данные для доставки.', reply_markup=menu_back_mkp()) | ||||||
		Reference in New Issue
	
	Block a user