chat_moderator_bot/templates/message.py
2024-07-17 23:35:45 +03:00

227 lines
6.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import json
from aiogram.fsm.state import StatesGroup, State
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from aiogram.types import Message
from aiogram.utils.keyboard import InlineKeyboardBuilder
from core import bot
class SendState(StatesGroup):
message = State()
buttons = State()
actions_text = """
Сообщение включено: <b>{include}</b>
Выберите действие:
"""
send_message_text = """
Отправьте сообщение с прикреплением до одного фото:
"""
send_buttons_text = """
Отправьте кнопки в таком формате:
<b>Кнопка в первом ряду - http://example.com</b>
<b>Кнопка во втором ряду - http://example.com</b>
Используйте разделитель " | ", чтобы добавить до 8 кнопок в один ряд (допустимо 6 рядов):
<b>Кнопка в ряду - http://example.com | Другая кнопка в ряду - http://example.com</b>
"""
incorrect_data_text = """
<b>Не верный формат данных</b>
"""
check_data_text = """
Проверьте введённые данные
"""
publish_message_text = """
Обуликовано успешно
"""
def check_data_ikb() -> InlineKeyboardMarkup:
"""
-✅ Опубликовать
-⬅️ Назад
:return: объект клавиатуры для параметра reply_markup
"""
builder = InlineKeyboardBuilder()
builder.add(
InlineKeyboardButton(
text='✅ Опубликовать',
callback_data='publish_message'
),
InlineKeyboardButton(
text='⬅️ Назад',
callback_data='come_back_buttons'
)
)
builder.adjust(1)
return builder.as_markup()
async def send_preview(message_data: dict, chat_id: int, username='') -> Message | None:
"""
Присылает превью сообщения
:param message_data: Данные сообщения из бд
:param chat_id: ID телеграм чата куда надо прислать превью
:param username: Username пользователя
:return:
"""
msg_text = message_data['text']
if username:
msg_text = f'{username}\n\n' + message_data['text']
if message_data['media']:
preview_msg = await bot.send_photo(
chat_id=chat_id,
caption=msg_text,
photo=message_data['media'],
reply_markup=url_ikb(
row_buttons=message_data['buttons']
)
)
else:
preview_msg = await bot.send_message(
chat_id=chat_id,
text=msg_text,
reply_markup=url_ikb(
row_buttons=message_data['buttons']
)
)
return preview_msg
def send_buttons_ikb() -> InlineKeyboardMarkup:
"""
-➡️ Пропустить
-⬅️ Назад
:return: объект клавиатуры для параметра reply_markup
"""
builder = InlineKeyboardBuilder()
builder.add(
InlineKeyboardButton(
text='➡️ Пропустить',
callback_data='pass_buttons'
),
InlineKeyboardButton(
text='⬅️ Назад',
callback_data='come_back_message'
)
)
builder.adjust(1)
return builder.as_markup()
def send_message_ikb() -> InlineKeyboardMarkup:
"""
-⬅️ Назад
:return: объект клавиатуры для параметра reply_markup
"""
builder = InlineKeyboardBuilder()
builder.add(
InlineKeyboardButton(
text='⬅️ Назад',
callback_data='come_back_preview'
)
)
builder.adjust(1)
return builder.as_markup()
def actions_ikb(included: bool) -> InlineKeyboardMarkup:
"""
-Вкл✅ \ Выкл ❌
-📝 Редактировать
-⬅️ Назад
:param included: bool включено ли сообщение или нет
:return: объект клавиатуры для параметра reply_markup
"""
builder = InlineKeyboardBuilder()
if included:
included_btn = InlineKeyboardButton(
text='Выкл ❌',
callback_data='included_message_false'
)
else:
included_btn = InlineKeyboardButton(
text='Вкл ✅',
callback_data='included_message_true'
)
builder.add(
included_btn,
InlineKeyboardButton(
text='📝 Редактировать',
callback_data='edit_message'
),
InlineKeyboardButton(
text='⬅️ Назад',
callback_data='come_back_menu'
)
)
builder.adjust(1)
return builder.as_markup()
def build_url_ikb(msg_text: str) -> list:
"""
Создаёт клавиатуру с url кнопками пользователя
:param msg_text: Текст сообщения с заданными параметры клавиатуру
:return: list с кнопками клавиатуры
"""
try:
paragraphs = msg_text.split('\n')
row_buttons = []
for paragraph in paragraphs:
row = []
for button_text_data in paragraph.split(' | '):
row.append(button_text_data.strip().split(' - '))
row_buttons.append(row)
return row_buttons
except:
return []
def url_ikb(row_buttons: list | str) -> InlineKeyboardMarkup | None:
"""
Создаёт клавиатуру с url кнопками пользователя
:param row_buttons: List с кнопками клавиатуры
:return: В случае ошибки False, если норм то объект клавиатуры для параметра reply_markup
"""
try:
if isinstance(row_buttons, str):
row_buttons = json.loads(row_buttons)
builder = InlineKeyboardBuilder()
rows_len = [0, 0, 0, 0, 0, 0]
i = 0
for row in row_buttons:
rows_len[i] = len(row)
for button in row:
builder.add(
InlineKeyboardButton(
text=button[0],
url=button[1]
)
)
i += 1
builder.adjust(*rows_len)
if row_buttons:
return builder.as_markup()
return None
except:
return None