| @@ -1,13 +1,11 @@ | |||||
| using System; | using System; | ||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.Diagnostics; | |||||
| using System.Linq; | using System.Linq; | ||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| using Model = Discord.API.Channel; | using Model = Discord.API.Channel; | ||||
| namespace Discord.Rest | namespace Discord.Rest | ||||
| { | { | ||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||||
| public abstract class RestChannel : RestEntity<ulong>, IChannel, IUpdateable | public abstract class RestChannel : RestEntity<ulong>, IChannel, IUpdateable | ||||
| { | { | ||||
| internal RestChannel(BaseDiscordClient discord, ulong id) | internal RestChannel(BaseDiscordClient discord, ulong id) | ||||
| @@ -76,7 +76,6 @@ namespace Discord.Rest | |||||
| public override string ToString() => $"@{Recipient}"; | public override string ToString() => $"@{Recipient}"; | ||||
| private string DebuggerDisplay => $"@{Recipient} ({Id}, DM)"; | private string DebuggerDisplay => $"@{Recipient} ({Id}, DM)"; | ||||
| //IDMChannel | //IDMChannel | ||||
| IUser IDMChannel.Recipient => Recipient; | IUser IDMChannel.Recipient => Recipient; | ||||
| @@ -86,6 +86,9 @@ namespace Discord.Rest | |||||
| public IDisposable EnterTypingState() | public IDisposable EnterTypingState() | ||||
| => ChannelHelper.EnterTypingState(this, Discord); | => ChannelHelper.EnterTypingState(this, Discord); | ||||
| public override string ToString() => Name; | |||||
| private string DebuggerDisplay => $"{Name} ({Id}, Group)"; | |||||
| //ISocketPrivateChannel | //ISocketPrivateChannel | ||||
| IReadOnlyCollection<RestUser> IRestPrivateChannel.Recipients => Recipients; | IReadOnlyCollection<RestUser> IRestPrivateChannel.Recipients => Recipients; | ||||
| @@ -2,14 +2,12 @@ | |||||
| 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.Linq; | using System.Linq; | ||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| using Model = Discord.API.Channel; | using Model = Discord.API.Channel; | ||||
| namespace Discord.Rest | namespace Discord.Rest | ||||
| { | { | ||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||||
| public abstract class RestGuildChannel : RestChannel, IGuildChannel, IUpdateable | public abstract class RestGuildChannel : RestChannel, IGuildChannel, IUpdateable | ||||
| { | { | ||||
| private ImmutableArray<Overwrite> _overwrites; | private ImmutableArray<Overwrite> _overwrites; | ||||
| @@ -117,7 +115,9 @@ namespace Discord.Rest | |||||
| => await ChannelHelper.GetInvitesAsync(this, Discord); | => await ChannelHelper.GetInvitesAsync(this, Discord); | ||||
| public async Task<RestInviteMetadata> CreateInviteAsync(int? maxAge = 3600, int? maxUses = null, bool isTemporary = true) | public async Task<RestInviteMetadata> CreateInviteAsync(int? maxAge = 3600, int? maxUses = null, bool isTemporary = true) | ||||
| => await ChannelHelper.CreateInviteAsync(this, Discord, maxAge, maxUses, isTemporary); | => await ChannelHelper.CreateInviteAsync(this, Discord, maxAge, maxUses, isTemporary); | ||||
| public override string ToString() => Name; | |||||
| //IGuildChannel | //IGuildChannel | ||||
| async Task<IReadOnlyCollection<IInviteMetadata>> IGuildChannel.GetInvitesAsync() | async Task<IReadOnlyCollection<IInviteMetadata>> IGuildChannel.GetInvitesAsync() | ||||
| => await GetInvitesAsync(); | => await GetInvitesAsync(); | ||||
| @@ -1,7 +1,6 @@ | |||||
| using Discord.API.Rest; | using Discord.API.Rest; | ||||
| using System; | using System; | ||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.Collections.Immutable; | |||||
| using System.Diagnostics; | using System.Diagnostics; | ||||
| using System.IO; | using System.IO; | ||||
| using System.Linq; | using System.Linq; | ||||
| @@ -67,6 +66,8 @@ namespace Discord.Rest | |||||
| public IDisposable EnterTypingState() | public IDisposable EnterTypingState() | ||||
| => ChannelHelper.EnterTypingState(this, Discord); | => ChannelHelper.EnterTypingState(this, Discord); | ||||
| private string DebuggerDisplay => $"{Name} ({Id}, Text)"; | |||||
| //IGuildChannel | //IGuildChannel | ||||
| async Task<IGuildUser> IGuildChannel.GetUserAsync(ulong id, CacheMode mode) | async Task<IGuildUser> IGuildChannel.GetUserAsync(ulong id, CacheMode mode) | ||||
| { | { | ||||
| @@ -2,7 +2,6 @@ | |||||
| using Discord.Audio; | using Discord.Audio; | ||||
| using System; | using System; | ||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.Collections.Immutable; | |||||
| using System.Diagnostics; | using System.Diagnostics; | ||||
| using System.Linq; | using System.Linq; | ||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| @@ -37,6 +36,8 @@ namespace Discord.Rest | |||||
| public Task ModifyAsync(Action<ModifyVoiceChannelParams> func) | public Task ModifyAsync(Action<ModifyVoiceChannelParams> func) | ||||
| => ChannelHelper.ModifyAsync(this, Discord, func); | => ChannelHelper.ModifyAsync(this, Discord, func); | ||||
| private string DebuggerDisplay => $"{Name} ({Id}, Voice)"; | |||||
| //IVoiceChannel | //IVoiceChannel | ||||
| Task<IAudioClient> IVoiceChannel.ConnectAsync() { throw new NotSupportedException(); } | Task<IAudioClient> IVoiceChannel.ConnectAsync() { throw new NotSupportedException(); } | ||||
| @@ -22,6 +22,7 @@ namespace Discord.Rest | |||||
| public override string ToString() => User.ToString(); | public override string ToString() => User.ToString(); | ||||
| private string DebuggerDisplay => $"{User}: {Reason}"; | private string DebuggerDisplay => $"{User}: {Reason}"; | ||||
| //IBan | |||||
| IUser IBan.User => User; | IUser IBan.User => User; | ||||
| } | } | ||||
| } | } | ||||
| @@ -171,6 +171,9 @@ namespace Discord.Rest | |||||
| public Task<int> PruneUsersAsync(int days = 30, bool simulate = false) | public Task<int> PruneUsersAsync(int days = 30, bool simulate = false) | ||||
| => GuildHelper.PruneUsersAsync(this, Discord, days, simulate); | => GuildHelper.PruneUsersAsync(this, Discord, days, simulate); | ||||
| public override string ToString() => Name; | |||||
| private string DebuggerDisplay => $"{Name} ({Id})"; | |||||
| //IGuild | //IGuild | ||||
| bool IGuild.Available => Available; | bool IGuild.Available => Available; | ||||
| IAudioClient IGuild.AudioClient => null; | IAudioClient IGuild.AudioClient => null; | ||||
| @@ -4,7 +4,6 @@ using Model = Discord.API.InviteMetadata; | |||||
| namespace Discord.Rest | namespace Discord.Rest | ||||
| { | { | ||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||||
| public class RestInviteMetadata : RestInvite, IInviteMetadata | public class RestInviteMetadata : RestInvite, IInviteMetadata | ||||
| { | { | ||||
| private long _createdAtTicks; | private long _createdAtTicks; | ||||
| @@ -1,8 +1,9 @@ | |||||
| using Model = Discord.API.Attachment; | |||||
| using System.Diagnostics; | |||||
| using Model = Discord.API.Attachment; | |||||
| namespace Discord | namespace Discord | ||||
| { | { | ||||
| //TODO: Rename to Attachment? | |||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||||
| public class RestAttachment : IAttachment | public class RestAttachment : IAttachment | ||||
| { | { | ||||
| public ulong Id { get; } | public ulong Id { get; } | ||||
| @@ -29,5 +30,8 @@ namespace Discord | |||||
| model.Height.IsSpecified ? model.Height.Value : (int?)null, | model.Height.IsSpecified ? model.Height.Value : (int?)null, | ||||
| model.Width.IsSpecified ? model.Width.Value : (int?)null); | model.Width.IsSpecified ? model.Width.Value : (int?)null); | ||||
| } | } | ||||
| public override string ToString() => Filename; | |||||
| private string DebuggerDisplay => $"{Filename} ({Size} bytes)"; | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,7 +1,9 @@ | |||||
| using Model = Discord.API.Embed; | |||||
| using System.Diagnostics; | |||||
| using Model = Discord.API.Embed; | |||||
| namespace Discord | namespace Discord | ||||
| { | { | ||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||||
| public class RestEmbed : IEmbed | public class RestEmbed : IEmbed | ||||
| { | { | ||||
| public string Description { get; } | public string Description { get; } | ||||
| @@ -26,5 +28,8 @@ namespace Discord | |||||
| model.Provider.IsSpecified ? EmbedProvider.Create(model.Provider.Value) : (EmbedProvider?)null, | model.Provider.IsSpecified ? EmbedProvider.Create(model.Provider.Value) : (EmbedProvider?)null, | ||||
| model.Thumbnail.IsSpecified ? EmbedThumbnail.Create(model.Thumbnail.Value) : (EmbedThumbnail?)null); | model.Thumbnail.IsSpecified ? EmbedThumbnail.Create(model.Thumbnail.Value) : (EmbedThumbnail?)null); | ||||
| } | } | ||||
| public override string ToString() => Title; | |||||
| private string DebuggerDisplay => $"{Title} ({Type})"; | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,13 +1,11 @@ | |||||
| 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.Threading.Tasks; | using System.Threading.Tasks; | ||||
| using Model = Discord.API.Message; | using Model = Discord.API.Message; | ||||
| namespace Discord.Rest | namespace Discord.Rest | ||||
| { | { | ||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||||
| public abstract class RestMessage : RestEntity<ulong>, IMessage, IUpdateable | public abstract class RestMessage : RestEntity<ulong>, IMessage, IUpdateable | ||||
| { | { | ||||
| private long _timestampTicks; | private long _timestampTicks; | ||||
| @@ -56,6 +54,8 @@ namespace Discord.Rest | |||||
| Update(model); | Update(model); | ||||
| } | } | ||||
| public override string ToString() => Content; | |||||
| MessageType IMessage.Type => MessageType.Default; | MessageType IMessage.Type => MessageType.Default; | ||||
| } | } | ||||
| } | } | ||||
| @@ -24,5 +24,7 @@ namespace Discord.Rest | |||||
| Type = model.Type; | Type = model.Type; | ||||
| } | } | ||||
| private string DebuggerDisplay => $"{Author}: {Content} ({Id}, {Type})"; | |||||
| } | } | ||||
| } | } | ||||
| @@ -130,5 +130,7 @@ namespace Discord.Rest | |||||
| text = MentionsHelper.ResolveEveryoneMentions(text, everyoneHandling); | text = MentionsHelper.ResolveEveryoneMentions(text, everyoneHandling); | ||||
| return text; | return text; | ||||
| } | } | ||||
| private string DebuggerDisplay => $"{Author}: {Content} ({Id}{(Attachments.Count > 0 ? $", {Attachments.Count} Attachments" : "")}"; | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,9 +1,11 @@ | |||||
| using System; | using System; | ||||
| using System.Diagnostics; | |||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| using Model = Discord.API.Application; | using Model = Discord.API.Application; | ||||
| namespace Discord.Rest | namespace Discord.Rest | ||||
| { | { | ||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||||
| public class RestApplication : RestEntity<ulong>, IApplication | public class RestApplication : RestEntity<ulong>, IApplication | ||||
| { | { | ||||
| protected string _iconId; | protected string _iconId; | ||||
| @@ -27,7 +29,6 @@ namespace Discord.Rest | |||||
| entity.Update(model); | entity.Update(model); | ||||
| return entity; | return entity; | ||||
| } | } | ||||
| internal void Update(Model model) | internal void Update(Model model) | ||||
| { | { | ||||
| Description = model.Description; | Description = model.Description; | ||||
| @@ -45,5 +46,8 @@ namespace Discord.Rest | |||||
| throw new InvalidOperationException("Unable to update this object from a different application token."); | throw new InvalidOperationException("Unable to update this object from a different application token."); | ||||
| Update(response); | Update(response); | ||||
| } | } | ||||
| public override string ToString() => Name; | |||||
| private string DebuggerDisplay => $"{Name} ({Id})"; | |||||
| } | } | ||||
| } | } | ||||
| @@ -46,6 +46,9 @@ namespace Discord.Rest | |||||
| public Task DeleteAsync() | public Task DeleteAsync() | ||||
| => RoleHelper.DeleteAsync(this, Discord); | => RoleHelper.DeleteAsync(this, Discord); | ||||
| public override string ToString() => Name; | |||||
| private string DebuggerDisplay => $"{Name} ({Id})"; | |||||
| //IRole | //IRole | ||||
| IGuild IRole.Guild => Guild; | IGuild IRole.Guild => Guild; | ||||
| } | } | ||||
| @@ -30,6 +30,6 @@ namespace Discord | |||||
| } | } | ||||
| public override string ToString() => Name; | public override string ToString() => Name; | ||||
| private string DebuggerDisplay => $"{Name} ({Id}, Type = {Type}{(IsRevoked ? ", Revoked" : "")})"; | |||||
| private string DebuggerDisplay => $"{Name} ({Id}, {Type}{(IsRevoked ? ", Revoked" : "")})"; | |||||
| } | } | ||||
| } | } | ||||
| @@ -46,6 +46,10 @@ namespace Discord.Rest | |||||
| public Task<RestDMChannel> CreateDMChannelAsync() | public Task<RestDMChannel> CreateDMChannelAsync() | ||||
| => UserHelper.CreateDMChannelAsync(this, Discord); | => UserHelper.CreateDMChannelAsync(this, Discord); | ||||
| public override string ToString() => $"{Username}#{Discriminator}"; | |||||
| internal string DebuggerDisplay => $"{Username}#{Discriminator} (Id{(IsBot ? ", Bot" : "")})"; | |||||
| //IUser | |||||
| Task<IDMChannel> IUser.GetDMChannelAsync(CacheMode mode) | Task<IDMChannel> IUser.GetDMChannelAsync(CacheMode mode) | ||||
| => Task.FromResult<IDMChannel>(null); | => Task.FromResult<IDMChannel>(null); | ||||
| async Task<IDMChannel> IUser.CreateDMChannelAsync() | async Task<IDMChannel> IUser.CreateDMChannelAsync() | ||||
| @@ -6,7 +6,6 @@ using Model = Discord.API.Message; | |||||
| namespace Discord.WebSocket | namespace Discord.WebSocket | ||||
| { | { | ||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||||
| public abstract class SocketMessage : SocketEntity<ulong>, IMessage | public abstract class SocketMessage : SocketEntity<ulong>, IMessage | ||||
| { | { | ||||
| private long _timestampTicks; | private long _timestampTicks; | ||||
| @@ -49,7 +48,8 @@ namespace Discord.WebSocket | |||||
| if (model.Content.IsSpecified) | if (model.Content.IsSpecified) | ||||
| Content = model.Content.Value; | Content = model.Content.Value; | ||||
| } | } | ||||
| public override string ToString() => Content; | |||||
| internal SocketMessage Clone() => MemberwiseClone() as SocketMessage; | internal SocketMessage Clone() => MemberwiseClone() as SocketMessage; | ||||
| //IMessage | //IMessage | ||||
| @@ -1,7 +1,9 @@ | |||||
| using Model = Discord.API.Message; | |||||
| using System.Diagnostics; | |||||
| using Model = Discord.API.Message; | |||||
| namespace Discord.WebSocket | namespace Discord.WebSocket | ||||
| { | { | ||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||||
| internal class SocketSystemMessage : SocketMessage, ISystemMessage | internal class SocketSystemMessage : SocketMessage, ISystemMessage | ||||
| { | { | ||||
| public MessageType Type { get; private set; } | public MessageType Type { get; private set; } | ||||
| @@ -22,8 +24,7 @@ namespace Discord.WebSocket | |||||
| Type = model.Type; | Type = model.Type; | ||||
| } | } | ||||
| public override string ToString() => Content; | |||||
| private string DebuggerDisplay => $"{Author}: {Content} ({Id}, {Type})"; | private string DebuggerDisplay => $"{Author}: {Content} ({Id}, {Type})"; | ||||
| internal new SocketSystemMessage Clone() => MemberwiseClone() as SocketSystemMessage; | internal new SocketSystemMessage Clone() => MemberwiseClone() as SocketSystemMessage; | ||||
| } | } | ||||
| @@ -3,11 +3,13 @@ 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.Threading.Tasks; | using System.Threading.Tasks; | ||||
| using Model = Discord.API.Message; | using Model = Discord.API.Message; | ||||
| namespace Discord.WebSocket | namespace Discord.WebSocket | ||||
| { | { | ||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||||
| public class SocketUserMessage : SocketMessage, IUserMessage | public class SocketUserMessage : SocketMessage, IUserMessage | ||||
| { | { | ||||
| private bool _isMentioningEveryone, _isTTS, _isPinned; | private bool _isMentioningEveryone, _isTTS, _isPinned; | ||||
| @@ -131,7 +133,6 @@ namespace Discord.WebSocket | |||||
| return text; | return text; | ||||
| } | } | ||||
| public override string ToString() => Content; | |||||
| private string DebuggerDisplay => $"{Author}: {Content} ({Id}{(Attachments.Count > 0 ? $", {Attachments.Count} Attachments" : "")}"; | private string DebuggerDisplay => $"{Author}: {Content} ({Id}{(Attachments.Count > 0 ? $", {Attachments.Count} Attachments" : "")}"; | ||||
| internal new SocketUserMessage Clone() => MemberwiseClone() as SocketUserMessage; | internal new SocketUserMessage Clone() => MemberwiseClone() as SocketUserMessage; | ||||
| } | } | ||||
| @@ -1,7 +1,9 @@ | |||||
| using Model = Discord.API.User; | |||||
| using System.Diagnostics; | |||||
| using Model = Discord.API.User; | |||||
| namespace Discord.WebSocket | namespace Discord.WebSocket | ||||
| { | { | ||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||||
| internal class SocketGlobalUser : SocketUser | internal class SocketGlobalUser : SocketUser | ||||
| { | { | ||||
| public override bool IsBot { get; internal set; } | public override bool IsBot { get; internal set; } | ||||
| @@ -3,12 +3,14 @@ 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.Threading.Tasks; | using System.Threading.Tasks; | ||||
| using Model = Discord.API.GuildMember; | using Model = Discord.API.GuildMember; | ||||
| using PresenceModel = Discord.API.Presence; | using PresenceModel = Discord.API.Presence; | ||||
| namespace Discord.WebSocket | namespace Discord.WebSocket | ||||
| { | { | ||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||||
| public class SocketGuildUser : SocketUser, IGuildUser | public class SocketGuildUser : SocketUser, IGuildUser | ||||
| { | { | ||||
| private long? _joinedAtTicks; | private long? _joinedAtTicks; | ||||
| @@ -1,8 +1,10 @@ | |||||
| using Model = Discord.API.Presence; | |||||
| using System.Diagnostics; | |||||
| using Model = Discord.API.Presence; | |||||
| namespace Discord.WebSocket | namespace Discord.WebSocket | ||||
| { | { | ||||
| //TODO: C#7 Candidate for record type | //TODO: C#7 Candidate for record type | ||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||||
| public struct SocketPresence : IPresence | public struct SocketPresence : IPresence | ||||
| { | { | ||||
| public Game? Game { get; } | public Game? Game { get; } | ||||
| @@ -18,6 +20,9 @@ namespace Discord.WebSocket | |||||
| return new SocketPresence(model.Game != null ? Discord.Game.Create(model.Game) : (Game?)null, model.Status); | return new SocketPresence(model.Game != null ? Discord.Game.Create(model.Game) : (Game?)null, model.Status); | ||||
| } | } | ||||
| public override string ToString() => Status.ToString(); | |||||
| internal string DebuggerDisplay => $"{Status}{(Game != null ? $", {Game.Value.Name} ({Game.Value.StreamType})" : "")}"; | |||||
| internal SocketPresence Clone() => this; | internal SocketPresence Clone() => this; | ||||
| } | } | ||||
| } | } | ||||
| @@ -1,11 +1,13 @@ | |||||
| using Discord.API.Rest; | using Discord.API.Rest; | ||||
| using Discord.Rest; | using Discord.Rest; | ||||
| using System; | using System; | ||||
| using System.Diagnostics; | |||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| using Model = Discord.API.User; | using Model = Discord.API.User; | ||||
| namespace Discord.WebSocket | namespace Discord.WebSocket | ||||
| { | { | ||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||||
| public class SocketSelfUser : SocketUser, ISelfUser | public class SocketSelfUser : SocketUser, ISelfUser | ||||
| { | { | ||||
| public string Email { get; private set; } | public string Email { get; private set; } | ||||
| @@ -1,9 +1,11 @@ | |||||
| using System; | using System; | ||||
| using System.Diagnostics; | |||||
| using Model = Discord.API.User; | using Model = Discord.API.User; | ||||
| using PresenceModel = Discord.API.Presence; | using PresenceModel = Discord.API.Presence; | ||||
| namespace Discord.WebSocket | namespace Discord.WebSocket | ||||
| { | { | ||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||||
| public class SocketSimpleUser : SocketUser | public class SocketSimpleUser : SocketUser | ||||
| { | { | ||||
| public override bool IsBot { get; internal set; } | public override bool IsBot { get; internal set; } | ||||
| @@ -44,7 +44,7 @@ namespace Discord.WebSocket | |||||
| => UserHelper.CreateDMChannelAsync(this, Discord); | => UserHelper.CreateDMChannelAsync(this, Discord); | ||||
| public override string ToString() => $"{Username}#{Discriminator}"; | public override string ToString() => $"{Username}#{Discriminator}"; | ||||
| private string DebuggerDisplay => $"{Username}#{Discriminator} (Id{(IsBot ? ", Bot" : "")})"; | |||||
| internal string DebuggerDisplay => $"{Username}#{Discriminator} (Id{(IsBot ? ", Bot" : "")})"; | |||||
| internal SocketUser Clone() => MemberwiseClone() as SocketUser; | internal SocketUser Clone() => MemberwiseClone() as SocketUser; | ||||
| //IUser | //IUser | ||||
| @@ -1,15 +1,17 @@ | |||||
| using System; | using System; | ||||
| using System.Diagnostics; | |||||
| using Model = Discord.API.VoiceState; | using Model = Discord.API.VoiceState; | ||||
| namespace Discord.WebSocket | namespace Discord.WebSocket | ||||
| { | { | ||||
| //TODO: C#7 Candidate for record type | //TODO: C#7 Candidate for record type | ||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||||
| public struct SocketVoiceState : IVoiceState | public struct SocketVoiceState : IVoiceState | ||||
| { | { | ||||
| [Flags] | [Flags] | ||||
| private enum Flags : byte | private enum Flags : byte | ||||
| { | { | ||||
| None = 0x00, | |||||
| Normal = 0x00, | |||||
| Suppressed = 0x01, | Suppressed = 0x01, | ||||
| Muted = 0x02, | Muted = 0x02, | ||||
| Deafened = 0x04, | Deafened = 0x04, | ||||
| @@ -33,7 +35,7 @@ namespace Discord.WebSocket | |||||
| VoiceChannel = voiceChannel; | VoiceChannel = voiceChannel; | ||||
| VoiceSessionId = sessionId; | VoiceSessionId = sessionId; | ||||
| Flags voiceStates = Flags.None; | |||||
| Flags voiceStates = Flags.Normal; | |||||
| if (isSelfMuted) | if (isSelfMuted) | ||||
| voiceStates |= Flags.SelfMuted; | voiceStates |= Flags.SelfMuted; | ||||
| if (isSelfDeafened) | if (isSelfDeafened) | ||||
| @@ -47,6 +49,8 @@ namespace Discord.WebSocket | |||||
| return new SocketVoiceState(voiceChannel, model.SessionId, model.SelfMute, model.SelfDeaf, model.Suppress); | return new SocketVoiceState(voiceChannel, model.SessionId, model.SelfMute, model.SelfDeaf, model.Suppress); | ||||
| } | } | ||||
| public override string ToString() => VoiceChannel?.Name ?? "Unknown"; | |||||
| internal string DebuggerDisplay => $"{VoiceChannel?.Name ?? "Unknown"} ({_voiceStates})"; | |||||
| internal SocketVoiceState Clone() => this; | internal SocketVoiceState Clone() => this; | ||||
| IVoiceChannel IVoiceState.VoiceChannel => VoiceChannel; | IVoiceChannel IVoiceState.VoiceChannel => VoiceChannel; | ||||