#ifndef USER_MANAGER_H #define USER_MANAGER_H #include #include #include #include #include #include "user.h" #include "twitchmessage.h" class UserManager : public QObject { Q_OBJECT public: explicit UserManager(QObject *parent = nullptr); ~UserManager(); // Основные методы QString checkUser(const QString &displayName, const TwitchMessage &msg = TwitchMessage()); User* findUser(const QString &displayName); User* findUserById(const QString &userId); // Статистика int m_totalMessages; // Обновление пользователя void updateUserFromMessage(const QString &displayName, const TwitchMessage &msg); void updateUserStatus(const QString &userId, bool isMod, bool isVIP, bool isSubscriber); // Управление списком void addUser(const User &user); void removeUser(const QString &displayName); void clear(); // Поиск QVector findUsersByLogin(const QString &login); QVector getModerators() const; QVector getVIPs() const; QVector getSubscribers() const; QVector getActiveUsers(int minutes = 10) const; const User* getRandomUser() const; // Статистика int getUserCount() const; int getMessageCount() const; // Сохранение/загрузка bool saveToFile(const QString &filename); bool loadFromFile(const QString &filename); // Геттеры User* getUserByIndex(const QString &userID); const QMap& getAllUsers() const; signals: void userAdded(const User &user); void userUpdated(const User &user); void userRemoved(const QString &userId, const QString &displayName); void userMessageCountChanged(const QString &userId, int count); private: // Основное хранилище (DisplayName -> User) QMap m_users; // Индексы для быстрого поиска QMap m_userIdToDisplayName; // userId -> displayName QMap m_loginToDisplayName; // login -> displayName // Вспомогательные методы QString generateUserId() const; void updateIndexes(const QString &displayName, const User &user); void cleanupOldUsers(); // Конфигурация int m_maxUsers; // Максимальное количество пользователей в памяти int m_cleanupInterval; // Интервал очистки в минутах QDateTime m_lastCleanup; }; #endif // USER_MANAGER_H