Skip to content

Commit f892394

Browse files
Merge branch 'dev' of github.com:brainboxdotcc/DPP
2 parents 775b474 + aa29f33 commit f892394

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

include/dpp/message.h

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2011,6 +2011,24 @@ namespace cache_policy {
20112011
};
20122012

20132013
/**
2014+
* @brief Message Reference type
2015+
*/
2016+
enum DPP_EXPORT message_ref_type : uint8_t {
2017+
/**
2018+
* A reply or crosspost
2019+
*/
2020+
mrt_default = 0,
2021+
/**
2022+
* A forwarded message
2023+
*/
2024+
mrt_forward = 1,
2025+
};
2026+
2027+
template <typename T> struct message_snapshot {
2028+
std::vector<T> messages;
2029+
};
2030+
2031+
/**
20142032
* @brief Represents messages sent and received on Discord
20152033
*/
20162034
struct DPP_EXPORT message : public managed, json_interface<message> {
@@ -2140,6 +2158,10 @@ struct DPP_EXPORT message : public managed, json_interface<message> {
21402158
* @brief Reference to another message, e.g. a reply
21412159
*/
21422160
struct message_ref {
2161+
/**
2162+
* @brief Message reference type, set to 1 to forward a message
2163+
*/
2164+
message_ref_type type{mrt_default};
21432165
/**
21442166
* @brief ID of the originating message.
21452167
*/
@@ -2162,10 +2184,15 @@ struct DPP_EXPORT message : public managed, json_interface<message> {
21622184
bool fail_if_not_exists;
21632185
} message_reference;
21642186

2187+
/**
2188+
* @brief Message snapshots for a forwarded message
2189+
*/
2190+
message_snapshot<message> message_snapshots;
2191+
21652192
/**
21662193
* @brief Reference to an interaction
21672194
*/
2168-
struct message_interaction_struct{
2195+
struct message_interaction_struct {
21692196
/**
21702197
* @brief ID of the interaction.
21712198
*/
@@ -2342,9 +2369,10 @@ struct DPP_EXPORT message : public managed, json_interface<message> {
23422369
* @param _guild_id guild id to reply to (optional)
23432370
* @param _channel_id channel id to reply to (optional)
23442371
* @param fail_if_not_exists true if the message send should fail if these values are invalid (optional)
2372+
* @param type Type of reference
23452373
* @return message& reference to self
23462374
*/
2347-
message& set_reference(snowflake _message_id, snowflake _guild_id = 0, snowflake _channel_id = 0, bool fail_if_not_exists = false);
2375+
message& set_reference(snowflake _message_id, snowflake _guild_id = 0, snowflake _channel_id = 0, bool fail_if_not_exists = false, message_ref_type type = mrt_default);
23482376

23492377
/**
23502378
* @brief Set the allowed mentions object for pings on the message

src/dpp/message.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -677,11 +677,12 @@ message::message(class cluster* o) : message() {
677677
owner = o;
678678
}
679679

680-
message& message::set_reference(snowflake _message_id, snowflake _guild_id, snowflake _channel_id, bool fail_if_not_exists) {
680+
message& message::set_reference(snowflake _message_id, snowflake _guild_id, snowflake _channel_id, bool fail_if_not_exists, message_ref_type type) {
681681
message_reference.channel_id = _channel_id;
682682
message_reference.guild_id = _guild_id;
683683
message_reference.message_id = _message_id;
684684
message_reference.fail_if_not_exists = fail_if_not_exists;
685+
message_reference.type = type;
685686
return *this;
686687
}
687688

@@ -1119,6 +1120,7 @@ json message::to_json(bool with_id, bool is_interaction_response) const {
11191120
/* Populate message reference */
11201121
if (message_reference.channel_id || message_reference.guild_id || message_reference.message_id) {
11211122
j["message_reference"] = json::object();
1123+
j["message_reference"]["type"] = static_cast<uint32_t>(message_reference.type);
11221124
if (message_reference.channel_id) {
11231125
j["message_reference"]["channel_id"] = std::to_string(message_reference.channel_id);
11241126
}
@@ -1408,10 +1410,17 @@ message& message::fill_from_json(json* d, cache_policy_t cp) {
14081410
}
14091411
if (d->find("message_reference") != d->end()) {
14101412
json& mr = (*d)["message_reference"];
1413+
message_reference.type = static_cast<message_ref_type>(int8_not_null(&mr, "type"));
14111414
message_reference.channel_id = snowflake_not_null(&mr, "channel_id");
14121415
message_reference.guild_id = snowflake_not_null(&mr, "guild_id");
14131416
message_reference.message_id = snowflake_not_null(&mr, "message_id");
14141417
message_reference.fail_if_not_exists = bool_not_null(&mr, "fail_if_not_exists");
1418+
1419+
if (message_reference.type == mrt_forward) {
1420+
for (auto& e : (*d)["message_snapshots"]) {
1421+
message_snapshots.messages.emplace_back(message().fill_from_json(&(e["message"]), cp));
1422+
}
1423+
}
14151424
}
14161425
if (auto it = d->find("poll"); it != d->end()) {
14171426
from_json(*it, attached_poll.emplace());

0 commit comments

Comments
 (0)