From 21195a8a937edec7d51c62769f656d3de61eb64e Mon Sep 17 00:00:00 2001
From: Mihail Gribkov <61027276+Misha-133@users.noreply.github.com>
Date: Fri, 14 Jun 2024 11:23:34 +0300
Subject: [PATCH] [Feature] Add MessageCallData (#2934)
---
.../Entities/Messages/IMessage.cs | 5 ++++
.../Entities/Messages/MessageCallData.cs | 25 +++++++++++++++++++
src/Discord.Net.Rest/API/Common/Message.cs | 3 +++
.../API/Common/MessageCallData.cs | 13 ++++++++++
.../Entities/Messages/RestMessage.cs | 6 +++++
.../Entities/Messages/SocketMessage.cs | 6 +++++
6 files changed, 58 insertions(+)
create mode 100644 src/Discord.Net.Core/Entities/Messages/MessageCallData.cs
create mode 100644 src/Discord.Net.Rest/API/Common/MessageCallData.cs
diff --git a/src/Discord.Net.Core/Entities/Messages/IMessage.cs b/src/Discord.Net.Core/Entities/Messages/IMessage.cs
index 7043fecd..37f98744 100644
--- a/src/Discord.Net.Core/Entities/Messages/IMessage.cs
+++ b/src/Discord.Net.Core/Entities/Messages/IMessage.cs
@@ -226,6 +226,11 @@ namespace Discord
///
MessageRoleSubscriptionData RoleSubscriptionData { get; }
+ ///
+ /// Gets the call data of the message.
+ ///
+ MessageCallData? CallData { get; }
+
///
/// Adds a reaction to this message.
///
diff --git a/src/Discord.Net.Core/Entities/Messages/MessageCallData.cs b/src/Discord.Net.Core/Entities/Messages/MessageCallData.cs
new file mode 100644
index 00000000..afa53c41
--- /dev/null
+++ b/src/Discord.Net.Core/Entities/Messages/MessageCallData.cs
@@ -0,0 +1,25 @@
+using System;
+
+namespace Discord;
+
+///
+/// Represents the call data of a message.
+///
+public readonly struct MessageCallData
+{
+ ///
+ /// Gets the participants of the call.
+ ///
+ public readonly ulong[] Participants;
+
+ ///
+ /// Gets the timestamp when the call ended. This is if the call is still ongoing.
+ ///
+ public readonly DateTimeOffset? EndedTimestamp;
+
+ internal MessageCallData(ulong[] participants, DateTimeOffset? endedTimestamp)
+ {
+ Participants = participants;
+ EndedTimestamp = endedTimestamp;
+ }
+}
diff --git a/src/Discord.Net.Rest/API/Common/Message.cs b/src/Discord.Net.Rest/API/Common/Message.cs
index 14ec1afe..8bd46ae6 100644
--- a/src/Discord.Net.Rest/API/Common/Message.cs
+++ b/src/Discord.Net.Rest/API/Common/Message.cs
@@ -104,4 +104,7 @@ internal class Message
[JsonProperty("poll")]
public Optional Poll { get; set; }
+
+ [JsonProperty("call")]
+ public Optional Call { get; set; }
}
diff --git a/src/Discord.Net.Rest/API/Common/MessageCallData.cs b/src/Discord.Net.Rest/API/Common/MessageCallData.cs
new file mode 100644
index 00000000..958fd7f8
--- /dev/null
+++ b/src/Discord.Net.Rest/API/Common/MessageCallData.cs
@@ -0,0 +1,13 @@
+using Newtonsoft.Json;
+using System;
+
+namespace Discord.API;
+
+internal class MessageCallData
+{
+ [JsonProperty("ended_timestamp")]
+ public Optional EndedTimestamp { get; set; }
+
+ [JsonProperty("participants")]
+ public ulong[] Participants { get; set; }
+}
diff --git a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs
index c0da0228..e694ae99 100644
--- a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs
+++ b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs
@@ -93,6 +93,9 @@ namespace Discord.Rest
///
public MessageRoleSubscriptionData RoleSubscriptionData { get; private set; }
+ ///
+ public MessageCallData? CallData { get; private set; }
+
///
public IReadOnlyCollection Components { get; private set; }
///
@@ -272,6 +275,9 @@ namespace Discord.Rest
if (model.Thread.IsSpecified)
Thread = RestThreadChannel.Create(Discord, new RestGuild(Discord, model.Thread.Value.GuildId.Value), model.Thread.Value);
+
+ if (model.Call.IsSpecified)
+ CallData = new MessageCallData(model.Call.Value.Participants, model.Call.Value.EndedTimestamp.ToNullable());
}
///
public async Task UpdateAsync(RequestOptions options = null)
diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs
index a9ada8de..440c5f43 100644
--- a/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs
+++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs
@@ -87,6 +87,9 @@ namespace Discord.WebSocket
///
IThreadChannel IMessage.Thread => Thread;
+ ///
+ public MessageCallData? CallData { get; private set; }
+
///
/// Returns all attachments included in this message.
///
@@ -299,6 +302,9 @@ namespace Discord.WebSocket
SocketGuild guild = (Channel as SocketGuildChannel)?.Guild;
Thread = guild?.AddOrUpdateChannel(state, model.Thread.Value) as SocketThreadChannel;
}
+
+ if (model.Call.IsSpecified)
+ CallData = new MessageCallData(model.Call.Value.Participants, model.Call.Value.EndedTimestamp.ToNullable());
}
///