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
import asyncio
from datetime import timedelta
from models import Messages_to_delete, Base
from models import Base
from aiogram.utils.markdown import escape_md
import settings
import services
@ -52,7 +52,11 @@ async def send_question(message: types.Message) -> None:
DELAY_TIME_Q минут.
"""
if len(message.text) == len("/q"):
question = services.get_text_from_command(message)
# если прислали только команду, без текста, показываем как надо
# пользоваться командой
if len(question) == 0:
await message.reply(
services.get_static("static/short_question_error.txt"),
reply=False,
@ -61,7 +65,10 @@ async def send_question(message: types.Message) -> None:
return
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(
chat_id=settings.CHAT_ID,
text=out_text,
@ -83,7 +90,10 @@ async def send_post(message: types.Message) -> None:
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(
chat_id=settings.CHAT_ID,
@ -106,7 +116,10 @@ async def get_invite(message: types.Message) -> None:
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(
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):
return

8
services.py

@ -12,7 +12,7 @@ from secrets import token_urlsafe
from datetime import datetime, timedelta
from aiogram.utils.exceptions import MessageToDeleteNotFound
from aiogram import Bot
from aiogram import Bot, types
engine = create_engine("sqlite:///" + str(settings.DB_PATH))
Session = sessionmaker(bind=engine)
@ -155,3 +155,9 @@ async def delete_old_messages(bot: Bot) -> None:
print("Сообщение не найдено!")
session.delete(m)
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