Бот для телеги, открывающий доступ в чатик по приглашениям.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
2.1 KiB

"""Модель для данных."""
from sqlalchemy import Column, Integer, String, DateTime, UniqueConstraint
from sqlalchemy.orm import declarative_base
from datetime import datetime
Base = declarative_base()
class Allowed_user(Base):
"""Белый список пользователей.
При добавлении в базу user_id проверяется на уникальность (в
базе), чтобы избежать повторов.
"""
__tablename__ = "allowed_users"
id = Column(Integer, primary_key=True)
user_id = Column(Integer, nullable=False)
date_add = Column(DateTime, nullable=False)
__table_args__ = (UniqueConstraint("user_id", name="unique_uid"),)
class Token(Base):
"""Класс для токенов.
Хранит сам ключ, и дату истечения.
"""
__tablename__ = "tokens"
id = Column(Integer, primary_key=True)
token = Column(String, nullable=False)
expire = Column(DateTime, nullable=False)
def expired(self) -> bool:
"""Проверка срока жизни токена.
Вовзращает истину, если срок действия токена истек.
"""
if datetime.now() > self.expire:
return True
return False
def __repr__(self):
"""Базовое представление класса."""
return f"{self.id}: {self.token} | {self.expire}"
class Messages_to_delete(Base):
"""Сообщения, которые нужно будет удалить."""
__tablename__ = "messages_to_delete"
id = Column(Integer, primary_key=True)
message_id = Column(Integer, nullable=False)
deletion_date = Column(DateTime, nullable=False)
def deletion_needed(self) -> bool:
"""Нужно ли удалить это сообщение.
Мы могли пропустить удаление из-за перезапуска.
"""
time_now = datetime.now()
if time_now > self.deletion_date:
return True
return False