@@ -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)"> | ||||
@@ -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(); | |||||
} | } | ||||
} | } |
@@ -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; } | |||||
} | |||||
} |
@@ -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. | ||||
@@ -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) | ||||
@@ -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()); | ||||
@@ -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; | |||||
} | } | ||||