v1.2.0
This commit is contained in:
@@ -19,7 +19,8 @@ __all__ = (
|
||||
"Setting",
|
||||
"SpamStat",
|
||||
"SpamLog",
|
||||
"AutoComment",
|
||||
"AutoComment",
|
||||
"Report",
|
||||
)
|
||||
|
||||
|
||||
@@ -294,3 +295,68 @@ class AutoComment(Base):
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"<AutoComment(channel_id={self.channel_id}, enabled={self.is_enabled})>"
|
||||
|
||||
|
||||
class Report(Base):
|
||||
"""
|
||||
Модель для хранения статистики репортов.
|
||||
|
||||
Attributes:
|
||||
id: Уникальный ID репорта
|
||||
report_id: Строковый ID репорта (timestamp)
|
||||
reporter_id: ID пользователя, который пожаловался
|
||||
reporter_username: Username жалобщика
|
||||
reported_user_id: ID пользователя, на которого пожаловались
|
||||
reported_username: Username нарушителя
|
||||
chat_id: ID чата, где произошло нарушение
|
||||
chat_title: Название чата
|
||||
message_id: ID сообщения-нарушения
|
||||
message_thread_id: ID топика (если есть)
|
||||
message_text: Текст сообщения (до 500 символов)
|
||||
reason: Причина жалобы
|
||||
status: Статус репорта (pending, closed, banned, deleted)
|
||||
processed_by: ID админа, который обработал
|
||||
created_at: Дата создания репорта
|
||||
processed_at: Дата обработки
|
||||
"""
|
||||
__tablename__ = "reports"
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
report_id: Mapped[str] = mapped_column(String(50), nullable=False, unique=True, index=True)
|
||||
|
||||
# Информация о жалобщике
|
||||
reporter_id: Mapped[int] = mapped_column(BigInteger, nullable=False, index=True)
|
||||
reporter_username: Mapped[Optional[str]] = mapped_column(String(100), nullable=True)
|
||||
|
||||
# Информация о нарушителе
|
||||
reported_user_id: Mapped[int] = mapped_column(BigInteger, nullable=False, index=True)
|
||||
reported_username: Mapped[Optional[str]] = mapped_column(String(100), nullable=True)
|
||||
|
||||
# Информация о чате и сообщении
|
||||
chat_id: Mapped[int] = mapped_column(BigInteger, nullable=False)
|
||||
chat_title: Mapped[Optional[str]] = mapped_column(String(255), nullable=True)
|
||||
message_id: Mapped[int] = mapped_column(Integer, nullable=False)
|
||||
message_thread_id: Mapped[Optional[int]] = mapped_column(Integer, nullable=True)
|
||||
message_text: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
||||
|
||||
# Причина и статус
|
||||
reason: Mapped[str] = mapped_column(Text, nullable=False)
|
||||
status: Mapped[str] = mapped_column(
|
||||
String(20),
|
||||
default="pending",
|
||||
nullable=False,
|
||||
index=True
|
||||
) # pending, closed, banned, deleted
|
||||
|
||||
# Обработка
|
||||
processed_by: Mapped[Optional[int]] = mapped_column(Integer, nullable=True)
|
||||
created_at: Mapped[datetime] = mapped_column(
|
||||
DateTime,
|
||||
default=lambda: datetime.now(timezone.utc),
|
||||
nullable=False,
|
||||
index=True
|
||||
)
|
||||
processed_at: Mapped[Optional[datetime]] = mapped_column(DateTime, nullable=True)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"<Report(id={self.report_id}, reporter={self.reporter_id}, reported={self.reported_user_id})>"
|
||||
|
||||
Reference in New Issue
Block a user