first commit

This commit is contained in:
2026-01-26 22:26:19 +03:00
commit 31fccd85f2
95 changed files with 115400 additions and 0 deletions
+81
View File
@@ -0,0 +1,81 @@
#ifndef USER_MANAGER_H
#define USER_MANAGER_H
#include <QObject>
#include <QString>
#include <QMap>
#include <QVector>
#include <QDateTime>
#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<User*> findUsersByLogin(const QString &login);
QVector<User*> getModerators() const;
QVector<User*> getVIPs() const;
QVector<User*> getSubscribers() const;
QVector<User*> getActiveUsers(int minutes = 10) const;
// Статистика
int getUserCount() const;
int getMessageCount() const;
// Сохранение/загрузка
bool saveToFile(const QString &filename);
bool loadFromFile(const QString &filename);
// Геттеры
User* getUserByIndex(int index);
const QMap<QString, User>& 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<QString, User> m_users;
// Индексы для быстрого поиска
QMap<QString, QString> m_userIdToDisplayName; // userId -> displayName
QMap<QString, QString> 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