253 lines
6.4 KiB
Python
253 lines
6.4 KiB
Python
|
import json
|
|||
|
|
|||
|
from aiogram import Router, F
|
|||
|
from aiogram.fsm.context import FSMContext
|
|||
|
from aiogram.types import CallbackQuery, Message
|
|||
|
|
|||
|
from templates import commands as tcommands
|
|||
|
from templates import message as tmessage
|
|||
|
from utils.db import Postgres
|
|||
|
from utils.defs import delete_msg
|
|||
|
|
|||
|
router = Router()
|
|||
|
|
|||
|
|
|||
|
@router.callback_query(F.data == 'message')
|
|||
|
async def message_btn(call: CallbackQuery, state: FSMContext):
|
|||
|
"""
|
|||
|
Ловит кнопку 💬 Стоп сообщение
|
|||
|
:param call: CallbackQuery
|
|||
|
:param state: FSMContext
|
|||
|
:return:
|
|||
|
"""
|
|||
|
state_data = await state.get_data()
|
|||
|
p = Postgres()
|
|||
|
message_data = await p.get_data(
|
|||
|
table_name='message'
|
|||
|
)
|
|||
|
|
|||
|
preview_msg = await tmessage.send_preview(
|
|||
|
message_data=message_data[0],
|
|||
|
chat_id=call.from_user.id
|
|||
|
)
|
|||
|
|
|||
|
last_msg = await call.message.answer(
|
|||
|
text=tmessage.actions_text.format(
|
|||
|
include='Да' if message_data[0]['included'] else 'Нет'
|
|||
|
),
|
|||
|
reply_markup=tmessage.actions_ikb(
|
|||
|
included=message_data[0]['included']
|
|||
|
)
|
|||
|
)
|
|||
|
await delete_msg(
|
|||
|
msg=state_data.get('last_msg')
|
|||
|
)
|
|||
|
await state.update_data(
|
|||
|
preview_msg=preview_msg,
|
|||
|
last_msg=last_msg
|
|||
|
)
|
|||
|
|
|||
|
|
|||
|
@router.callback_query(F.data == 'edit_message')
|
|||
|
async def edit_message_btn(call: CallbackQuery, state: FSMContext):
|
|||
|
"""
|
|||
|
Ловит кнопку 📝 Редактировать
|
|||
|
:param call: CallbackQuery
|
|||
|
:param state: FSMContext
|
|||
|
:return:
|
|||
|
"""
|
|||
|
state_data = await state.get_data()
|
|||
|
|
|||
|
await state_data['last_msg'].edit_text(
|
|||
|
text=tmessage.send_message_text,
|
|||
|
reply_markup=tmessage.send_message_ikb()
|
|||
|
)
|
|||
|
await state.set_state(
|
|||
|
state=tmessage.SendState.message
|
|||
|
)
|
|||
|
await delete_msg(
|
|||
|
msg=state_data.get('preview_msg')
|
|||
|
)
|
|||
|
|
|||
|
await state.update_data(
|
|||
|
edited_message_data={
|
|||
|
'text': '',
|
|||
|
'buttons': [],
|
|||
|
'media': ''
|
|||
|
}
|
|||
|
)
|
|||
|
|
|||
|
|
|||
|
@router.message(tmessage.SendState.message, F.content_type.in_({'text', 'photo'}))
|
|||
|
async def get_edit_message(msg: Message, state: FSMContext):
|
|||
|
"""
|
|||
|
Ловит новое сообщение
|
|||
|
:param msg: Message
|
|||
|
:param state: FSMContext
|
|||
|
:return:
|
|||
|
"""
|
|||
|
state_data = await state.get_data()
|
|||
|
|
|||
|
await state_data['last_msg'].edit_text(
|
|||
|
text=tmessage.send_buttons_text,
|
|||
|
reply_markup=tmessage.send_buttons_ikb()
|
|||
|
)
|
|||
|
await msg.delete()
|
|||
|
|
|||
|
await state.set_state(
|
|||
|
state=tmessage.SendState.buttons
|
|||
|
)
|
|||
|
|
|||
|
if msg.photo:
|
|||
|
state_data['edited_message_data']['text'] = msg.caption
|
|||
|
state_data['edited_message_data']['media'] = msg.photo[-1].file_id
|
|||
|
else:
|
|||
|
state_data['edited_message_data']['text'] = msg.text
|
|||
|
state_data['edited_message_data']['media'] = None
|
|||
|
|
|||
|
await state.update_data(
|
|||
|
edited_message_data=state_data['edited_message_data']
|
|||
|
)
|
|||
|
|
|||
|
|
|||
|
@router.message(tmessage.SendState.buttons, F.text)
|
|||
|
async def get_edit_buttons(msg: Message, state: FSMContext):
|
|||
|
"""
|
|||
|
Ловит новое url кнопки к сообщению
|
|||
|
:param msg: Message
|
|||
|
:param state: FSMContext
|
|||
|
:return:
|
|||
|
"""
|
|||
|
state_data = await state.get_data()
|
|||
|
buttons = tmessage.build_url_ikb(msg.text)
|
|||
|
|
|||
|
await msg.delete()
|
|||
|
|
|||
|
if not buttons:
|
|||
|
await state_data['last_msg'].edit_text(
|
|||
|
text=tmessage.incorrect_data_text + '\n\n' + tmessage.send_buttons_text,
|
|||
|
reply_markup=tmessage.send_buttons_ikb()
|
|||
|
)
|
|||
|
return
|
|||
|
|
|||
|
await delete_msg(
|
|||
|
msg=state_data.get('last_msg')
|
|||
|
)
|
|||
|
|
|||
|
state_data['edited_message_data']['buttons'] = buttons
|
|||
|
|
|||
|
preview_msg = await tmessage.send_preview(
|
|||
|
message_data=state_data['edited_message_data'],
|
|||
|
chat_id=msg.from_user.id
|
|||
|
)
|
|||
|
last_msg = await msg.answer(
|
|||
|
text=tmessage.check_data_text,
|
|||
|
reply_markup=tmessage.check_data_ikb()
|
|||
|
)
|
|||
|
|
|||
|
await state.update_data(
|
|||
|
edited_message_data=state_data['edited_message_data'],
|
|||
|
preview_msg=preview_msg,
|
|||
|
last_msg=last_msg
|
|||
|
)
|
|||
|
await state.set_state(
|
|||
|
state=None
|
|||
|
)
|
|||
|
|
|||
|
|
|||
|
@router.callback_query(F.data == 'pass_buttons')
|
|||
|
async def pass_buttons_btn(call: CallbackQuery, state: FSMContext):
|
|||
|
"""
|
|||
|
Ловит кнопку ➡️ Пропустить
|
|||
|
:param call: CallbackQuery
|
|||
|
:param state: FSMContext
|
|||
|
:return:
|
|||
|
"""
|
|||
|
state_data = await state.get_data()
|
|||
|
|
|||
|
await delete_msg(
|
|||
|
msg=state_data.get('last_msg')
|
|||
|
)
|
|||
|
|
|||
|
preview_msg = await tmessage.send_preview(
|
|||
|
message_data=state_data['edited_message_data'],
|
|||
|
chat_id=call.from_user.id
|
|||
|
)
|
|||
|
|
|||
|
last_msg = await call.message.answer(
|
|||
|
text=tmessage.check_data_text,
|
|||
|
reply_markup=tmessage.check_data_ikb()
|
|||
|
)
|
|||
|
|
|||
|
await state.update_data(
|
|||
|
preview_msg=preview_msg,
|
|||
|
last_msg=last_msg
|
|||
|
)
|
|||
|
|
|||
|
await state.set_state(
|
|||
|
state=None
|
|||
|
)
|
|||
|
|
|||
|
|
|||
|
@router.callback_query(F.data == 'publish_message')
|
|||
|
async def publish_message_btn(call: CallbackQuery, state: FSMContext):
|
|||
|
"""
|
|||
|
Ловит кнопку ✅ Опубликовать
|
|||
|
:param call: CallbackQuery
|
|||
|
:param state: FSMContext
|
|||
|
:return:
|
|||
|
"""
|
|||
|
state_data = await state.get_data()
|
|||
|
|
|||
|
state_data['edited_message_data']['buttons'] = json.dumps(
|
|||
|
state_data['edited_message_data']['buttons']
|
|||
|
)
|
|||
|
|
|||
|
p = Postgres()
|
|||
|
await p.update_data(
|
|||
|
table_name='message',
|
|||
|
new_data=state_data['edited_message_data'],
|
|||
|
query_filter={}
|
|||
|
)
|
|||
|
|
|||
|
await state_data['last_msg'].edit_text(
|
|||
|
text=tmessage.publish_message_text,
|
|||
|
reply_markup=await tcommands.start_ikb()
|
|||
|
)
|
|||
|
|
|||
|
await delete_msg(
|
|||
|
msg=state_data.get('preview_msg')
|
|||
|
)
|
|||
|
|
|||
|
|
|||
|
@router.callback_query(F.data.startswith('included_message_'))
|
|||
|
async def included_message_btn(call: CallbackQuery, state: FSMContext):
|
|||
|
"""
|
|||
|
Ловит кнопку 📝 Редактировать
|
|||
|
:param call: CallbackQuery
|
|||
|
:param state: FSMContext
|
|||
|
:return:
|
|||
|
"""
|
|||
|
state_data = await state.get_data()
|
|||
|
|
|||
|
if call.data[17:] == 'true':
|
|||
|
included = True
|
|||
|
else:
|
|||
|
included = False
|
|||
|
|
|||
|
await state_data['last_msg'].edit_text(
|
|||
|
text=tmessage.actions_text.format(
|
|||
|
include='Да' if included else 'Нет'
|
|||
|
),
|
|||
|
reply_markup=tmessage.actions_ikb(
|
|||
|
included=included
|
|||
|
)
|
|||
|
)
|
|||
|
|
|||
|
p = Postgres()
|
|||
|
await p.update_data(
|
|||
|
table_name='message',
|
|||
|
new_data={'included': included},
|
|||
|
query_filter={}
|
|||
|
)
|