Support-BOT
This commit is contained in:
88
utils.py
Normal file
88
utils.py
Normal file
@@ -0,0 +1,88 @@
|
||||
import re
|
||||
from datetime import datetime
|
||||
|
||||
from aiogram import Bot
|
||||
from aiogram.exceptions import TelegramAPIError
|
||||
from aiogram.filters import CommandObject
|
||||
from aiogram.types import Message, Chat
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from app.schemas.user import UserFromDBScheme
|
||||
from app.schemas.user import UserBaseScheme
|
||||
|
||||
DATE_PATTERN = r'^(0?[1-9]|[12][0-9]|3[01]).(0?[1-9]|1[012]).((19|20)\d\d)$'
|
||||
|
||||
|
||||
def extract_user_id(message: Message) -> int:
|
||||
text = message.text if message.text else message.caption
|
||||
if '#id' not in text:
|
||||
return False
|
||||
telegram_user_id = int(text.split(sep='#id')[-1])
|
||||
return telegram_user_id
|
||||
|
||||
|
||||
def parse_ban_command(command: CommandObject) -> int:
|
||||
telegram_user_id = command.args.strip()
|
||||
try:
|
||||
telegram_user_id = int(telegram_user_id)
|
||||
except ValueError:
|
||||
return False
|
||||
return telegram_user_id
|
||||
|
||||
|
||||
def get_user_name(chat: Chat):
|
||||
"""Получение полного имени пользователя из чата"""
|
||||
if not chat.first_name:
|
||||
return ""
|
||||
if not chat.last_name:
|
||||
return chat.first_name
|
||||
return f"{chat.first_name} {chat.last_name}"
|
||||
|
||||
|
||||
def check_input_date_correct(date_args):
|
||||
"""Проверка интервала дат на соотвествие паттерну"""
|
||||
date_from, date_to = date_args.split()
|
||||
pattern = re.compile(DATE_PATTERN)
|
||||
if not (pattern.match(date_from) and pattern.match(date_to)):
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def stringdate_to_date(date_args):
|
||||
"""Конвертация текстового интервала дат в формат datetime"""
|
||||
from_date, to_date = date_args.split()
|
||||
from_date = datetime.strptime(from_date, '%d.%m.%Y')
|
||||
to_date = datetime.strptime(to_date, '%d.%m.%Y') + relativedelta(days=+1)
|
||||
return from_date, to_date
|
||||
|
||||
|
||||
def get_user_data(message: Message):
|
||||
user_data = {
|
||||
'telegram_id': message.from_user.id,
|
||||
'telegram_username': message.from_user.username,
|
||||
'first_name': message.from_user.first_name,
|
||||
'last_name': message.from_user.last_name,
|
||||
}
|
||||
return user_data
|
||||
|
||||
|
||||
def check_user_is_banned(user: UserBaseScheme):
|
||||
return user.is_banned
|
||||
|
||||
|
||||
def check_user_is_admin(user: UserFromDBScheme):
|
||||
return user.is_admin
|
||||
|
||||
|
||||
async def get_telegram_user_from_resend_message(message: Message, bot: Bot):
|
||||
telegram_user_id = extract_user_id(message.reply_to_message)
|
||||
if not telegram_user_id:
|
||||
return await message.reply(
|
||||
text='Невозможно найти пользователя с таким Id'
|
||||
)
|
||||
try:
|
||||
return await bot.get_chat(telegram_user_id)
|
||||
except TelegramAPIError as err:
|
||||
return await message.reply(
|
||||
text=(f'Невозможно найти пользователя с таким Id. Текст ошибки:\n'
|
||||
f'{err.message}')
|
||||
)
|
||||
Reference in New Issue
Block a user