Browse Source

Threads pt2

pull/1923/head
quin lynch 3 years ago
parent
commit
bd5041ac79
7 changed files with 352 additions and 43 deletions
  1. +35
    -7
      src/Discord.Net.Core/Discord.Net.Core.xml
  2. +17
    -0
      src/Discord.Net.Core/Entities/Channels/IThreadChannel.cs
  3. +27
    -0
      src/Discord.Net.WebSocket/API/Gateway/ThreadMembersUpdate.cs
  4. +199
    -2
      src/Discord.Net.WebSocket/Discord.Net.WebSocket.xml
  5. +52
    -26
      src/Discord.Net.WebSocket/DiscordSocketClient.cs
  6. +2
    -2
      src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs
  7. +20
    -6
      src/Discord.Net.WebSocket/Entities/Channels/SocketThreadChannel.cs

+ 35
- 7
src/Discord.Net.Core/Discord.Net.Core.xml View File

@@ -1987,6 +1987,11 @@
Represents a thread channel inside of a guild. Represents a thread channel inside of a guild.
</summary> </summary>
</member> </member>
<member name="P:Discord.IThreadChannel.Joined">
<summary>
<see langword="true"/> if the current user has joined this thread, otherwise <see langword="false"/>.
</summary>
</member>
<member name="P:Discord.IThreadChannel.Archived"> <member name="P:Discord.IThreadChannel.Archived">
<summary> <summary>
<see langword="true"/> if the current thread is archived, otherwise <see langword="false"/>. <see langword="true"/> if the current thread is archived, otherwise <see langword="false"/>.
@@ -2017,6 +2022,18 @@
An approximate count of messages in a thread, stops counting at 50. An approximate count of messages in a thread, stops counting at 50.
</summary> </summary>
</member> </member>
<member name="M:Discord.IThreadChannel.JoinAsync">
<summary>
Joins the current thread.
</summary>
<returns></returns>
</member>
<member name="M:Discord.IThreadChannel.LeaveAsync">
<summary>
Leaves the current thread.
</summary>
<returns></returns>
</member>
<member name="T:Discord.IVoiceChannel"> <member name="T:Discord.IVoiceChannel">
<summary> <summary>
Represents a generic voice channel in a guild. Represents a generic voice channel in a guild.
@@ -4107,6 +4124,11 @@
A <see cref="T:Discord.IUser"/> or <see cref="T:Discord.IRole"/>. A <see cref="T:Discord.IUser"/> or <see cref="T:Discord.IRole"/>.
</summary> </summary>
</member> </member>
<member name="F:Discord.ApplicationCommandOptionType.Number">
<summary>
A <see cref="T:System.Double"/>.
</summary>
</member>
<member name="T:Discord.ApplicationCommandProperties"> <member name="T:Discord.ApplicationCommandProperties">
<summary> <summary>
Provides properties that are used to modify a <see cref="T:Discord.IApplicationCommand" /> with the specified changes. Provides properties that are used to modify a <see cref="T:Discord.IApplicationCommand" /> with the specified changes.
@@ -4502,7 +4524,8 @@
</member> </member>
<member name="M:Discord.ComponentBuilder.WithButton(System.String,System.String,Discord.ButtonStyle,Discord.IEmote,System.String,System.Boolean,System.Int32)"> <member name="M:Discord.ComponentBuilder.WithButton(System.String,System.String,Discord.ButtonStyle,Discord.IEmote,System.String,System.Boolean,System.Int32)">
<summary> <summary>
Adds a button to the specified row.
Adds a <see cref="T:Discord.ButtonBuilder"/> with specified parameters to the <see cref="T:Discord.ComponentBuilder"/> at the specific row.
If the row cannot accept the component then it will add it to a row that can.
</summary> </summary>
<param name="label">The label text for the newly added button.</param> <param name="label">The label text for the newly added button.</param>
<param name="style">The style of this newly added button.</param> <param name="style">The style of this newly added button.</param>
@@ -4627,44 +4650,49 @@
Creates a new instance of a <see cref="T:Discord.ButtonBuilder"/> from instance of a <see cref="T:Discord.ButtonComponent"/>. Creates a new instance of a <see cref="T:Discord.ButtonBuilder"/> from instance of a <see cref="T:Discord.ButtonComponent"/>.
</summary> </summary>
</member> </member>
<member name="M:Discord.ButtonBuilder.CreateLinkButton(System.String,System.String)">
<member name="M:Discord.ButtonBuilder.CreateLinkButton(System.String,System.String,Discord.IEmote)">
<summary> <summary>
Creates a button with the <see cref="F:Discord.ButtonStyle.Link"/> style. Creates a button with the <see cref="F:Discord.ButtonStyle.Link"/> style.
</summary> </summary>
<param name="label">The label to use on the newly created link button.</param>
<param name="label">The label for this link button.</param>
<param name="url">The url for this link button to go to.</param> <param name="url">The url for this link button to go to.</param>
<param name="emote">The emote for this link button</param>
<returns>A builder with the newly created button.</returns> <returns>A builder with the newly created button.</returns>
</member> </member>
<member name="M:Discord.ButtonBuilder.CreateDangerButton(System.String,System.String)">
<member name="M:Discord.ButtonBuilder.CreateDangerButton(System.String,System.String,Discord.IEmote)">
<summary> <summary>
Creates a button with the <see cref="F:Discord.ButtonStyle.Danger"/> style. Creates a button with the <see cref="F:Discord.ButtonStyle.Danger"/> style.
</summary> </summary>
<param name="label">The label for this danger button.</param> <param name="label">The label for this danger button.</param>
<param name="customId">The custom id for this danger button.</param> <param name="customId">The custom id for this danger button.</param>
<param name="emote">The emote for this danger button</param>
<returns>A builder with the newly created button.</returns> <returns>A builder with the newly created button.</returns>
</member> </member>
<member name="M:Discord.ButtonBuilder.CreatePrimaryButton(System.String,System.String)">
<member name="M:Discord.ButtonBuilder.CreatePrimaryButton(System.String,System.String,Discord.IEmote)">
<summary> <summary>
Creates a button with the <see cref="F:Discord.ButtonStyle.Primary"/> style. Creates a button with the <see cref="F:Discord.ButtonStyle.Primary"/> style.
</summary> </summary>
<param name="label">The label for this primary button.</param> <param name="label">The label for this primary button.</param>
<param name="customId">The custom id for this primary button.</param> <param name="customId">The custom id for this primary button.</param>
<param name="emote">The emote for this primary button</param>
<returns>A builder with the newly created button.</returns> <returns>A builder with the newly created button.</returns>
</member> </member>
<member name="M:Discord.ButtonBuilder.CreateSecondaryButton(System.String,System.String)">
<member name="M:Discord.ButtonBuilder.CreateSecondaryButton(System.String,System.String,Discord.IEmote)">
<summary> <summary>
Creates a button with the <see cref="F:Discord.ButtonStyle.Secondary"/> style. Creates a button with the <see cref="F:Discord.ButtonStyle.Secondary"/> style.
</summary> </summary>
<param name="label">The label for this secondary button.</param> <param name="label">The label for this secondary button.</param>
<param name="customId">The custom id for this secondary button.</param> <param name="customId">The custom id for this secondary button.</param>
<param name="emote">The emote for this secondary button</param>
<returns>A builder with the newly created button.</returns> <returns>A builder with the newly created button.</returns>
</member> </member>
<member name="M:Discord.ButtonBuilder.CreateSuccessButton(System.String,System.String)">
<member name="M:Discord.ButtonBuilder.CreateSuccessButton(System.String,System.String,Discord.IEmote)">
<summary> <summary>
Creates a button with the <see cref="F:Discord.ButtonStyle.Success"/> style. Creates a button with the <see cref="F:Discord.ButtonStyle.Success"/> style.
</summary> </summary>
<param name="label">The label for this success button.</param> <param name="label">The label for this success button.</param>
<param name="customId">The custom id for this success button.</param> <param name="customId">The custom id for this success button.</param>
<param name="emote">The emote for this success button</param>
<returns>A builder with the newly created button.</returns> <returns>A builder with the newly created button.</returns>
</member> </member>
<member name="M:Discord.ButtonBuilder.WithLabel(System.String)"> <member name="M:Discord.ButtonBuilder.WithLabel(System.String)">


