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()); } ///