@@ -1987,6 +1987,11 @@ | |||
Represents a thread channel inside of a guild. | |||
</summary> | |||
</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"> | |||
<summary> | |||
<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. | |||
</summary> | |||
</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"> | |||
<summary> | |||
Represents a generic voice channel in a guild. | |||
@@ -4107,6 +4124,11 @@ | |||
A <see cref="T:Discord.IUser"/> or <see cref="T:Discord.IRole"/>. | |||
</summary> | |||
</member> | |||
<member name="F:Discord.ApplicationCommandOptionType.Number"> | |||
<summary> | |||
A <see cref="T:System.Double"/>. | |||
</summary> | |||
</member> | |||
<member name="T:Discord.ApplicationCommandProperties"> | |||
<summary> | |||
Provides properties that are used to modify a <see cref="T:Discord.IApplicationCommand" /> with the specified changes. | |||
@@ -4502,7 +4524,8 @@ | |||
</member> | |||
<member name="M:Discord.ComponentBuilder.WithButton(System.String,System.String,Discord.ButtonStyle,Discord.IEmote,System.String,System.Boolean,System.Int32)"> | |||
<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> | |||
<param name="label">The label text for the 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"/>. | |||
</summary> | |||
</member> | |||
<member name="M:Discord.ButtonBuilder.CreateLinkButton(System.String,System.String)"> | |||
<member name="M:Discord.ButtonBuilder.CreateLinkButton(System.String,System.String,Discord.IEmote)"> | |||
<summary> | |||
Creates a button with the <see cref="F:Discord.ButtonStyle.Link"/> style. | |||
</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="emote">The emote for this link button</param> | |||
<returns>A builder with the newly created button.</returns> | |||
</member> | |||
<member name="M:Discord.ButtonBuilder.CreateDangerButton(System.String,System.String)"> | |||
<member name="M:Discord.ButtonBuilder.CreateDangerButton(System.String,System.String,Discord.IEmote)"> | |||
<summary> | |||
Creates a button with the <see cref="F:Discord.ButtonStyle.Danger"/> style. | |||
</summary> | |||
<param name="label">The label 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> | |||
</member> | |||
<member name="M:Discord.ButtonBuilder.CreatePrimaryButton(System.String,System.String)"> | |||
<member name="M:Discord.ButtonBuilder.CreatePrimaryButton(System.String,System.String,Discord.IEmote)"> | |||
<summary> | |||
Creates a button with the <see cref="F:Discord.ButtonStyle.Primary"/> style. | |||
</summary> | |||
<param name="label">The label 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> | |||
</member> | |||
<member name="M:Discord.ButtonBuilder.CreateSecondaryButton(System.String,System.String)"> | |||
<member name="M:Discord.ButtonBuilder.CreateSecondaryButton(System.String,System.String,Discord.IEmote)"> | |||
<summary> | |||
Creates a button with the <see cref="F:Discord.ButtonStyle.Secondary"/> style. | |||
</summary> | |||
<param name="label">The label 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> | |||
</member> | |||
<member name="M:Discord.ButtonBuilder.CreateSuccessButton(System.String,System.String)"> | |||
<member name="M:Discord.ButtonBuilder.CreateSuccessButton(System.String,System.String,Discord.IEmote)"> | |||
<summary> | |||
Creates a button with the <see cref="F:Discord.ButtonStyle.Success"/> style. | |||
</summary> | |||
<param name="label">The label 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> | |||
</member> | |||
<member name="M:Discord.ButtonBuilder.WithLabel(System.String)"> | |||
@@ -11,6 +11,11 @@ namespace Discord | |||
/// </summary> | |||
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> | |||
/// <see langword="true"/> if the current thread is archived, otherwise <see langword="false"/>. | |||
/// </summary> | |||
@@ -40,5 +45,17 @@ namespace Discord | |||
/// An approximate count of messages in a thread, stops counting at 50. | |||
/// </summary> | |||
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> | |||
</remarks> | |||
</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"> | |||
<inheritdoc /> | |||
</member> | |||
@@ -2154,6 +2169,11 @@ | |||
<member name="P:Discord.WebSocket.SocketTextChannel.Users"> | |||
<inheritdoc /> | |||
</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)"> | |||
<inheritdoc /> | |||
</member> | |||
@@ -2360,9 +2380,19 @@ | |||
Represents a thread channel inside of a guild. | |||
</summary> | |||
</member> | |||
<member name="P:Discord.WebSocket.SocketThreadChannel.ParentChannel"> | |||
<member name="P:Discord.WebSocket.SocketThreadChannel.Joined"> | |||
<inheritdoc/> | |||
</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"> | |||
<inheritdoc/> | |||
</member> | |||
@@ -2848,6 +2878,14 @@ | |||
A read-only collection of category channels found within this guild. | |||
</returns> | |||
</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"> | |||
<summary> | |||
Gets the current logged-in user. | |||
@@ -3431,10 +3469,11 @@ | |||
</member> | |||
<member name="M:Discord.WebSocket.SocketMessageComponent.UpdateAsync(System.Action{Discord.MessageProperties},Discord.RequestOptions)"> | |||
<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> | |||
<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> | |||
<returns>A task that represents the asynchronous operation of updating the message.</returns> | |||
</member> | |||
<member name="M:Discord.WebSocket.SocketMessageComponent.FollowupAsync(System.String,Discord.Embed[],System.Boolean,System.Boolean,Discord.AllowedMentions,Discord.RequestOptions,Discord.MessageComponent)"> | |||
<inheritdoc/> | |||
@@ -3689,6 +3728,14 @@ | |||
<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> | |||
</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)"> | |||
<summary> | |||
Acknowledges this interaction. | |||
@@ -4488,6 +4535,156 @@ | |||
<member name="M:Discord.WebSocket.SocketSelfUser.ModifyAsync(System.Action{Discord.SelfUserProperties},Discord.RequestOptions)"> | |||
<inheritdoc /> | |||
</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"> | |||
<summary> | |||
Represents a WebSocket-based user that is yet to be recognized by the client. | |||
@@ -1975,48 +1975,62 @@ namespace Discord.WebSocket | |||
// Threads | |||
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; | |||
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; | |||
@@ -2071,8 +2085,20 @@ namespace Discord.WebSocket | |||
} | |||
break; | |||
case "THREAD_MEMBER_UPDATE": | |||
{ | |||
await _gatewayLogger.DebugAsync("Received Dispatch (THREAD_MEMBER_UPDATE)").ConfigureAwait(false); | |||
var p = payload; | |||
} | |||
break; | |||
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; | |||
//Ignored (User only) | |||
@@ -66,9 +66,9 @@ namespace Discord.WebSocket | |||
internal override void Update(ClientState state, Model model) | |||
{ | |||
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); | |||
for (int i = 0; i < overwrites.Length; i++) | |||
newOverwrites.Add(overwrites[i].ToEntity()); | |||
@@ -2,19 +2,26 @@ using Discord.Rest; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Collections.Immutable; | |||
using System.Diagnostics; | |||
using System.IO; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
using Model = Discord.API.Channel; | |||
using ThreadMember = Discord.API.ThreadMember; | |||
namespace Discord.WebSocket | |||
{ | |||
/// <summary> | |||
/// Represents a thread channel inside of a guild. | |||
/// </summary> | |||
[DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||
public class SocketThreadChannel : SocketGuildChannel, IThreadChannel, ISocketMessageChannel | |||
{ | |||
/// <inheritdoc/> | |||
public bool Joined { get; private set; } | |||
/// <summary> | |||
/// <see langword="true"/> if this thread is private, otherwise <see langword="false"/> | |||
/// </summary> | |||
@@ -65,6 +72,8 @@ namespace Discord.WebSocket | |||
private readonly MessageCache _messages; | |||
private string DebuggerDisplay => $"{Name} ({Id}, Thread)"; | |||
internal SocketThreadChannel(DiscordSocketClient discord, SocketGuild guild, ulong id, SocketTextChannel parent) | |||
: base(discord, id, guild) | |||
{ | |||
@@ -97,6 +106,11 @@ namespace Discord.WebSocket | |||
} | |||
} | |||
internal void Update(ClientState state, ThreadMember self) | |||
{ | |||
} | |||
/// <inheritdoc /> | |||
public virtual Task SyncPermissionsAsync(RequestOptions options = null) | |||
=> ChannelHelper.SyncPermissionsAsync(this, Discord, options); | |||
@@ -253,10 +267,10 @@ namespace Discord.WebSocket | |||
public Task GetUsersAsync() | |||
{ | |||
return Task.CompletedTask; | |||
} | |||
private string DebuggerDisplay => $"{Name} ({Id}, Thread)"; | |||
internal new SocketThreadChannel Clone() => MemberwiseClone() as SocketThreadChannel; | |||
//ITextChannel | |||
@@ -325,22 +339,22 @@ namespace Discord.WebSocket | |||
public Task JoinAsync() | |||
{ | |||
return Task.CompletedTask; | |||
} | |||
public Task LeaveAsync() | |||
{ | |||
return Task.CompletedTask; | |||
} | |||
public Task AddThreadMember(IGuildUser user) | |||
{ | |||
return Task.CompletedTask; | |||
} | |||
public Task RemoveThreadMember(IGuildUser user) | |||
{ | |||
return Task.CompletedTask; | |||
} | |||