#pragma once #include "snowflake.hpp" #include "json.hpp" #include "user.hpp" #include "permissions.hpp" #include #include enum class ChannelType : int { GUILD_TEXT = 0, DM = 1, GUILD_VOICE = 2, GROUP_DM = 3, GUILD_CATEGORY = 4, GUILD_NEWS = 5, GUILD_STORE = 6, }; struct ChannelData { Snowflake ID; ChannelType Type; std::optional GuildID; std::optional Position; std::optional> PermissionOverwrites; // shouldnt be accessed std::optional Name; // null for dm's std::optional Topic; // null std::optional IsNSFW; std::optional LastMessageID; // null std::optional Bitrate; std::optional UserLimit; std::optional RateLimitPerUser; std::optional> Recipients; // only access id std::optional> RecipientIDs; std::optional Icon; // null std::optional OwnerID; std::optional ApplicationID; std::optional ParentID; // null std::optional LastPinTimestamp; // null friend void from_json(const nlohmann::json &j, ChannelData &m); void update_from_json(const nlohmann::json &j); std::optional GetOverwrite(Snowflake id) const; std::vector GetDMRecipients() const; };