#pragma once #include "snowflake.hpp" #include "json.hpp" #include enum class EPremiumType { None = 0, NitroClassic = 1, Nitro = 2, }; struct UserData { enum { DiscordEmployee = 1 << 0, PartneredServerOwner = 1 << 1, HypeSquadEvents = 1 << 2, BugHunterLevel1 = 1 << 3, HouseBravery = 1 << 6, HouseBrilliance = 1 << 7, HouseBalance = 1 << 8, EarlySupporter = 1 << 9, TeamUser = 1 << 10, // no idea what this is System = 1 << 12, BugHunterLevel2 = 1 << 14, VerifiedBot = 1 << 16, EarlyVerifiedBotDeveloper = 1 << 17, CertifiedModerator = 1 << 18, MaxFlag_PlusOne, MaxFlag = MaxFlag_PlusOne - 1, }; static const char *GetFlagName(uint64_t flag); static const char *GetFlagReadableName(uint64_t flag); Snowflake ID; std::string Username; std::string Discriminator; std::string Avatar; // null std::optional IsBot; std::optional IsSystem; std::optional IsMFAEnabled; std::optional Locale; std::optional IsVerified; std::optional Email; // null std::optional Flags; std::optional PremiumType; // null std::optional PublicFlags; // undocumented (opt) std::optional IsDesktop; std::optional IsMobile; std::optional IsNSFWAllowed; // null std::optional Phone; // null? // for now (unserialized) std::optional BannerHash; // null std::optional Bio; // null friend void from_json(const nlohmann::json &j, UserData &m); friend void to_json(nlohmann::json &j, const UserData &m); void update_from_json(const nlohmann::json &j); [[nodiscard]] bool IsABot() const noexcept; [[nodiscard]] bool IsDeleted() const; [[nodiscard]] bool HasAvatar() const; [[nodiscard]] bool HasAnimatedAvatar() const noexcept; [[nodiscard]] bool HasAnimatedAvatar(Snowflake guild_id) const; [[nodiscard]] bool HasAnimatedAvatar(const std::optional &guild_id) const; [[nodiscard]] std::string GetAvatarURL(Snowflake guild_id, const std::string &ext = "png", std::string size = "32") const; [[nodiscard]] std::string GetAvatarURL(const std::optional &guild_id, const std::string &ext = "png", std::string size = "32") const; [[nodiscard]] std::string GetAvatarURL(const std::string &ext = "png", std::string size = "32") const; [[nodiscard]] std::string GetDefaultAvatarURL() const; [[nodiscard]] Snowflake GetHoistedRole(Snowflake guild_id, bool with_color = false) const; [[nodiscard]] std::string GetMention() const; [[nodiscard]] std::string GetEscapedName() const; [[nodiscard]] std::string GetEscapedBoldName() const; [[nodiscard]] std::string GetEscapedString() const; template [[nodiscard]] inline std::string GetEscapedBoldString() const { if constexpr (with_at) return "@" + Glib::Markup::escape_text(Username) + "#" + Discriminator; else return "" + Glib::Markup::escape_text(Username) + "#" + Discriminator; } };