Browse Source

Добавил парсинг сообщения.

Теперь есть один способ для парсинга сообщений (понятный, на мой
взгляд). Проще отделить сообщение от команды.
master
Дмитрий 3 years ago
parent
commit
fd2f132143
  1. 25
      main.py
  2. 8
      services.py

25
main.py

@ -3,7 +3,7 @@ import logging
from aiogram import Bot, Dispatcher, executor, types from aiogram import Bot, Dispatcher, executor, types
import asyncio import asyncio
from datetime import timedelta from datetime import timedelta
from models import Messages_to_delete, Base from models import Base
from aiogram.utils.markdown import escape_md from aiogram.utils.markdown import escape_md
import settings import settings
import services import services
@ -52,7 +52,11 @@ async def send_question(message: types.Message) -> None:
DELAY_TIME_Q минут. DELAY_TIME_Q минут.
""" """
if len(message.text) == len("/q"): question = services.get_text_from_command(message)
# если прислали только команду, без текста, показываем как надо
# пользоваться командой
if len(question) == 0:
await message.reply( await message.reply(
services.get_static("static/short_question_error.txt"), services.get_static("static/short_question_error.txt"),
reply=False, reply=False,
@ -61,7 +65,10 @@ async def send_question(message: types.Message) -> None:
return return
deletion_time = message.date + timedelta(minutes=settings.DELAY_TIME_Q) deletion_time = message.date + timedelta(minutes=settings.DELAY_TIME_Q)
out_text = f"*Внимание, вопрос!*\n\n{message.text[3:]}\n\nБудет удалено в *{deletion_time}*" out_text = "*Внимание, вопрос!*\n\n"
out_text += f"{message.text[3:]}\n\n"
out_text += f"Будет удалено в *{deletion_time}*"
result = await bot.send_message( result = await bot.send_message(
chat_id=settings.CHAT_ID, chat_id=settings.CHAT_ID,
text=out_text, text=out_text,
@ -83,7 +90,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) deletion_time = message.date + timedelta(minutes=settings.DELAY_TIME_POST)
out_text = f"{message.text[3:]}\n\nБудет удалено в *{deletion_time}*" post = services.get_text_from_command(message)
out_text = f"{post}\n\n"
out_text += f"Будет удалено в *{deletion_time}*"
result = await bot.send_message( result = await bot.send_message(
chat_id=settings.CHAT_ID, chat_id=settings.CHAT_ID,
@ -106,7 +116,10 @@ async def get_invite(message: types.Message) -> None:
token = services.get_new_token() token = services.get_new_token()
msg = f"Новый токен: *{token}*\nБудет действителен 5 минут\n\nЧтобы вступить в чат напиши боту {escape_md(bot_link)} \n`/add_me {token}`" msg = f"Новый токен: *{token}*\n"
msg += "Будет действителен 5 минут\n\n"
msg += f"Чтобы вступить в чат напиши боту {escape_md(bot_link)} \n"
msg += f"`/add_me {token}`"
await message.reply( await message.reply(
msg, msg,
@ -124,7 +137,7 @@ async def add_me(message: types.Message) -> None:
в группу. в группу.
""" """
user_token = message.text[8:].strip() user_token = services.get_text_from_command(message)
if not services.check_token(user_token): if not services.check_token(user_token):
return return

8
services.py

@ -12,7 +12,7 @@ from secrets import token_urlsafe
from datetime import datetime, timedelta from datetime import datetime, timedelta
from aiogram.utils.exceptions import MessageToDeleteNotFound from aiogram.utils.exceptions import MessageToDeleteNotFound
from aiogram import Bot from aiogram import Bot, types
engine = create_engine("sqlite:///" + str(settings.DB_PATH)) engine = create_engine("sqlite:///" + str(settings.DB_PATH))
Session = sessionmaker(bind=engine) Session = sessionmaker(bind=engine)
@ -155,3 +155,9 @@ async def delete_old_messages(bot: Bot) -> None:
print("Сообщение не найдено!") print("Сообщение не найдено!")
session.delete(m) session.delete(m)
session.commit() session.commit()
def get_text_from_command(message: types.Message) -> str:
"""Вернет текст из команды для бота (но не саму команду). Парсит message["entities"]."""
command_length = int(message["entities"][0]["length"])
return message.text[command_length:].strip()

Loading…
Cancel
Save