+ 17
- 0
src/Discord.Net.Core/Entities/Channels/IThreadChannel.cs View File

@@ -11,6 +11,11 @@ namespace Discord
/// </summary> /// </summary>
public interface IThreadChannel : ITextChannel, IGuildChannel public interface IThreadChannel : ITextChannel, IGuildChannel
{ {
/// <summary>
/// <see langword="true"/> if the current user has joined this thread, otherwise <see langword="false"/>.
/// </summary>
bool Joined { get; }

/// <summary> /// <summary>
/// <see langword="true"/> if the current thread is archived, otherwise <see langword="false"/>. /// <see langword="true"/> if the current thread is archived, otherwise <see langword="false"/>.
/// </summary> /// </summary>
@@ -40,5 +45,17 @@ namespace Discord
/// An approximate count of messages in a thread, stops counting at 50. /// An approximate count of messages in a thread, stops counting at 50.
/// </summary> /// </summary>
int MessageCount { get; } int MessageCount { get; }

/// <summary>
/// Joins the current thread.
/// </summary>
/// <returns></returns>
Task JoinAsync();

/// <summary>
/// Leaves the current thread.
/// </summary>
/// <returns></returns>
Task LeaveAsync();
} }
} }

+ 27
- 0
src/Discord.Net.WebSocket/API/Gateway/ThreadMembersUpdate.cs View File

