2020-09-10 03:17:26 +00:00
|
|
|
#pragma once
|
|
|
|
#include "snowflake.hpp"
|
|
|
|
#include "json.hpp"
|
|
|
|
#include "user.hpp"
|
2020-11-02 22:36:10 +00:00
|
|
|
#include "sticker.hpp"
|
2020-12-15 06:51:49 +00:00
|
|
|
#include "emoji.hpp"
|
2020-09-10 03:17:26 +00:00
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
enum class MessageType {
|
2020-12-21 07:29:00 +00:00
|
|
|
DEFAULT = 0, // yep
|
|
|
|
RECIPIENT_ADD = 1, // nope
|
|
|
|
RECIPIENT_REMOVE = 2, // nope
|
|
|
|
CALL = 3, // nope
|
|
|
|
CHANNEL_NAME_CHANGE = 4, // nope
|
|
|
|
CHANNEL_ICON_CHANGE = 5, // nope
|
|
|
|
CHANNEL_PINNED_MESSAGE = 6, // yep
|
|
|
|
GUILD_MEMBER_JOIN = 7, // yep
|
|
|
|
USER_PREMIUM_GUILD_SUBSCRIPTION = 8, // nope
|
|
|
|
USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1 = 9, // nope
|
|
|
|
USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2 = 10, // nope
|
|
|
|
USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3 = 11, // nope
|
|
|
|
CHANNEL_FOLLOW_ADD = 12, // nope
|
|
|
|
GUILD_DISCOVERY_DISQUALIFIED = 14, // nope
|
|
|
|
GUILD_DISCOVERY_REQUALIFIED = 15, // nope
|
|
|
|
INLINE_REPLY = 19, // kinda
|
2020-12-23 02:18:39 +00:00
|
|
|
APPLICATION_COMMAND = 20, // yep
|
2020-09-10 03:17:26 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
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 {
|
2020-11-24 01:34:09 +00:00
|
|
|
std::string Text;
|
|
|
|
std::optional<std::string> IconURL;
|
|
|
|
std::optional<std::string> ProxyIconURL;
|
2020-09-10 03:17:26 +00:00
|
|
|
|
2020-11-24 01:34:09 +00:00
|
|
|
friend void to_json(nlohmann::json &j, const EmbedFooterData &m);
|
2020-09-10 03:17:26 +00:00
|
|
|
friend void from_json(const nlohmann::json &j, EmbedFooterData &m);
|
|
|
|
};
|
|
|
|
|
|
|
|
struct EmbedImageData {
|
2020-11-24 01:34:09 +00:00
|
|
|
std::optional<std::string> URL;
|
|
|
|
std::optional<std::string> ProxyURL;
|
|
|
|
std::optional<int> Height;
|
|
|
|
std::optional<int> Width;
|
2020-09-10 03:17:26 +00:00
|
|
|
|
2020-11-24 01:34:09 +00:00
|
|
|
friend void to_json(nlohmann::json &j, const EmbedImageData &m);
|
2020-09-10 03:17:26 +00:00
|
|
|
friend void from_json(const nlohmann::json &j, EmbedImageData &m);
|
|
|
|
};
|
|
|
|
|
|
|
|
struct EmbedThumbnailData {
|
2020-11-24 01:34:09 +00:00
|
|
|
std::optional<std::string> URL;
|
|
|
|
std::optional<std::string> ProxyURL;
|
|
|
|
std::optional<int> Height;
|
|
|
|
std::optional<int> Width;
|
2020-09-10 03:17:26 +00:00
|
|
|
|
2020-11-24 01:34:09 +00:00
|
|
|
friend void to_json(nlohmann::json &j, const EmbedThumbnailData &m);
|
2020-09-10 03:17:26 +00:00
|
|
|
friend void from_json(const nlohmann::json &j, EmbedThumbnailData &m);
|
|
|
|
};
|
|
|
|
|
|
|
|
struct EmbedVideoData {
|
2020-11-24 01:34:09 +00:00
|
|
|
std::optional<std::string> URL;
|
|
|
|
std::optional<int> Height;
|
|
|
|
std::optional<int> Width;
|
|
|
|
|
|
|
|
friend void to_json(nlohmann::json &j, const EmbedVideoData &m);
|
2020-09-10 03:17:26 +00:00
|
|
|
friend void from_json(const nlohmann::json &j, EmbedVideoData &m);
|
|
|
|
};
|
|
|
|
|
|
|
|
struct EmbedProviderData {
|
2020-11-24 01:34:09 +00:00
|
|
|
std::optional<std::string> Name;
|
|
|
|
std::optional<std::string> URL; // null
|
2020-09-10 03:17:26 +00:00
|
|
|
|
2020-11-24 01:34:09 +00:00
|
|
|
friend void to_json(nlohmann::json &j, const EmbedProviderData &m);
|
2020-09-10 03:17:26 +00:00
|
|
|
friend void from_json(const nlohmann::json &j, EmbedProviderData &m);
|
|
|
|
};
|
|
|
|
|
|
|
|
struct EmbedAuthorData {
|
2020-11-24 01:34:09 +00:00
|
|
|
std::optional<std::string> Name;
|
|
|
|
std::optional<std::string> URL;
|
|
|
|
std::optional<std::string> IconURL;
|
|
|
|
std::optional<std::string> ProxyIconURL;
|
2020-09-10 03:17:26 +00:00
|
|
|
|
2020-11-24 01:34:09 +00:00
|
|
|
friend void to_json(nlohmann::json &j, const EmbedAuthorData &m);
|
2020-09-10 03:17:26 +00:00
|
|
|
friend void from_json(const nlohmann::json &j, EmbedAuthorData &m);
|
|
|
|
};
|
|
|
|
|
|
|
|
struct EmbedFieldData {
|
2020-11-24 01:34:09 +00:00
|
|
|
std::string Name;
|
|
|
|
std::string Value;
|
|
|
|
std::optional<bool> Inline;
|
2020-09-10 03:17:26 +00:00
|
|
|
|
2020-11-24 01:34:09 +00:00
|
|
|
friend void to_json(nlohmann::json &j, const EmbedFieldData &m);
|
2020-09-10 03:17:26 +00:00
|
|
|
friend void from_json(const nlohmann::json &j, EmbedFieldData &m);
|
|
|
|
};
|
|
|
|
|
|
|
|
struct EmbedData {
|
2020-11-24 01:34:09 +00:00
|
|
|
std::optional<std::string> Title;
|
|
|
|
std::optional<std::string> Type;
|
|
|
|
std::optional<std::string> Description;
|
|
|
|
std::optional<std::string> URL;
|
|
|
|
std::optional<std::string> Timestamp;
|
|
|
|
std::optional<int> Color;
|
|
|
|
std::optional<EmbedFooterData> Footer;
|
|
|
|
std::optional<EmbedImageData> Image;
|
|
|
|
std::optional<EmbedThumbnailData> Thumbnail;
|
|
|
|
std::optional<EmbedVideoData> Video;
|
|
|
|
std::optional<EmbedProviderData> Provider;
|
|
|
|
std::optional<EmbedAuthorData> Author;
|
|
|
|
std::optional<std::vector<EmbedFieldData>> Fields;
|
|
|
|
|
|
|
|
friend void to_json(nlohmann::json &j, const EmbedData &m);
|
2020-09-10 03:17:26 +00:00
|
|
|
friend void from_json(const nlohmann::json &j, EmbedData &m);
|
|
|
|
};
|
|
|
|
|
2020-09-10 05:15:44 +00:00
|
|
|
struct AttachmentData {
|
2020-11-24 01:34:09 +00:00
|
|
|
Snowflake ID;
|
|
|
|
std::string Filename;
|
|
|
|
int Bytes;
|
|
|
|
std::string URL;
|
|
|
|
std::string ProxyURL;
|
|
|
|
std::optional<int> Height; // null
|
|
|
|
std::optional<int> Width; // null
|
|
|
|
|
|
|
|
friend void to_json(nlohmann::json &j, const AttachmentData &m);
|
2020-09-10 05:15:44 +00:00
|
|
|
friend void from_json(const nlohmann::json &j, AttachmentData &m);
|
|
|
|
};
|
|
|
|
|
2020-11-01 22:10:25 +00:00
|
|
|
struct MessageReferenceData {
|
|
|
|
std::optional<Snowflake> MessageID;
|
|
|
|
std::optional<Snowflake> ChannelID;
|
|
|
|
std::optional<Snowflake> GuildID;
|
|
|
|
|
|
|
|
friend void from_json(const nlohmann::json &j, MessageReferenceData &m);
|
|
|
|
friend void to_json(nlohmann::json &j, const MessageReferenceData &m);
|
|
|
|
};
|
|
|
|
|
2020-12-15 06:51:49 +00:00
|
|
|
struct ReactionData {
|
|
|
|
int Count;
|
|
|
|
bool HasReactedWith;
|
2021-01-07 07:41:49 +00:00
|
|
|
EmojiData Emoji;
|
2020-12-15 06:51:49 +00:00
|
|
|
|
|
|
|
friend void from_json(const nlohmann::json &j, ReactionData &m);
|
|
|
|
friend void to_json(nlohmann::json &j, const ReactionData &m);
|
|
|
|
};
|
|
|
|
|
2020-12-23 02:18:39 +00:00
|
|
|
struct MessageApplicationData {
|
|
|
|
Snowflake ID;
|
|
|
|
std::optional<std::string> CoverImage;
|
|
|
|
std::string Description;
|
|
|
|
std::string Icon; // null
|
|
|
|
std::string Name;
|
|
|
|
|
|
|
|
friend void from_json(const nlohmann::json &j, MessageApplicationData &m);
|
|
|
|
friend void to_json(nlohmann::json &j, const MessageApplicationData &m);
|
|
|
|
};
|
|
|
|
|
2020-09-10 03:59:40 +00:00
|
|
|
struct Message {
|
2020-11-01 22:10:25 +00:00
|
|
|
Snowflake ID;
|
|
|
|
Snowflake ChannelID;
|
|
|
|
std::optional<Snowflake> GuildID;
|
2021-01-07 07:41:49 +00:00
|
|
|
UserData Author;
|
2020-11-01 22:10:25 +00:00
|
|
|
// std::optional<GuildMember> Member;
|
|
|
|
std::string Content;
|
|
|
|
std::string Timestamp;
|
2020-09-10 03:17:26 +00:00
|
|
|
std::string EditedTimestamp; // null
|
2020-11-01 22:10:25 +00:00
|
|
|
bool IsTTS;
|
|
|
|
bool DoesMentionEveryone;
|
2021-01-07 07:41:49 +00:00
|
|
|
std::vector<UserData> Mentions; // full user accessible
|
|
|
|
// std::vector<RoleData> MentionRoles;
|
2020-11-01 22:10:25 +00:00
|
|
|
// std::optional<std::vector<ChannelMentionData>> MentionChannels;
|
|
|
|
std::vector<AttachmentData> Attachments;
|
|
|
|
std::vector<EmbedData> Embeds;
|
2020-12-15 06:51:49 +00:00
|
|
|
std::optional<std::vector<ReactionData>> Reactions;
|
2020-11-01 22:10:25 +00:00
|
|
|
std::optional<std::string> Nonce;
|
|
|
|
bool IsPinned;
|
|
|
|
std::optional<Snowflake> WebhookID;
|
|
|
|
MessageType Type;
|
2021-01-07 07:41:49 +00:00
|
|
|
// std::optional<MessageActivityData> ActivityData;
|
2020-12-23 02:18:39 +00:00
|
|
|
std::optional<MessageApplicationData> Application;
|
2020-11-01 22:10:25 +00:00
|
|
|
std::optional<MessageReferenceData> MessageReference;
|
|
|
|
std::optional<MessageFlags> Flags = MessageFlags::NONE;
|
2021-01-07 07:41:49 +00:00
|
|
|
std::optional<std::vector<StickerData>> Stickers;
|
2021-01-01 07:39:07 +00:00
|
|
|
std::optional<std::shared_ptr<Message>> ReferencedMessage; // has_value && null means deleted
|
2020-09-10 03:17:26 +00:00
|
|
|
|
2020-09-10 03:59:40 +00:00
|
|
|
friend void from_json(const nlohmann::json &j, Message &m);
|
2020-09-10 03:17:26 +00:00
|
|
|
void from_json_edited(const nlohmann::json &j); // for MESSAGE_UPDATE
|
2020-09-11 03:57:36 +00:00
|
|
|
|
|
|
|
// custom fields to track changes
|
|
|
|
void SetDeleted();
|
2020-09-20 05:12:54 +00:00
|
|
|
void SetEdited();
|
2020-09-11 03:57:36 +00:00
|
|
|
bool IsDeleted() const;
|
|
|
|
bool IsEdited() const;
|
|
|
|
|
|
|
|
private:
|
|
|
|
bool m_deleted = false;
|
|
|
|
bool m_edited = false;
|
2020-09-10 03:17:26 +00:00
|
|
|
};
|