Init commit

This commit is contained in:
2022-06-04 22:02:51 +03:00
commit 64c6aeb002
59 changed files with 1399 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
from . import start
from . import catalog
from . import cart
from . import checkout
from . import ordering

40
handlers/user/cart.py Normal file
View File

@@ -0,0 +1,40 @@
from aiogram import types
from load import dp, bot, messages
from keyboard.default.main_menu import cart_btn
from keyboard.inline.cart import cart_list
from utils.database.cart import get_user_cart, clean_cart
from utils.database.market import Catalog
@dp.message_handler(lambda x: x.text == messages.cart)
async def cmd_cart(message: types.Message):
items = get_user_cart(message.from_user.id)
if not items:
await bot.send_message(message.chat.id, messages.cart + " пустая!", reply_markup=cart_btn())
return
index, count = items[0]
item = Catalog.get_catalog(index)
await bot.send_message(message.chat.id, messages.cart, reply_markup=cart_btn(False))
await bot.send_photo(
chat_id=message.chat.id,
photo=item["image"],
caption=messages.cart_message.format(
name=item["name"],
description=item["description"],
count=count,
price=item['price']*count
),
parse_mode="Markdown",
reply_markup=cart_list(items=len(items)-1)
)
@dp.message_handler(lambda x: x.text == messages.clean_cart)
async def cmd_clean_cart(message: types.Message):
clean_cart(message.from_user.id)
await bot.send_message(message.chat.id, messages.cart + " очищена", reply_markup=cart_btn())

27
handlers/user/catalog.py Normal file
View File

@@ -0,0 +1,27 @@
from aiogram import types
from load import dp, bot, messages
from utils.database.market import Catalog
from keyboard.inline.catalog import item_list
from keyboard.default.main_menu import back_to_main_menu
@dp.message_handler(lambda x: x.text == messages.catalog)
async def catalog(message: types.Message):
items = Catalog.get_catalog()
if not items:
await bot.send_message(message.chat.id, "Каталог пуст:(")
return
item = items[0]
await bot.send_message(message.chat.id, messages.catalog, reply_markup=back_to_main_menu)
await bot.send_photo(
chat_id=message.chat.id,
photo=item["image"],
caption=messages.product_message.format(
name=item["name"],
description=item["description"],
price=item['price']
),
parse_mode="Markdown",
reply_markup=item_list(items=len(items))
)

35
handlers/user/checkout.py Normal file
View File

@@ -0,0 +1,35 @@
from aiogram import types
from load import dp, bot, messages
from utils.database.cart import get_user_cart
from utils.database.market import Catalog
from utils.database.ordering import save_info
from keyboard.default.checkout import checkout_btn
from state.state import UserState
@dp.message_handler(lambda x: x.text == messages.checkout)
async def checkout(message:types.Message):
items = get_user_cart(message.from_user.id)
output: str = ""
cost = 0
for index, count in items:
i = Catalog.get_catalog(index)
output += f'Имя: {i["name"]} цена: {i["price"]} - {count}шт.\n'
cost += i["price"] * count
output += f"Общая сумма: {cost}\nВсё верно? Следующий этап: заполнение заявки"
await bot.send_message(message.chat.id, output, reply_markup=checkout_btn())
await UserState.confirm.set()
@dp.message_handler(lambda x: x.text == messages.all_right_message)
async def continue_user_form(message: types.Message):
pass
@dp.message_handler(lambda x: x.text == messages.save_and_continue, state="*")
async def save_user_info(message: types.Message):
state = dp.current_state(chat=message.chat.id, user=message.from_user.id)
info = await state.get_data()
save_info(user_id=message.from_user.id, **info)
await continue_user_form(message)

108
handlers/user/ordering.py Normal file
View File