@@ -0,0 +1,27 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Discord.API.Gateway
{
internal class ThreadMembersUpdated
{
[JsonProperty("id")]
public ulong Id { get; set; }

[JsonProperty("guild_id")]
public ulong GuildId { get; set; }

[JsonProperty("member_count")]
public int MemberCount { get; set; }

[JsonProperty("added_members")]
public Optional<ThreadMember[]> AddedMembers { get; set; }

[JsonProperty("removed_member_ids")]
public Optional<ulong[]> RemovedMemberIds { get; set; }
}
}

+ 199
- 2
src/Discord.Net.WebSocket/Discord.Net.WebSocket.xml View File

@@ -756,6 +756,21 @@
</note> </note>
</remarks> </remarks>
</member> </member>
<member name="E:Discord.WebSocket.BaseSocketClient.ThreadCreated">
<summary>
Fired when a thread is created within a guild.
</summary>
</member>
<member name="E:Discord.WebSocket.BaseSocketClient.ThreadUpdated">
<summary>
Fired when a thread is updated within a guild.
</summary>
</member>
<member name="E:Discord.WebSocket.BaseSocketClient.ThreadDeleted">
<summary>
Fired when a thread is deleted.
</summary>
</member>
<member name="P:Discord.WebSocket.DiscordShardedClient.Latency"> <member name="P:Discord.WebSocket.DiscordShardedClient.Latency">
<inheritdoc /> <inheritdoc />
</member> </member>
@@ -2154,6 +2169,11 @@
<member name="P:Discord.WebSocket.SocketTextChannel.Users"> <member name="P:Discord.WebSocket.SocketTextChannel.Users">
<inheritdoc /> <inheritdoc />
</member> </member>
<member name="P:Discord.WebSocket.SocketTextChannel.Threads">
<summary>
Gets a collection of threads within this text channel.
</summary>
</member>
<member name="M:Discord.WebSocket.SocketTextChannel.ModifyAsync(System.Action{Discord.TextChannelProperties},Discord.RequestOptions)"> <member name="M:Discord.WebSocket.SocketTextChannel.ModifyAsync(System.Action{Discord.TextChannelProperties},Discord.RequestOptions)">
<inheritdoc /> <inheritdoc />
</member> </member>
@@ -2360,9 +2380,19 @@
Represents a thread channel inside of a guild. Represents a thread channel inside of a guild.
</summary> </summary>
</member> </member>
<member name="P:Discord.WebSocket.SocketThreadChannel.ParentChannel">
<member name="P:Discord.WebSocket.SocketThreadChannel.Joined">
<inheritdoc/> <inheritdoc/>
</member> </member>
<member name="P:Discord.WebSocket.SocketThreadChannel.IsPrivateThread">
<summary>
<see langword="true"/> if this thread is private, otherwise <see langword="false"/>
</summary>
</member>
<member name="P:Discord.WebSocket.SocketThreadChannel.ParentChannel">
<summary>
Gets the parent channel this thread resides in.
</summary>
</member>
<member name="P:Discord.WebSocket.SocketThreadChannel.MessageCount"> <member name="P:Discord.WebSocket.SocketThreadChannel.MessageCount">
<inheritdoc/> <inheritdoc/>
</member> </member>
@@ -2848,6 +2878,14 @@
A read-only collection of category channels found within this guild. A read-only collection of category channels found within this guild.
</returns> </returns>
</member> </member>
<member name="P:Discord.WebSocket.SocketGuild.ThreadChannels">
<summary>
Gets a collection of all thread channels in this guild.
</summary>
<returns>
A read-only collection of thread channels found within this guild.
</returns>
</member>
<member name="P:Discord.WebSocket.SocketGuild.CurrentUser"> <member name="P:Discord.WebSocket.SocketGuild.CurrentUser">
<summary> <summary>
Gets the current logged-in user. Gets the current logged-in user.
@@ -3431,10 +3469,11 @@
</member> </member>
<member name="M:Discord.WebSocket.SocketMessageComponent.UpdateAsync(System.Action{Discord.MessageProperties},Discord.RequestOptions)"> <member name="M:Discord.WebSocket.SocketMessageComponent.UpdateAsync(System.Action{Discord.MessageProperties},Discord.RequestOptions)">
<summary> <summary>
Updates the original message of the component on which the interaction was received on.
Updates the message which this component resides in with the type <see cref="F:Discord.InteractionResponseType.UpdateMessage"/>
</summary> </summary>
<param name="func">A delegate containing the properties to modify the message with.</param> <param name="func">A delegate containing the properties to modify the message with.</param>
<param name="options">The request options for this async request.</param> <param name="options">The request options for this async request.</param>
<returns>A task that represents the asynchronous operation of updating the message.</returns>
</member> </member>
<member name="M:Discord.WebSocket.SocketMessageComponent.FollowupAsync(System.String,Discord.Embed[],System.Boolean,System.Boolean,Discord.AllowedMentions,Discord.RequestOptions,Discord.MessageComponent)"> <member name="M:Discord.WebSocket.SocketMessageComponent.FollowupAsync(System.String,Discord.Embed[],System.Boolean,System.Boolean,Discord.AllowedMentions,Discord.RequestOptions,Discord.MessageComponent)">
<inheritdoc/> <inheritdoc/>
@@ -3689,6 +3728,14 @@
<param name="options">The request options for this async request.</param> <param name="options">The request options for this async request.</param>
<returns>A <see cref="T:Discord.Rest.RestInteractionMessage"/> that represents the initial response.</returns> <returns>A <see cref="T:Discord.Rest.RestInteractionMessage"/> that represents the initial response.</returns>
</member> </member>
<member name="M:Discord.WebSocket.SocketInteraction.AcknowledgeAsync(Discord.RequestOptions)">
<summary>
Acknowledges this interaction.
</summary>
<returns>
A task that represents the asynchronous operation of acknowledging the interaction.
</returns>
</member>
<member name="M:Discord.WebSocket.SocketInteraction.DeferAsync(Discord.RequestOptions)"> <member name="M:Discord.WebSocket.SocketInteraction.DeferAsync(Discord.RequestOptions)">
<summary> <summary>
Acknowledges this interaction. Acknowledges this interaction.
@@ -4488,6 +4535,156 @@
<member name="M:Discord.WebSocket.SocketSelfUser.ModifyAsync(System.Action{Discord.SelfUserProperties},Discord.RequestOptions)"> <member name="M:Discord.WebSocket.SocketSelfUser.ModifyAsync(System.Action{Discord.SelfUserProperties},Discord.RequestOptions)">
<inheritdoc /> <inheritdoc />
</member> </member>
<member name="P:Discord.WebSocket.SocketThreadUser.Thread">
<summary>
Gets the <see cref="T:Discord.WebSocket.SocketThreadChannel"/> this user is in.
</summary>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.ThreadJoinedAt">
<summary>
Gets the timestamp for when this user joined this thread.
</summary>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.Guild">
<summary>
Gets the guild this user is in.
</summary>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.JoinedAt">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.Nickname">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.PremiumSince">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.IsPending">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.AvatarId">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.Discriminator">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.DiscriminatorValue">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.IsBot">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.IsWebhook">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.Username">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.PublicFlags">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.CreatedAt">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.Id">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.Mention">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.Status">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.ActiveClients">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.Activities">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.IsDeafened">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.IsMuted">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.IsSelfDeafened">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.IsSelfMuted">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.IsSuppressed">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.VoiceChannel">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.VoiceSessionId">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.IsStreaming">
<inheritdoc/>
</member>
<member name="M:Discord.WebSocket.SocketThreadUser.GetPermissions(Discord.IGuildChannel)">
<inheritdoc/>
</member>
<member name="M:Discord.WebSocket.SocketThreadUser.KickAsync(System.String,Discord.RequestOptions)">
<inheritdoc/>
</member>
<member name="M:Discord.WebSocket.SocketThreadUser.ModifyAsync(System.Action{Discord.GuildUserProperties},Discord.RequestOptions)">
<inheritdoc/>
</member>
<member name="M:Discord.WebSocket.SocketThreadUser.AddRoleAsync(System.UInt64,Discord.RequestOptions)">
<inheritdoc/>
</member>
<member name="M:Discord.WebSocket.SocketThreadUser.AddRoleAsync(Discord.IRole,Discord.RequestOptions)">
<inheritdoc/>
</member>
<member name="M:Discord.WebSocket.SocketThreadUser.AddRolesAsync(System.Collections.Generic.IEnumerable{System.UInt64},Discord.RequestOptions)">
<inheritdoc/>
</member>
<member name="M:Discord.WebSocket.SocketThreadUser.AddRolesAsync(System.Collections.Generic.IEnumerable{Discord.IRole},Discord.RequestOptions)">
<inheritdoc/>
</member>
<member name="M:Discord.WebSocket.SocketThreadUser.RemoveRoleAsync(System.UInt64,Discord.RequestOptions)">
<inheritdoc/>
</member>
<member name="M:Discord.WebSocket.SocketThreadUser.RemoveRoleAsync(Discord.IRole,Discord.RequestOptions)">
<inheritdoc/>
</member>
<member name="M:Discord.WebSocket.SocketThreadUser.RemoveRolesAsync(System.Collections.Generic.IEnumerable{System.UInt64},Discord.RequestOptions)">
<inheritdoc/>
</member>
<member name="M:Discord.WebSocket.SocketThreadUser.RemoveRolesAsync(System.Collections.Generic.IEnumerable{Discord.IRole},Discord.RequestOptions)">
<inheritdoc/>
</member>
<member name="M:Discord.WebSocket.SocketThreadUser.GetAvatarUrl(Discord.ImageFormat,System.UInt16)">
<inheritdoc/>
</member>
<member name="M:Discord.WebSocket.SocketThreadUser.GetDefaultAvatarUrl">
<inheritdoc/>
</member>
<member name="M:Discord.WebSocket.SocketThreadUser.CreateDMChannelAsync(Discord.RequestOptions)">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.Discord#IGuildUser#GuildPermissions">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.Discord#IGuildUser#Guild">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.Discord#IGuildUser#GuildId">
<inheritdoc/>
</member>
<member name="P:Discord.WebSocket.SocketThreadUser.Discord#IGuildUser#RoleIds">
<inheritdoc/>
</member>
<member name="M:Discord.WebSocket.SocketThreadUser.op_Explicit(Discord.WebSocket.SocketThreadUser)~Discord.WebSocket.SocketGuildUser">
<summary>
Gets the guild user of this thread user.
</summary>
<param name="user"></param>
</member>
<member name="T:Discord.WebSocket.SocketUnknownUser"> <member name="T:Discord.WebSocket.SocketUnknownUser">
<summary> <summary>
Represents a WebSocket-based user that is yet to be recognized by the client. Represents a WebSocket-based user that is yet to be recognized by the client.


