#ifndef USER_H #define USER_H #include #include #include #include struct UserBadge { QString name; int version; UserBadge(const QString &name = "", int version = 0) : name(name), version(version) {} }; struct User { QString id; QString login; QString displayName; QString color; QDate followAt; QDate createdAt; QDateTime lastMessageTime; QVector badges; // Статусы bool isModerator; bool isVIP; bool isSubscriber; bool isTurbo; bool returningChatter; bool firstMsg; // Статистика int messageCount; int warnCount; User() : followAt(QDate(1900, 1, 1)) , createdAt(QDate(1900, 1, 1)) , lastMessageTime(QDateTime::fromSecsSinceEpoch(0)) , isModerator(false) , isVIP(false) , isSubscriber(false) , isTurbo(false) , returningChatter(false) , firstMsg(false) , messageCount(0) , warnCount(0) {} // Проверка наличия бейджа bool hasBadge(const QString &badgeName) const { for (const auto &badge : badges) { if (badge.name == badgeName) { return true; } } return false; } // Получение версии бейджа int badgeVersion(const QString &badgeName) const { for (const auto &badge : badges) { if (badge.name == badgeName) { return badge.version; } } return 0; } // Обновление из TwitchMessage void updateFromTwitchMessage(const class TwitchMessage &msg); // Строковое представление статусов QString getStatusString() const { QStringList statuses; if (isModerator) statuses << "Модератор"; if (isVIP) statuses << "VIP"; if (isSubscriber) statuses << "Подписчик"; if (returningChatter) statuses << "Возвращающийся"; if (firstMsg) statuses << "Первое сообщение"; return statuses.join(", "); } // Полный список бейджей как строка QString getBadgesString() const { QStringList badgeStrings; for (const auto &badge : badges) { badgeStrings << QString("%1/%2").arg(badge.name).arg(badge.version); } return badgeStrings.join(","); } }; #endif // USER_H