summaryrefslogtreecommitdiff
path: root/discord/objects.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'discord/objects.hpp')
-rw-r--r--discord/objects.hpp386
1 files changed, 20 insertions, 366 deletions
diff --git a/discord/objects.hpp b/discord/objects.hpp
index 065e040..4714c85 100644
--- a/discord/objects.hpp
+++ b/discord/objects.hpp
@@ -3,53 +3,16 @@
#include <nlohmann/json.hpp>
#include <vector>
#include <string>
+#include "snowflake.hpp"
+#include "user.hpp"
+#include "role.hpp"
+#include "member.hpp"
+#include "channel.hpp"
+#include "guild.hpp"
+#include "usersettings.hpp"
+#include "message.hpp"
-struct Snowflake {
- Snowflake();
- Snowflake(const Snowflake &s);
- Snowflake(uint64_t n);
- Snowflake(const std::string &str);
-
- bool IsValid() const;
-
- bool operator==(const Snowflake &s) const noexcept {
- return m_num == s.m_num;
- }
-
- bool operator<(const Snowflake &s) const noexcept {
- return m_num < s.m_num;
- }
-
- operator uint64_t() const noexcept {
- return m_num;
- }
-
- const static int Invalid = -1;
-
- friend void from_json(const nlohmann::json &j, Snowflake &s);
- friend void to_json(nlohmann::json &j, const Snowflake &s);
-
-private:
- friend struct std::hash<Snowflake>;
- friend struct std::less<Snowflake>;
- unsigned long long m_num;
-};
-
-namespace std {
-template<>
-struct hash<Snowflake> {
- std::size_t operator()(const Snowflake &k) const {
- return k.m_num;
- }
-};
-
-template<>
-struct less<Snowflake> {
- bool operator()(const Snowflake &l, const Snowflake &r) const {
- return l.m_num < r.m_num;
- }
-};
-} // namespace std
+// most stuff below should just be objects that get processed and thrown away immediately
enum class GatewayOp : int {
Event = 0,
@@ -82,315 +45,6 @@ struct HelloMessageData {
friend void from_json(const nlohmann::json &j, HelloMessageData &m);
};
-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 RoleData {
- Snowflake ID;
- std::string Name;
- int Color;
- bool IsHoisted;
- int Position;
- int PermissionsLegacy;
- uint64_t Permissions;
- bool IsManaged;
- bool IsMentionable;
-
- friend void from_json(const nlohmann::json &j, RoleData &m);
-};
-
-struct UserData {
- Snowflake ID; //
- std::string Username; //
- std::string Discriminator; //
- std::string Avatar; // null
- bool IsBot = false; // opt
- bool IsSystem = false; // opt
- bool IsMFAEnabled = false; // opt
- std::string Locale; // opt
- bool IsVerified = false; // opt
- std::string Email; // opt, null
- int Flags = 0; // opt
- int PremiumType = 0; // opt, null (docs wrong)
- int PublicFlags = 0; // opt
-
- // undocumented (opt)
- bool IsDesktop = false; //
- bool IsMobile = false; //
- bool IsNSFWAllowed = false; // null
- std::string Phone; // null?
-
- friend void from_json(const nlohmann::json &j, UserData &m);
-};
-
-struct GuildMemberData {
- UserData User; // opt
- std::string Nickname; // null
- std::vector<Snowflake> Roles; //
- std::string JoinedAt; //
- std::string PremiumSince; // opt, null
- bool IsDeafened; //
- bool IsMuted; //
-
- friend void from_json(const nlohmann::json &j, GuildMemberData &m);
-};
-
-struct ChannelData {
- Snowflake ID; //
- ChannelType Type; //
- Snowflake GuildID; // opt
- int Position = -1; // opt
- // std::vector<PermissionOverwriteData> PermissionOverwrites; // opt
- std::string Name; // opt, null (null for dm's)
- std::string Topic; // opt, null
- bool IsNSFW = false; // opt
- Snowflake LastMessageID; // opt, null
- int Bitrate = 0; // opt
- int UserLimit = 0; // opt
- int RateLimitPerUser = 0; // opt
- std::vector<UserData> Recipients; // opt
- std::string Icon; // opt, null
- Snowflake OwnerID; // opt
- Snowflake ApplicationID; // opt
- Snowflake ParentID; // opt, null
- std::string LastPinTimestamp; // opt, can be null even tho docs say otherwise
-
- friend void from_json(const nlohmann::json &j, ChannelData &m);
-};
-
-// a bot is apparently only supposed to receive the `id` and `unavailable` as false
-// but user tokens seem to get the full objects (minus users)
-struct GuildData {
- Snowflake ID; //
- std::string Name; //
- std::string Icon; // null
- std::string Splash; // null
- std::string DiscoverySplash; // opt, null (docs wrong)
- bool IsOwner = false; // opt
- Snowflake OwnerID; //
- int Permissions = 0; // opt
- std::string PermissionsNew; // opt
- std::string VoiceRegion; // opt
- Snowflake AFKChannelID; // null
- int AFKTimeout; //
- bool IsEmbedEnabled = false; // opt, deprecated
- Snowflake EmbedChannelID; // opt, null, deprecated
- int VerificationLevel; //
- int DefaultMessageNotifications; //
- int ExplicitContentFilter; //
- std::vector<RoleData> Roles; //
- // std::vector<EmojiData> Emojis; //
- std::vector<std::string> Features; //
- int MFALevel; //
- Snowflake ApplicationID; // null
- bool IsWidgetEnabled = false; // opt
- Snowflake WidgetChannelID; // opt, null
- Snowflake SystemChannelID; // null
- int SystemChannelFlags; //
- Snowflake RulesChannelID; // null
- std::string JoinedAt; // opt*
- bool IsLarge = false; // opt*
- bool IsUnavailable = false; // opt*
- int MemberCount = 0; // opt*
- // std::vector<VoiceStateData> VoiceStates; // opt*
- // std::vector<MemberData> Members; // opt* - incomplete anyways
- std::vector<ChannelData> Channels; // opt*
- // std::vector<PresenceUpdateData> Presences; // opt*
- int MaxPresences = 0; // opt, null
- int MaxMembers = 0; // opt
- std::string VanityURL; // null
- std::string Description; // null
- std::string BannerHash; // null
- int PremiumTier; //
- int PremiumSubscriptionCount = 0; // opt
- std::string PreferredLocale; //
- Snowflake PublicUpdatesChannelID; // null
- int MaxVideoChannelUsers = 0; // opt
- int ApproximateMemberCount = 0; // opt
- int ApproximatePresenceCount = 0; // opt
-
- // undocumented
- // std::map<std::string, Unknown> GuildHashes;
- bool IsLazy = false;
-
- // * - documentation says only sent in GUILD_CREATE, but these can be sent anyways in the READY event
-
- friend void from_json(const nlohmann::json &j, GuildData &m);
-};
-
-struct UserSettingsData {
- int TimezoneOffset; //
- std::string Theme; //
- bool AreStreamNotificationsEnabled; //
- std::string Status; //
- bool ShouldShowCurrentGame; //
- // std::vector<Unknown> RestrictedGuilds; //
- bool ShouldRenderReactions; //
- bool ShouldRenderEmbeds; //
- bool IsNativePhoneIntegrationEnabled; //
- bool ShouldMessageDisplayCompact; //
- std::string Locale; //
- bool ShouldInlineEmbedMedia; //
- bool ShouldInlineAttachmentMedia; //
- std::vector<Snowflake> GuildPositions; //
- // std::vector<GuildFolderEntryData> GuildFolders; //
- bool ShouldGIFAutoplay; //
- // Unknown FriendSourceFlags; //
- int ExplicitContentFilter; //
- bool IsTTSCommandEnabled; //
- bool ShouldDisableGamesTab; //
- bool DeveloperMode; //
- bool ShouldDetectPlatformAccounts; //
- bool AreDefaultGuildsRestricted; //
- // Unknown CustomStatus; // null
- bool ShouldConvertEmoticons; //
- bool IsContactSyncEnabled; //
- bool ShouldAnimateEmojis; //
- bool IsAccessibilityDetectionAllowed; //
- int AFKTimeout;
-
- friend void from_json(const nlohmann::json &j, UserSettingsData &m);
-};
-
-enum class MessageType {
- DEFAULT = 0,
- RECIPIENT_ADD = 1,
- RECIPIENT_REMOVE = 2,
- CALL = 3,
- CHANNEL_NaME_CHANGE = 4,
- CHANNEL_ICON_CHANGE = 5,
- CHANNEL_PINNED_MESSAGE = 6,
- GUILD_MEMBER_JOIN = 6,
- USER_PREMIUM_GUILD_SUBSCRIPTION = 7,
- USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1 = 8,
- USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2 = 9,
- USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3 = 10,
- CHANNEL_FOLLOW_ADD = 12,
- GUILD_DISCOVERY_DISQUALIFIED = 13,
- GUILD_DISCOVERY_REQUALIFIED = 14,
-};
-
-enum class MessageFlags {
- NONE = 0,
- CROSSPOSTED = 1 << 0,
- IS_CROSSPOST = 1 << 1,
- SUPPRESS_EMBEDS = 1 << 2,
- SOURCE_MESSAGE_DELETE = 1 << 3,
- URGENT = 1 << 4,
-};
-
-struct EmbedFooterData {
- std::string Text; //
- std::string IconURL; // opt
- std::string ProxyIconURL; // opt
-
- friend void from_json(const nlohmann::json &j, EmbedFooterData &m);
-};
-
-struct EmbedImageData {
- std::string URL; // opt
- std::string ProxyURL; // opt
- int Height = 0; // opt
- int Width = 0; // opt
-
- friend void from_json(const nlohmann::json &j, EmbedImageData &m);
-};
-
-struct EmbedThumbnailData {
- std::string URL; // opt
- std::string ProxyURL; // opt
- int Height = 0; // opt
- int Width = 0; // opt
-
- friend void from_json(const nlohmann::json &j, EmbedThumbnailData &m);
-};
-
-struct EmbedVideoData {
- std::string URL; // opt
- int Height = 0; // opt
- int Width = 0; // opt
- friend void from_json(const nlohmann::json &j, EmbedVideoData &m);
-};
-
-struct EmbedProviderData {
- std::string Name; // opt
- std::string URL; // opt, null (docs wrong)
-
- friend void from_json(const nlohmann::json &j, EmbedProviderData &m);
-};
-
-struct EmbedAuthorData {
- std::string Name; // opt
- std::string URL; // opt
- std::string IconURL; // opt
- std::string ProxyIconURL; // opt
-
- friend void from_json(const nlohmann::json &j, EmbedAuthorData &m);
-};
-
-struct EmbedFieldData {
- std::string Name; //
- std::string Value; //
- bool Inline = false; // opt
-
- friend void from_json(const nlohmann::json &j, EmbedFieldData &m);
-};
-
-struct EmbedData {
- std::string Title; // opt
- std::string Type; // opt
- std::string Description; // opt
- std::string URL; // opt
- std::string Timestamp; // opt
- int Color = -1; // opt
- EmbedFooterData Footer; // opt
- EmbedImageData Image; // opt
- EmbedThumbnailData Thumbnail; // opt
- EmbedVideoData Video; // opt
- EmbedProviderData Provider; // opt
- EmbedAuthorData Author; // opt
- std::vector<EmbedFieldData> Fields; // opt
-
- friend void from_json(const nlohmann::json &j, EmbedData &m);
-};
-
-struct MessageData {
- Snowflake ID; //
- Snowflake ChannelID; //
- Snowflake GuildID; // opt
- UserData Author; //
- // GuildMemberData Member; // opt
- std::string Content; //
- std::string Timestamp; //
- std::string EditedTimestamp; // null
- bool IsTTS; //
- bool DoesMentionEveryone; //
- std::vector<UserData> Mentions; //
- // std::vector<RoleData> MentionRoles; //
- // std::vector<ChannelMentionData> MentionChannels; // opt
- // std::vector<AttachmentData> Attachments; //
- std::vector<EmbedData> Embeds; //
- // std::vector<ReactionData> Reactions; // opt
- std::string Nonce; // opt
- bool IsPinned; //
- Snowflake WebhookID; // opt
- MessageType Type; //
- // MessageActivityData Activity; // opt
- // MessageApplicationData Application; // opt
- // MessageReferenceData MessageReference; // opt
- MessageFlags Flags = MessageFlags::NONE; // opt
-
- friend void from_json(const nlohmann::json &j, MessageData &m);
- void from_json_edited(const nlohmann::json &j); // for MESSAGE_UPDATE
-};
-
struct MessageDeleteData {
Snowflake ID; //
Snowflake ChannelID; //
@@ -412,7 +66,7 @@ struct GuildMemberListUpdateMessage {
};
struct MemberItem : Item {
- UserData User; //
+ User User; //
std::vector<Snowflake> Roles; //
// PresenceData Presence; //
std::string PremiumSince; // opt
@@ -422,12 +76,12 @@ struct GuildMemberListUpdateMessage {
std::string HoistedRole; // null
bool IsDefeaned; //
- GuildMemberData GetAsMemberData() const;
+ GuildMember GetAsMemberData() const;
friend void from_json(const nlohmann::json &j, MemberItem &m);
private:
- GuildMemberData m_member_data;
+ GuildMember m_member_data;
};
struct OpObject {
@@ -460,16 +114,16 @@ struct LazyLoadRequestMessage {
};
struct ReadyEventData {
- int GatewayVersion; //
- UserData User; //
- std::vector<GuildData> Guilds; //
- std::string SessionID; //
- std::vector<ChannelData> PrivateChannels; //
+ int GatewayVersion; //
+ User User; //
+ std::vector<Guild> Guilds; //
+ std::string SessionID; //
+ std::vector<Channel> PrivateChannels; //
// undocumented
- std::string AnalyticsToken; // opt
- int FriendSuggestionCount; // opt
- UserSettingsData UserSettings; // opt
+ std::string AnalyticsToken; // opt
+ int FriendSuggestionCount; // opt
+ UserSettings UserSettings; // opt
// std::vector<Unknown> ConnectedAccounts; // opt
// std::map<std::string, Unknown> Consents; // opt
// std::vector<Unknown> Experiments; // opt