+ 52
- 26
src/Discord.Net.WebSocket/DiscordSocketClient.cs View File

@@ -1975,48 +1975,62 @@ namespace Discord.WebSocket
// Threads // Threads
case "THREAD_CREATE": case "THREAD_CREATE":
{ {
await _gatewayLogger.DebugAsync("Received Dispatch (THREAD_CREATE)").ConfigureAwait(false);
try
{
await _gatewayLogger.DebugAsync("Received Dispatch (THREAD_CREATE)").ConfigureAwait(false);


var data = (payload as JToken).ToObject<Channel>(_serializer);
var data = (payload as JToken).ToObject<Channel>(_serializer);


var guild = State.GetGuild(data.GuildId.Value);
var guild = State.GetGuild(data.GuildId.Value);


if(guild == null)
{
await UnknownGuildAsync(type, data.GuildId.Value);
return;
}
if (guild == null)
{
await UnknownGuildAsync(type, data.GuildId.Value);
return;
}

var threadChannel = (SocketThreadChannel)guild.AddChannel(this.State, data);


var threadChannel = (SocketThreadChannel)guild.AddChannel(this.State, data);
await TimedInvokeAsync(_threadCreated, nameof(ThreadCreated), threadChannel).ConfigureAwait(false);
}
catch(Exception x)
{


await TimedInvokeAsync(_threadCreated, nameof(ThreadCreated), threadChannel).ConfigureAwait(false);
}
} }


