Browse Source

Рефактор. Отправка сообщений в чат

Переработал отправку, чтобы было наглядней и код не дублировался.
master
Дмитрий 3 years ago
parent
commit
e8df15323b
  1. 43
      main.py
  2. 18
      services.py

43
main.py

@ -43,6 +43,15 @@ async def get_channel_id(message: types.Message) -> None:
) )
@dp.message_handler(commands=["m"])
@services.only_admins
async def test_mes(message: types.Message) -> None:
"""Для тестирования сообщений."""
q = services.get_text_from_command(message)
await services.send_message_to_chat(message.date, 1, q, bot)
@dp.message_handler(commands=["q"]) @dp.message_handler(commands=["q"])
@services.auth @services.auth
async def send_question(message: types.Message) -> None: async def send_question(message: types.Message) -> None:
@ -64,21 +73,10 @@ async def send_question(message: types.Message) -> None:
) )
return return
deletion_time = message.date + timedelta(minutes=settings.DELAY_TIME_Q) text = "*Внимание, вопрос!*\n\n"
out_text = "*Внимание, вопрос!*\n\n" text += question
out_text += f"{message.text[3:]}\n\n"
out_text += f"Будет удалено в *{deletion_time}*"
result = await bot.send_message(
chat_id=settings.CHAT_ID,
text=out_text,
disable_notification=True,
parse_mode="Markdown",
)
await services._clean_up( await services.send_message_to_chat(message.date, settings.DELAY_TIME_Q, text, bot)
message_id=result.message_id, delay_min=settings.DELAY_TIME_Q, bot=bot
)
@dp.message_handler(commands=["p"]) @dp.message_handler(commands=["p"])
@ -89,21 +87,10 @@ async def send_post(message: types.Message) -> None:
Через бота можно отправить вопрос, который будет удален через Через бота можно отправить вопрос, который будет удален через
DELAY_TIME_POST минут. DELAY_TIME_POST минут.
""" """
deletion_time = message.date + timedelta(minutes=settings.DELAY_TIME_POST) text = services.get_text_from_command(message)
post = services.get_text_from_command(message)
out_text = f"{post}\n\n"
out_text += f"Будет удалено в *{deletion_time}*"
result = await bot.send_message(
chat_id=settings.CHAT_ID,
text=out_text,
disable_notification=True,
parse_mode="Markdown",
)
await services._clean_up( await services.send_message_to_chat(
message_id=result.message_id, delay_min=settings.DELAY_TIME_POST, bot=bot message.date, settings.DELAY_TIME_POST, text, bot
) )

18
services.py

@ -14,6 +14,8 @@ from datetime import datetime, timedelta
from aiogram.utils.exceptions import MessageToDeleteNotFound from aiogram.utils.exceptions import MessageToDeleteNotFound
from aiogram import Bot, types from aiogram import Bot, types
from functools import wraps
engine = create_engine("sqlite:///" + str(settings.DB_PATH)) engine = create_engine("sqlite:///" + str(settings.DB_PATH))
Session = sessionmaker(bind=engine) Session = sessionmaker(bind=engine)
session = Session() session = Session()
@ -161,3 +163,19 @@ def get_text_from_command(message: types.Message) -> str:
"""Вернет текст из команды для бота (но не саму команду). Парсит message["entities"].""" """Вернет текст из команды для бота (но не саму команду). Парсит message["entities"]."""
command_length = int(message["entities"][0]["length"]) command_length = int(message["entities"][0]["length"])
return message.text[command_length:].strip() return message.text[command_length:].strip()
async def send_message_to_chat(
msg_date: datetime, delete_after: int, text: str, bot: Bot
) -> None:
"""Отправляет сообщение в чат, ставит таймер на удаление через delete_after минут."""
deletion_time = msg_date + timedelta(minutes=delete_after)
text += f"\n\nБудет удалено в *{deletion_time}*"
result = await bot.send_message(
chat_id=settings.CHAT_ID,
text=text,
disable_notification=True,
parse_mode="Markdown",
)
await _clean_up(message_id=result.message_id, delay_min=delete_after, bot=bot)

Loading…
Cancel
Save