#pragma once #include "common/Aliases.hpp" #include "util/QStringHash.hpp" #include #include #include #include #include namespace chatterino { struct Emote; using EmotePtr = std::shared_ptr; class SeventvBadges { public: // Return the badge, if any, that is assigned to the user std::optional getBadge(const UserId &id) const; // Assign the given badge to the user void assignBadgeToUser(const QString &badgeID, const UserId &userID); // Remove the given badge from the user void clearBadgeFromUser(const QString &badgeID, const UserId &userID); // Register a new known badge // The json object will contain all information about the badge, like its ID & its images void registerBadge(const QJsonObject &badgeJson); private: // Mutex for both `badgeMap_` and `knownBadges_` mutable std::shared_mutex mutex_; // user-id => badge std::unordered_map badgeMap_; // badge-id => badge std::unordered_map knownBadges_; }; } // namespace chatterino