@@ -0,0 +1,108 @@
from aiogram import types
from aiogram.dispatcher import FSMContext
from load import dp, bot, messages
from keyboard.default.checkout import confirm_all_info
from keyboard.default.main_menu import cancel_btn, get_phone_number, continue_btn
from keyboard.default.ordering import load_info
from state.state import UserState
from state.checkout import Checkout
from utils.database.ordering import get_info
@dp.message_handler(lambda x: x.text == messages.all_right_message, state=UserState.confirm)
async def confirm(message: types.Message, state: FSMContext):
await state.finish()
info = get_info(message.from_user.id)
await bot.send_message(
message.chat.id,
"Может у вас есть сохраненные данные?",
reply_markup=load_info(bool(info))
)
await Checkout.loaded.set()
@dp.message_handler(lambda x: x.text == messages.load_data, state=Checkout.loaded)
async def load_form(message: types.message, state: FSMContext):
info = get_info(message.from_user.id)
await state.update_data(
loaded=True,
first_name = info["first_name"],
last_name = info["last_name"],
phone_number = info["phone_number"],
address = info["address"]
)
await bot.send_message(message.chat.id, "Ваши данные загружены!", reply_markup=continue_btn)
await Checkout.finish.set()
@dp.message_handler(lambda x: x.text == messages.rewrite_data, state=Checkout.loaded)
async def new_form(message: types.Message, state: FSMContext = None):
await state.update_data(loaded=False)
await bot.send_message(
message.chat.id,
"Напишите вашу фамилию",
reply_markup=cancel_btn
)
await Checkout.last_name.set()
@dp.message_handler(state=Checkout.last_name)
async def form_last_name(message: types.Message, state: FSMContext):
await state.update_data(last_name=message.text)
await bot.send_message(
message.chat.id,
"Ваше имя",
reply_markup=cancel_btn
)
await Checkout.first_name.set()
@dp.message_handler(state=Checkout.first_name)
async def form_first_name(message: types.Message, state: FSMContext):
await state.update_data(first_name=message.text)
await bot.send_message(
message.chat.id,
("Номер телефона\n\n"
"Можете написать номер телефона вручную"),
reply_markup=get_phone_number
)
await Checkout.phone_number.set()
@dp.message_handler(state=Checkout.phone_number, content_types=[types.ContentType.CONTACT, types.ContentType.TEXT])
async def form_phone(message: types.Message, state: FSMContext):
if message.contact is not None:
phone=message.contact.phone_number
else: phone=message.text
if len(phone) in [10,12,13]:
await state.update_data(phone_number=phone)
await bot.send_message(message.chat.id, "Отправте адрес доставки", reply_markup=cancel_btn)
await Checkout.address.set()
else:
await bot.send_message(message.chat.id, "Номер телефона не правильный!")
await Checkout.phone_number.set()
@dp.message_handler(state=Checkout.address)
async def form_address(message: types.Message, state: FSMContext):
await state.update_data(address=message.text)
await bot.send_message(message.chat.id, "Отлично заявка заполнена!", reply_markup=continue_btn)
await Checkout.finish.set()
@dp.message_handler(state=Checkout.finish)
async def finish_form(message: types.Message, state: FSMContext):
data = await state.get_data()
text = (f"Имя: {data['first_name']}\n"
f"Фамилия: {data['last_name']}\n"
f"Номер телефона: {data['phone_number']}\n"
f"Адрес: {data['address']}\n"
)
await bot.send_message(
message.chat.id,
text,
reply_markup=confirm_all_info()
)

50
handlers/user/start.py Normal file
View File

@@ -0,0 +1,50 @@
from aiogram import types
from aiogram.dispatcher.filters import CommandStart
from load import dp, bot, messages
from keyboard.default.main_menu import main_menu
from utils.database.base import get_admins, get_operator
from utils.database.user import Register
@dp.message_handler(CommandStart())
async def start(message: types.Message):
Register.register_user(message.from_user)
is_bot_admin = message.from_user.id in get_admins()
is_operator = message.from_user.id in get_operator()
await bot.send_message(
message.chat.id,
messages.welcome.format(user=message.from_user.first_name),
reply_markup=main_menu(admin=is_bot_admin, operator=is_operator)
)
@dp.message_handler(lambda x: x.text == messages.back)
async def back_to_menu(message: types.Message):
is_bot_admin = message.from_user.id in get_admins()
is_operator = message.from_user.id in get_operator()
await bot.send_message(
message.chat.id,
"Главное меню",
reply_markup=main_menu(admin=is_bot_admin, operator=is_operator)
)
@dp.message_handler(lambda x: x.text == messages.cancel_message, state="*")
async def cancel(message: types.Message):
state = dp.current_state(chat=message.chat.id, user=message.from_user.id)
await state.finish()
await back_to_menu(message)
@dp.message_handler(lambda x:x.text == messages.info)
async def userinfo(message: types.Message):
await bot.send_message(
message.chat.id,
("User_id: <code>{user_id}</code>").format(user_id=message.from_user.id),
parse_mode="HTML"
)
@dp.message_handler(commands=['test'])
async def test(message: types.Message):
Register.register_admin(message.from_user)