break; break;
case "THREAD_UPDATE": case "THREAD_UPDATE":
{ {
await _gatewayLogger.DebugAsync("Received Dispatch (THREAD_UPDATE)").ConfigureAwait(false);

var data = (payload as JToken).ToObject<API.Channel>(_serializer);
var guild = State.GetGuild(data.GuildId.Value);
if (guild == null)
try
{ {
await UnknownGuildAsync(type, data.GuildId.Value);
return;
}
await _gatewayLogger.DebugAsync("Received Dispatch (THREAD_UPDATE)").ConfigureAwait(false);


var channel = (SocketThreadChannel)guild.GetChannel(data.Id);
var data = (payload as JToken).ToObject<API.Channel>(_serializer);
var guild = State.GetGuild(data.GuildId.Value);
if (guild == null)
{
await UnknownGuildAsync(type, data.GuildId.Value);
return;
}


var before = channel.Clone();
channel.Update(State, data);
var channel = (SocketThreadChannel)guild.GetChannel(data.Id);


if (!(guild?.IsSynced ?? true))
{
await UnsyncedGuildAsync(type, guild.Id).ConfigureAwait(false);
return;
var before = channel.Clone();
channel.Update(State, data);

if (!(guild?.IsSynced ?? true))
{
await UnsyncedGuildAsync(type, guild.Id).ConfigureAwait(false);
return;
}

await TimedInvokeAsync(_threadUpdated, nameof(ThreadUpdated), before, channel).ConfigureAwait(false);
} }
catch(Exception x)
{


await TimedInvokeAsync(_threadUpdated, nameof(ThreadUpdated), before, channel).ConfigureAwait(false);
}


} }
break; break;
@@ -2071,8 +2085,20 @@ namespace Discord.WebSocket
} }
break; break;
case "THREAD_MEMBER_UPDATE": case "THREAD_MEMBER_UPDATE":
{
await _gatewayLogger.DebugAsync("Received Dispatch (THREAD_MEMBER_UPDATE)").ConfigureAwait(false);
var p = payload;
}

