#pragma once #include "snowflake.hpp" #include "json.hpp" #include enum class EPremiumType { None = 0, NitroClassic = 1, Nitro = 2, Basic = 3, }; struct UserData { // todo: enum class? (for consistencys sake) 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, BotHTTPInteractions = 1 << 19, Spammer = 1 << 20, DisablePremium = 1 << 21, ActiveDeveloper = 1 << 22, ApplicationCommandBadge = 1 << 23, Quarantined = 1ULL << 44, 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 GlobalName; 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 IsPomelo() const noexcept; [[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 GetDisplayName() const; [[nodiscard]] std::string GetDisplayName(Snowflake guild_id) const; [[nodiscard]] std::string GetDisplayName(const std::optional &guild_id) const; [[nodiscard]] std::string GetDisplayNameEscaped() const; [[nodiscard]] std::string GetDisplayNameEscaped(Snowflake guild_id) const; [[nodiscard]] std::string GetDisplayNameEscapedBold() const; [[nodiscard]] std::string GetDisplayNameEscapedBold(Snowflake guild_id) const; [[nodiscard]] std::string GetUsername() const; [[nodiscard]] std::string GetUsernameEscaped() const; [[nodiscard]] std::string GetUsernameEscapedBold() const; [[nodiscard]] std::string GetUsernameEscapedBoldAt() const; };