Загрузить файлы в «/»
This commit is contained in:
parent
d71d361c28
commit
cb4df8ac1f
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())
|
Loading…
x
Reference in New Issue
Block a user