Spaces:
Runtime error
Runtime error
File size: 6,203 Bytes
339f372 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
from aiogram import Router, F
from aiogram.types import Message, CallbackQuery
from aiogram.fsm.context import FSMContext
from app.database import requests as rq
from app.keyboards import admin_keyboards as kb
from app.states import AdminAddLeadmagnet, AdminStates
from app.middleware.authentification import admin_check
router = Router()
@router.message(F.text == 'Отредактировать кодовые слова')
async def view_leadmagnets(message: Message):
if not await admin_check(message, {}):
await message.answer("У вас нет доступа к админ-панели")
return
await message.answer(
'Текущие лидмагниты. Нажмите для редактирования',
reply_markup=await kb.admin_keyboard_leadmagnets()
)
@router.callback_query(F.data == 'add_leadmanget')
async def add_leadmagnet(callback: CallbackQuery, state: FSMContext):
await callback.answer('Добавляем лидмагнит')
await state.set_state(AdminAddLeadmagnet.admin_set_trigger)
await callback.message.answer('Введите кодовое слово (пожалуйста, не используйте "_" в названии!)')
@router.message(AdminAddLeadmagnet.admin_set_trigger)
async def add_trigger(message: Message, state: FSMContext):
await state.update_data(trigger=message.text)
await state.set_state(AdminAddLeadmagnet.admin_set_content)
await message.answer('Введите содержание лидмагнита '
'(сообщение, которое получит пользователь после отправки кодового слова)')
@router.message(AdminAddLeadmagnet.admin_set_content)
async def add_content(message: Message, state: FSMContext):
await state.update_data(content=message.text)
await state.set_state(AdminAddLeadmagnet.admin_set_status)
await message.answer('Хотите ли Вы сделать данный лидмагнит активным? Активные лидмагниты будут тут же доступны для '
'взаимодействия в пользовательском интерфейсе.', reply_markup=kb.yes_no_keyboard)
@router.message(AdminAddLeadmagnet.admin_set_status)
async def set_leadmagnet_status(message: Message, state: FSMContext):
await state.update_data(status=message.text)
data = await state.get_data()
await rq.add_leadmagnet(data['trigger'], data['content'], True if data['status'] == 'Да' else False)
await message.answer('Лидмагнит сохранен! Теперь можно отредактировать его, выбрав его в меню',
reply_markup=kb.admin_back)
await state.clear()
@router.callback_query(F.data.startswith('change_leadmagnet_'))
async def edit_leadmagnet(callback: CallbackQuery):
await callback.answer('')
leadmagnet = await rq.get_leadmagnet_info(callback.data.split('_')[2])
await callback.message.answer(f'Триггер: {leadmagnet.trigger} \n\n'
f'Содержание: {leadmagnet.content}\n'
f'Активен? {leadmagnet.is_active}\n\n'
f'Что Вы хотите изменить?',
reply_markup=await kb.admin_change_leadmagnet(leadmagnet.trigger))
@router.callback_query(F.data.startswith('editleadmagnet_'))
async def begin_leadmagnet_edit(callback: CallbackQuery, state: FSMContext):
await callback.answer('')
await state.set_state(AdminStates.admin_edit_leadmagnet)
await state.update_data(leadmagnet=callback.data.split('_')[2])
await state.update_data(parameter_changed=callback.data.split("_")[1])
replace_dict = {'trigger': 'ый триггер', 'content': 'ое содержание'}
if callback.data.split("_")[1] != 'status':
await callback.message.answer(f'Введите нов{replace_dict[callback.data.split("_")[1]]} лидмагнита')
elif callback.data.split("_")[1] == 'status':
await callback.message.answer(f'Должен ли лидмагнит быть активным?', reply_markup=kb.yes_no_keyboard)
@router.message(AdminStates.admin_edit_leadmagnet)
async def finish_leadmagnet_edit(message: Message, state: FSMContext):
await state.update_data(change=message.text)
data = await state.get_data()
await rq.edit_leadmagnet(data['leadmagnet'], data['parameter_changed'], True if data['change'] == 'Да' else False)
await message.answer(f'Информация была обновлена, можно вернуться на главную', reply_markup=kb.admin_back)
@router.callback_query(F.data.startswith('deleteleadmagnet_'))
async def confirm_leadmagnet_deletion(callback: CallbackQuery, state: FSMContext):
await callback.answer('')
await state.set_state(AdminStates.admin_delete_leadmagnet)
await state.update_data(leadmagnet=callback.data.split("_")[1])
await callback.message.answer(f'Вы уверены, что хотите удалить лидмагнит {callback.data.split("_")[1]}?',
reply_markup=kb.yes_no_keyboard)
@router.message(AdminStates.admin_delete_leadmagnet)
async def delete_or_not_delete(message: Message, state: FSMContext):
if message.text == 'Нет':
await state.clear()
await message.answer('Тогда вернемся в меню :)', reply_markup=kb.admin_back)
if message.text == 'Да':
data = await state.get_data()
await rq.delete_leadmagnet(data['leadmagnet'])
await state.clear()
await message.answer('Лидмагнит был успешно удален! Можно вернуться в меню', reply_markup=kb.admin_back)
@router.callback_query(F.data == 'admin_to_main')
async def return_to_main(callback: CallbackQuery):
await callback.answer('Возвращаемся в меню')
await callback.message.answer('Здравствуйте! Что Вы хотите сделать?', reply_markup=kb.admin_main) |