Skip to content

Commit 21195a8

Browse files
authored
[Feature] Add MessageCallData (#2934)
1 parent 35b102a commit 21195a8

File tree

6 files changed

+58
-0
lines changed

6 files changed

+58
-0
lines changed

src/Discord.Net.Core/Entities/Messages/IMessage.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,11 @@ public interface IMessage : ISnowflakeEntity, IDeletable
226226
/// </returns>
227227
MessageRoleSubscriptionData RoleSubscriptionData { get; }
228228

229+
/// <summary>
230+
/// Gets the call data of the message.
231+
/// </summary>
232+
MessageCallData? CallData { get; }
233+
229234
/// <summary>
230235
/// Adds a reaction to this message.
231236
/// </summary>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using System;
2+
3+
namespace Discord;
4+
5+
/// <summary>
6+
/// Represents the call data of a message.
7+
/// </summary>
8+
public readonly struct MessageCallData
9+
{
10+
/// <summary>
11+
/// Gets the participants of the call.
12+
/// </summary>
13+
public readonly ulong[] Participants;
14+
15+
/// <summary>
16+
/// Gets the timestamp when the call ended. This is <see langword="null"/> if the call is still ongoing.
17+
/// </summary>
18+
public readonly DateTimeOffset? EndedTimestamp;
19+
20+
internal MessageCallData(ulong[] participants, DateTimeOffset? endedTimestamp)
21+
{
22+
Participants = participants;
23+
EndedTimestamp = endedTimestamp;
24+
}
25+
}

src/Discord.Net.Rest/API/Common/Message.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,4 +104,7 @@ internal class Message
104104

105105
[JsonProperty("poll")]
106106
public Optional<Poll> Poll { get; set; }
107+
108+
[JsonProperty("call")]
109+
public Optional<MessageCallData> Call { get; set; }
107110
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
4+
namespace Discord.API;
5+
6+
internal class MessageCallData
7+
{
8+
[JsonProperty("ended_timestamp")]
9+
public Optional<DateTimeOffset> EndedTimestamp { get; set; }
10+
11+
[JsonProperty("participants")]
12+
public ulong[] Participants { get; set; }
13+
}

src/Discord.Net.Rest/Entities/Messages/RestMessage.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ public abstract class RestMessage : RestEntity<ulong>, IMessage, IUpdateable
9393
/// <inheritdoc />
9494
public MessageRoleSubscriptionData RoleSubscriptionData { get; private set; }
9595

96+
/// <inheritdoc />
97+
public MessageCallData? CallData { get; private set; }
98+
9699
/// <inheritdoc cref="IMessage.Components"/>
97100
public IReadOnlyCollection<ActionRowComponent> Components { get; private set; }
98101
/// <summary>
@@ -272,6 +275,9 @@ internal virtual void Update(Model model)
272275

273276
if (model.Thread.IsSpecified)
274277
Thread = RestThreadChannel.Create(Discord, new RestGuild(Discord, model.Thread.Value.GuildId.Value), model.Thread.Value);
278+
279+
if (model.Call.IsSpecified)
280+
CallData = new MessageCallData(model.Call.Value.Participants, model.Call.Value.EndedTimestamp.ToNullable());
275281
}
276282
/// <inheritdoc />
277283
public async Task UpdateAsync(RequestOptions options = null)

src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ public abstract class SocketMessage : SocketEntity<ulong>, IMessage
8787
/// <inheritdoc />
8888
IThreadChannel IMessage.Thread => Thread;
8989

90+
/// <inheritdoc />
91+
public MessageCallData? CallData { get; private set; }
92+
9093
/// <summary>
9194
/// Returns all attachments included in this message.
9295
/// </summary>
@@ -299,6 +302,9 @@ internal virtual void Update(ClientState state, Model model)
299302
SocketGuild guild = (Channel as SocketGuildChannel)?.Guild;
300303
Thread = guild?.AddOrUpdateChannel(state, model.Thread.Value) as SocketThreadChannel;
301304
}
305+
306+
if (model.Call.IsSpecified)
307+
CallData = new MessageCallData(model.Call.Value.Participants, model.Call.Value.EndedTimestamp.ToNullable());
302308
}
303309

304310
/// <inheritdoc />

0 commit comments

Comments
 (0)