Browse Source

Фиксация версии.

Нужно зафиксить изменения перед деплоем бота в прод.
master
Дмитрий 3 years ago
parent
commit
2a0df69d4f
  1. 75
      main.py
  2. 19
      services.py
  3. 4
      static/short_question_error.txt
  4. 4
      static/welcome_msg_short.txt

75
main.py

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

19
services.py

@ -114,3 +114,22 @@ def add_new_user_to_allowed_list(user_id: int) -> None:
except IntegrityError: except IntegrityError:
print(f"Юзер {new_user.user_id} уже в базе") print(f"Юзер {new_user.user_id} уже в базе")
session.rollback() session.rollback()
def delete_user_from_allowed_list(user_id: str) -> None:
"""Удаляет пользователя из белого списка."""
user: Allowed_user = (
session.query(Allowed_user)
.filter(Allowed_user.user_id == user_id)
.one_or_none()
)
if user:
session.delete(user)
session.commit()
def get_static(name: str) -> str:
"""Возвращает содержимое из файла переданного в name."""
with open(name, "r") as f:
msg = f.read()
return msg

4
static/short_question_error.txt

@ -0,0 +1,4 @@
Пишешь пусто - делаешь грустно (мне)
После /q надо написать вопрос, вот так:
`/q как доехать до Баррикадной?`

4
static/welcome_msg_short.txt

@ -0,0 +1,4 @@
Welcome to the internet
Have a look around
Anything that brain of yours can think of can be found
Твоя ссылка для вступления: {invite}
Loading…
Cancel
Save