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)