Files
TG_autoposter/app/models/group_members.py
2025-12-18 05:55:32 +09:00

74 lines
3.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, Boolean, Text
from sqlalchemy.orm import relationship
from datetime import datetime
from .base import Base
class GroupMember(Base):
"""Модель для хранения участников группы"""
__tablename__ = 'group_members'
id = Column(Integer, primary_key=True)
group_id = Column(Integer, ForeignKey('groups.id'), nullable=False)
user_id = Column(String, nullable=False) # Telegram user ID
username = Column(String, nullable=True) # Username если есть
first_name = Column(String, nullable=True) # Имя
last_name = Column(String, nullable=True) # Фамилия
is_bot = Column(Boolean, default=False) # Это бот?
is_admin = Column(Boolean, default=False) # Администратор группы?
is_owner = Column(Boolean, default=False) # Владелец группы?
joined_at = Column(DateTime, nullable=True) # Когда присоединился
last_activity = Column(DateTime, default=datetime.utcnow) # Последняя активность
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
# Обратная связь
group = relationship('Group', back_populates='members')
def __repr__(self):
return f'<GroupMember {self.user_id} in group {self.group_id}>'
class GroupKeyword(Base):
"""Модель для ключевых слов поиска групп"""
__tablename__ = 'group_keywords'
id = Column(Integer, primary_key=True)
group_id = Column(Integer, ForeignKey('groups.id'), nullable=False, unique=True)
keywords = Column(Text, nullable=False) # JSON массив ключевых слов
description = Column(String, nullable=True) # Описание для поиска
last_parsed = Column(DateTime, nullable=True) # Когда последний раз парсили
is_active = Column(Boolean, default=True)
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
# Обратная связь
group = relationship('Group', back_populates='keywords', foreign_keys=[group_id])
def __repr__(self):
return f'<GroupKeyword group_id={self.group_id}>'
class GroupStatistics(Base):
"""Модель для статистики групп"""
__tablename__ = 'group_statistics'
id = Column(Integer, primary_key=True)
group_id = Column(Integer, ForeignKey('groups.id'), nullable=False, unique=True)
total_members = Column(Integer, default=0) # Всего участников
total_admins = Column(Integer, default=0) # Всего администраторов
total_bots = Column(Integer, default=0) # Всего ботов
messages_sent = Column(Integer, default=0) # Отправлено сообщений
messages_failed = Column(Integer, default=0) # Ошибок при отправке
messages_via_client = Column(Integer, default=0) # Отправлено через Pyrogram
can_send_as_bot = Column(Boolean, default=True) # Может ли бот отправлять?
can_send_as_client = Column(Boolean, default=False) # Может ли клиент отправлять?
last_updated = Column(DateTime, default=datetime.utcnow)
created_at = Column(DateTime, default=datetime.utcnow)
# Обратная связь
group = relationship('Group', back_populates='statistics', foreign_keys=[group_id])
def __repr__(self):
return f'<GroupStatistics group_id={self.group_id}>'