|
|
|
@ -3,11 +3,8 @@ import logging
|
|
|
|
|
from aiogram import Bot, Dispatcher, executor, types |
|
|
|
|
from aiogram.utils.exceptions import MessageToDeleteNotFound |
|
|
|
|
import asyncio |
|
|
|
|
from datetime import timedelta, datetime |
|
|
|
|
import secrets |
|
|
|
|
|
|
|
|
|
from sqlalchemy.exc import IntegrityError |
|
|
|
|
from models import Allowed_user, Token, Messages_to_delete, Base |
|
|
|
|
from datetime import timedelta |
|
|
|
|
from models import Allowed_user, Messages_to_delete, Base |
|
|
|
|
from aiogram.utils.markdown import escape_md |
|
|
|
|
import settings |
|
|
|
|
import services |
|
|
|
@ -46,24 +43,6 @@ async def get_channel_id(message: types.Message) -> None:
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dp.message_handler(commands=["mes"]) |
|
|
|
|
@services.auth |
|
|
|
|
async def send_to_chanel(message: types.Message) -> None: |
|
|
|
|
|
|
|
|
|
deletion_time = message.date + timedelta(minutes=settings.DELAY_TIME) |
|
|
|
|
out_text = f"{message.text[5:]} \n\nБудет удалено в *{deletion_time}*" |
|
|
|
|
result = await bot.send_message( |
|
|
|
|
chat_id=settings.CHAT_ID, |
|
|
|
|
text=out_text, |
|
|
|
|
disable_notification=True, |
|
|
|
|
parse_mode="Markdown", |
|
|
|
|
) |
|
|
|
|
print(result.sender_chat.id) |
|
|
|
|
await services._clean_up( |
|
|
|
|
message_id=result.message_id, delay_min=settings.DELAY_TIME, bot=bot |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dp.message_handler(commands=["q"]) |
|
|
|
|
@services.auth |
|
|
|
|
async def send_question(message: types.Message) -> None: |
|
|
|
@ -75,9 +54,7 @@ async def send_question(message: types.Message) -> None:
|
|
|
|
|
""" |
|
|
|
|
if len(message.text) == len("/q"): |
|
|
|
|
await message.reply( |
|
|
|
|
"Пишешь пусто - делаешь грустно (мне)" |
|
|
|
|
"\nПосле /q надо написать вопрос, вот так:" |
|
|
|
|
"\n\n`/q как доехать до Баррикадной?`", |
|
|
|
|
services.get_static("static/short_question_error.txt"), |
|
|
|
|
reply=False, |
|
|
|
|
parse_mode="Markdown", |
|
|
|
|
) |
|
|
|
@ -102,7 +79,7 @@ async def send_question(message: types.Message) -> None:
|
|
|
|
|
async def get_invite(message: types.Message) -> None: |
|
|
|
|
"""Получить токен для нового пользователя.""" |
|
|
|
|
bot_info = await bot.get_me() |
|
|
|
|
bot_link = "@" + str(bot_info.username) |
|
|
|
|
bot_link = f"@{bot_info.username}" |
|
|
|
|
|
|
|
|
|
token = services.get_new_token() |
|
|
|
|
|
|
|
|
@ -136,16 +113,17 @@ async def add_me(message: types.Message) -> None:
|
|
|
|
|
chat_id=settings.CHAT_ID, expire_date=timedelta(minutes=5), member_limit=1 |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
with open("static/welcome_msg_short.txt", "r") as file: |
|
|
|
|
msg = file.read() |
|
|
|
|
await message.reply( |
|
|
|
|
msg.format(invite=link["invite_link"]), reply=False, parse_mode="Markdown" |
|
|
|
|
) |
|
|
|
|
msg = services.get_static("static/welcome_msg_short.txt") |
|
|
|
|
await message.reply( |
|
|
|
|
msg.format(invite=link["invite_link"]), reply=False, parse_mode="Markdown" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
await asyncio.sleep(10) |
|
|
|
|
with open("static/welcome_msg.txt", "r") as f: |
|
|
|
|
msg = f.read() |
|
|
|
|
await message.reply(msg, reply=False, parse_mode="Markdown") |
|
|
|
|
|
|
|
|
|
msg = services.get_static("static/welcome_msg.txt") |
|
|
|
|
await message.reply( |
|
|
|
|
msg, reply=False, parse_mode="Markdown", disable_web_page_preview=True |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dp.message_handler(commands=["stop"]) |
|
|
|
@ -158,39 +136,32 @@ async def stop_and_panic(message: types.Message) -> None:
|
|
|
|
|
- удаляет из белого списка. |
|
|
|
|
""" |
|
|
|
|
u_id = message["from"]["id"] |
|
|
|
|
finded_user: Allowed_user = ( |
|
|
|
|
services.session.query(Allowed_user) |
|
|
|
|
.filter(Allowed_user.user_id == u_id) |
|
|
|
|
.one_or_none() |
|
|
|
|
) |
|
|
|
|
services.delete_user_from_allowed_list(u_id) |
|
|
|
|
await bot.kick_chat_member( |
|
|
|
|
chat_id=settings.CHAT_ID, user_id=finded_user.user_id, revoke_messages=True |
|
|
|
|
chat_id=settings.CHAT_ID, user_id=u_id, revoke_messages=True |
|
|
|
|
) |
|
|
|
|
services.session.delete(finded_user) |
|
|
|
|
services.session.commit() |
|
|
|
|
|
|
|
|
|
# рассылка сообщения админам что юзер нажал паническую кнопку. Нужны ид чатов. |
|
|
|
|
# for admin_id in ADMINS: |
|
|
|
|
# await bot.send_meassage() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dp.message_handler(commands=["wlc"]) |
|
|
|
|
@services.only_admins |
|
|
|
|
async def wlc(message: types.Message) -> None: |
|
|
|
|
"""Тестирование приветственного сообщения.""" |
|
|
|
|
with open("static/welcome_msg.txt", "r") as f: |
|
|
|
|
msg = f.read() |
|
|
|
|
await message.reply( |
|
|
|
|
msg, reply=False, parse_mode="Markdown", disable_web_page_preview=True |
|
|
|
|
) |
|
|
|
|
await message.reply( |
|
|
|
|
services.get_static("static/welcome_msg.txt"), |
|
|
|
|
reply=False, |
|
|
|
|
parse_mode="Markdown", |
|
|
|
|
disable_web_page_preview=True, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# https://stackoverflow.com/questions/67637631/create-a-background-process-using-aiogram |
|
|
|
|
async def messages_cleanup() -> None: |
|
|
|
|
# выполняется только при запуске бота! Может быть плохо |
|
|
|
|
msg_list = ( |
|
|
|
|
services.session.query(Messages_to_delete).order_by(Messages_to_delete.id).all() |
|
|
|
|
) |
|
|
|
|
while True: |
|
|
|
|
# вот тут бы проверить, что вообще есть сообещния |
|
|
|
|
for m in msg_list: |
|
|
|
|
if m.deletion_needed: |
|
|
|
|
try: |
|
|
|
|