break; break;
case "THREAD_MEMBERS_UPDATE": // based on intents case "THREAD_MEMBERS_UPDATE": // based on intents
{
await _gatewayLogger.DebugAsync("Received Dispatch (THREAD_MEMBERS_UPDATE)").ConfigureAwait(false);

var data = (payload as JToken).ToObject<ThreadMembersUpdated>(_serializer);

}

break; break;


//Ignored (User only) //Ignored (User only)


+ 2
- 2
src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs View File

@@ -66,9 +66,9 @@ namespace Discord.WebSocket
internal override void Update(ClientState state, Model model) internal override void Update(ClientState state, Model model)
{ {
Name = model.Name.Value; Name = model.Name.Value;
Position = model.Position.Value;
Position = model.Position.GetValueOrDefault(0);
var overwrites = model.PermissionOverwrites.Value;
var overwrites = model.PermissionOverwrites.GetValueOrDefault(new API.Overwrite[0]);
var newOverwrites = ImmutableArray.CreateBuilder<Overwrite>(overwrites.Length); var newOverwrites = ImmutableArray.CreateBuilder<Overwrite>(overwrites.Length);
for (int i = 0; i < overwrites.Length; i++) for (int i = 0; i < overwrites.Length; i++)
newOverwrites.Add(overwrites[i].ToEntity()); newOverwrites.Add(overwrites[i].ToEntity());


+ 20
- 6
src/Discord.Net.WebSocket/Entities/Channels/SocketThreadChannel.cs View File

@@ -2,19 +2,26 @@ using Discord.Rest;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.Immutable; using System.Collections.Immutable;
using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Model = Discord.API.Channel; using Model = Discord.API.Channel;
using ThreadMember = Discord.API.ThreadMember;


namespace Discord.WebSocket namespace Discord.WebSocket
{ {
/// <summary> /// <summary>
/// Represents a thread channel inside of a guild. /// Represents a thread channel inside of a guild.
/// </summary> /// </summary>
[DebuggerDisplay(@"{DebuggerDisplay,nq}")]
public class SocketThreadChannel : SocketGuildChannel, IThreadChannel, ISocketMessageChannel public class SocketThreadChannel : SocketGuildChannel, IThreadChannel, ISocketMessageChannel
{ {

/// <inheritdoc/>
public bool Joined { get; private set; }

/// <summary> /// <summary>
/// <see langword="true"/> if this thread is private, otherwise <see langword="false"/> /// <see langword="true"/> if this thread is private, otherwise <see langword="false"/>
/// </summary> /// </summary>
@@ -65,6 +72,8 @@ namespace Discord.WebSocket


private readonly MessageCache _messages; private readonly MessageCache _messages;


private string DebuggerDisplay => $"{Name} ({Id}, Thread)";

internal SocketThreadChannel(DiscordSocketClient discord, SocketGuild guild, ulong id, SocketTextChannel parent) internal SocketThreadChannel(DiscordSocketClient discord, SocketGuild guild, ulong id, SocketTextChannel parent)
: base(discord, id, guild) : base(discord, id, guild)
{ {
@@ -97,6 +106,11 @@ namespace Discord.WebSocket
} }
} }


internal void Update(ClientState state, ThreadMember self)
{

}

/// <inheritdoc /> /// <inheritdoc />
public virtual Task SyncPermissionsAsync(RequestOptions options = null) public virtual Task SyncPermissionsAsync(RequestOptions options = null)
=> ChannelHelper.SyncPermissionsAsync(this, Discord, options); => ChannelHelper.SyncPermissionsAsync(this, Discord, options);
@@ -253,10 +267,10 @@ namespace Discord.WebSocket


public Task GetUsersAsync() public Task GetUsersAsync()
{ {
return Task.CompletedTask;
} }


private string DebuggerDisplay => $"{Name} ({Id}, Thread)";
internal new SocketThreadChannel Clone() => MemberwiseClone() as SocketThreadChannel; internal new SocketThreadChannel Clone() => MemberwiseClone() as SocketThreadChannel;


//ITextChannel //ITextChannel
@@ -325,22 +339,22 @@ namespace Discord.WebSocket


public Task JoinAsync() public Task JoinAsync()
{ {
return Task.CompletedTask;
} }


public Task LeaveAsync() public Task LeaveAsync()
{ {
return Task.CompletedTask;
} }


public Task AddThreadMember(IGuildUser user) public Task AddThreadMember(IGuildUser user)
{ {
return Task.CompletedTask;
} }


public Task RemoveThreadMember(IGuildUser user) public Task RemoveThreadMember(IGuildUser user)
{ {
return Task.CompletedTask;
} }






Loading…
Cancel
Save