Add IsInvitable and CreatedAt to threads (#2153)
* Add IsInvitable and CreatedAt to threads * Update src/Discord.Net.Core/Entities/Channels/IThreadChannel.cs Co-Authored-By: Jared L <48422312+lhjt@users.noreply.github.com> Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com>
This commit is contained in:
@@ -48,6 +48,23 @@ namespace Discord
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
int MessageCount { get; }
|
int MessageCount { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets whether non-moderators can add other non-moderators to a thread.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// This property is only available on private threads.
|
||||||
|
/// </remarks>
|
||||||
|
bool? IsInvitable { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets when the thread was created.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// This property is only populated for threads created after 2022-01-09, hence the default date of this
|
||||||
|
/// property will be that date.
|
||||||
|
/// </remarks>
|
||||||
|
new DateTimeOffset CreatedAt { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Joins the current thread.
|
/// Joins the current thread.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -16,5 +16,11 @@ namespace Discord.API
|
|||||||
|
|
||||||
[JsonProperty("locked")]
|
[JsonProperty("locked")]
|
||||||
public Optional<bool> Locked { get; set; }
|
public Optional<bool> Locked { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("invitable")]
|
||||||
|
public Optional<bool> Invitable { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("create_timestamp")]
|
||||||
|
public Optional<DateTimeOffset> CreatedAt { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace Discord.Rest
|
|||||||
{
|
{
|
||||||
#region RestChannel
|
#region RestChannel
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);
|
public virtual DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);
|
||||||
|
|
||||||
internal RestChannel(BaseDiscordClient discord, ulong id)
|
internal RestChannel(BaseDiscordClient discord, ulong id)
|
||||||
: base(discord, id)
|
: base(discord, id)
|
||||||
|
|||||||
@@ -34,17 +34,26 @@ namespace Discord.Rest
|
|||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public int MessageCount { get; private set; }
|
public int MessageCount { get; private set; }
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public bool? IsInvitable { get; private set; }
|
||||||
|
|
||||||
|
/// <inheritdoc cref="IThreadChannel.CreatedAt"/>
|
||||||
|
public override DateTimeOffset CreatedAt { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the parent text channel id.
|
/// Gets the parent text channel id.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ulong ParentChannelId { get; private set; }
|
public ulong ParentChannelId { get; private set; }
|
||||||
|
|
||||||
internal RestThreadChannel(BaseDiscordClient discord, IGuild guild, ulong id)
|
internal RestThreadChannel(BaseDiscordClient discord, IGuild guild, ulong id, DateTimeOffset? createdAt)
|
||||||
: base(discord, guild, id) { }
|
: base(discord, guild, id)
|
||||||
|
{
|
||||||
|
CreatedAt = createdAt ?? new DateTimeOffset(2022, 1, 9, 0, 0, 0, TimeSpan.Zero);
|
||||||
|
}
|
||||||
|
|
||||||
internal new static RestThreadChannel Create(BaseDiscordClient discord, IGuild guild, Model model)
|
internal new static RestThreadChannel Create(BaseDiscordClient discord, IGuild guild, Model model)
|
||||||
{
|
{
|
||||||
var entity = new RestThreadChannel(discord, guild, model.Id);
|
var entity = new RestThreadChannel(discord, guild, model.Id, model.ThreadMetadata.GetValueOrDefault()?.CreatedAt.GetValueOrDefault());
|
||||||
entity.Update(model);
|
entity.Update(model);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
@@ -57,6 +66,7 @@ namespace Discord.Rest
|
|||||||
|
|
||||||
if (model.ThreadMetadata.IsSpecified)
|
if (model.ThreadMetadata.IsSpecified)
|
||||||
{
|
{
|
||||||
|
IsInvitable = model.ThreadMetadata.Value.Invitable.ToNullable();
|
||||||
IsArchived = model.ThreadMetadata.Value.Archived;
|
IsArchived = model.ThreadMetadata.Value.Archived;
|
||||||
AutoArchiveDuration = model.ThreadMetadata.Value.AutoArchiveDuration;
|
AutoArchiveDuration = model.ThreadMetadata.Value.AutoArchiveDuration;
|
||||||
ArchiveTimestamp = model.ThreadMetadata.Value.ArchiveTimestamp;
|
ArchiveTimestamp = model.ThreadMetadata.Value.ArchiveTimestamp;
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace Discord.WebSocket
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets when the channel is created.
|
/// Gets when the channel is created.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);
|
public virtual DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a collection of users from the WebSocket cache.
|
/// Gets a collection of users from the WebSocket cache.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ namespace Discord.WebSocket
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the parent channel this thread resides in.
|
/// Gets the parent channel this thread resides in.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public SocketTextChannel ParentChannel { get; private set; }
|
public SocketGuildChannel ParentChannel { get; private set; }
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public int MessageCount { get; private set; }
|
public int MessageCount { get; private set; }
|
||||||
@@ -64,6 +64,12 @@ namespace Discord.WebSocket
|
|||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public bool IsLocked { get; private set; }
|
public bool IsLocked { get; private set; }
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public bool? IsInvitable { get; private set; }
|
||||||
|
|
||||||
|
/// <inheritdoc cref="IThreadChannel.CreatedAt"/>
|
||||||
|
public override DateTimeOffset CreatedAt { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a collection of cached users within this thread.
|
/// Gets a collection of cached users within this thread.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -78,17 +84,19 @@ namespace Discord.WebSocket
|
|||||||
|
|
||||||
private readonly object _downloadLock = new object();
|
private readonly object _downloadLock = new object();
|
||||||
|
|
||||||
internal SocketThreadChannel(DiscordSocketClient discord, SocketGuild guild, ulong id, SocketTextChannel parent)
|
internal SocketThreadChannel(DiscordSocketClient discord, SocketGuild guild, ulong id, SocketGuildChannel parent,
|
||||||
|
DateTimeOffset? createdAt)
|
||||||
: base(discord, id, guild)
|
: base(discord, id, guild)
|
||||||
{
|
{
|
||||||
ParentChannel = parent;
|
ParentChannel = parent;
|
||||||
_members = new ConcurrentDictionary<ulong, SocketThreadUser>();
|
_members = new ConcurrentDictionary<ulong, SocketThreadUser>();
|
||||||
|
CreatedAt = createdAt ?? new DateTimeOffset(2022, 1, 9, 0, 0, 0, TimeSpan.Zero);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal new static SocketThreadChannel Create(SocketGuild guild, ClientState state, Model model)
|
internal new static SocketThreadChannel Create(SocketGuild guild, ClientState state, Model model)
|
||||||
{
|
{
|
||||||
var parent = (SocketTextChannel)guild.GetChannel(model.CategoryId.Value);
|
var parent = guild.GetChannel(model.CategoryId.Value);
|
||||||
var entity = new SocketThreadChannel(guild.Discord, guild, model.Id, parent);
|
var entity = new SocketThreadChannel(guild.Discord, guild, model.Id, parent, model.ThreadMetadata.GetValueOrDefault()?.CreatedAt.ToNullable());
|
||||||
entity.Update(state, model);
|
entity.Update(state, model);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
@@ -103,6 +111,7 @@ namespace Discord.WebSocket
|
|||||||
|
|
||||||
if (model.ThreadMetadata.IsSpecified)
|
if (model.ThreadMetadata.IsSpecified)
|
||||||
{
|
{
|
||||||
|
IsInvitable = model.ThreadMetadata.Value.Invitable.ToNullable();
|
||||||
IsArchived = model.ThreadMetadata.Value.Archived;
|
IsArchived = model.ThreadMetadata.Value.Archived;
|
||||||
ArchiveTimestamp = model.ThreadMetadata.Value.ArchiveTimestamp;
|
ArchiveTimestamp = model.ThreadMetadata.Value.ArchiveTimestamp;
|
||||||
AutoArchiveDuration = model.ThreadMetadata.Value.AutoArchiveDuration;
|
AutoArchiveDuration = model.ThreadMetadata.Value.AutoArchiveDuration;
|
||||||
|
|||||||
Reference in New Issue
Block a user