From 7b68b4a860e021dc05b4716900af52e483a328a1 Mon Sep 17 00:00:00 2001 From: RogueException Date: Sun, 15 May 2016 03:22:40 -0300 Subject: [PATCH] Simplified ToString, added debug strings --- src/Discord.Net/API/Optional.cs | 5 ++- .../Entities/Guilds/IntegrationAccount.cs | 8 +++-- .../Common/Entities/Guilds/VoiceRegion.cs | 7 ++-- .../Common/Entities/Invites/Invite.cs | 5 ++- .../Entities/Permissions/ChannelPermission.cs | 2 +- .../Permissions/ChannelPermissions.cs | 17 ++++----- .../Entities/Permissions/GuildPermission.cs | 2 +- .../Entities/Permissions/GuildPermissions.cs | 22 ++++++------ .../Permissions/OverwritePermissions.cs | 35 ++++++++++++------- .../Common/Entities/Users/Connection.cs | 5 ++- .../Rest/Entities/Channels/DMChannel.cs | 7 ++-- .../Rest/Entities/Channels/GuildChannel.cs | 3 ++ .../Rest/Entities/Channels/TextChannel.cs | 5 +-- .../Rest/Entities/Channels/VoiceChannel.cs | 5 +-- src/Discord.Net/Rest/Entities/Guilds/Guild.cs | 5 ++- .../Rest/Entities/Guilds/GuildEmbed.cs | 5 ++- .../Rest/Entities/Guilds/GuildIntegration.cs | 5 ++- .../Rest/Entities/Guilds/UserGuild.cs | 5 ++- src/Discord.Net/Rest/Entities/Message.cs | 5 ++- src/Discord.Net/Rest/Entities/Role.cs | 7 ++-- src/Discord.Net/Rest/Entities/Users/User.cs | 5 ++- .../WebSocket/Entities/Channels/DMChannel.cs | 7 ++-- .../Entities/Channels/GuildChannel.cs | 3 ++ .../Entities/Channels/TextChannel.cs | 5 +-- .../Entities/Channels/VoiceChannel.cs | 5 +-- .../WebSocket/Entities/Guilds/Guild.cs | 5 ++- .../Entities/Guilds/GuildIntegration.cs | 5 ++- src/Discord.Net/WebSocket/Entities/Message.cs | 5 ++- src/Discord.Net/WebSocket/Entities/Role.cs | 7 ++-- .../WebSocket/Entities/Users/User.cs | 5 ++- 30 files changed, 146 insertions(+), 66 deletions(-) diff --git a/src/Discord.Net/API/Optional.cs b/src/Discord.Net/API/Optional.cs index e76d170e5..b3af5c732 100644 --- a/src/Discord.Net/API/Optional.cs +++ b/src/Discord.Net/API/Optional.cs @@ -1,8 +1,10 @@ using System; +using System.Diagnostics; namespace Discord.API { //Based on https://github.com/dotnet/coreclr/blob/master/src/mscorlib/src/System/Nullable.cs + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public struct Optional : IOptional { private readonly T _value; @@ -40,7 +42,8 @@ namespace Discord.API } public override int GetHashCode() => IsSpecified ? _value.GetHashCode() : 0; - public override string ToString() => IsSpecified ? _value.ToString() : ""; + public override string ToString() => IsSpecified ? _value?.ToString() : null; + private string DebuggerDisplay => IsSpecified ? _value.ToString() : ""; public static implicit operator Optional(T value) => new Optional(value); public static implicit operator T(Optional value) => value.Value; diff --git a/src/Discord.Net/Common/Entities/Guilds/IntegrationAccount.cs b/src/Discord.Net/Common/Entities/Guilds/IntegrationAccount.cs index 7b49d9de7..db0351bb1 100644 --- a/src/Discord.Net/Common/Entities/Guilds/IntegrationAccount.cs +++ b/src/Discord.Net/Common/Entities/Guilds/IntegrationAccount.cs @@ -1,5 +1,8 @@ -namespace Discord +using System.Diagnostics; + +namespace Discord { + [DebuggerDisplay("{DebuggerDisplay,nq}")] public struct IntegrationAccount { /// @@ -8,6 +11,7 @@ /// public string Name { get; private set; } - public override string ToString() => Name ?? Id.ToString(); + public override string ToString() => Name; + private string DebuggerDisplay => $"{Name} ({Id})"; } } diff --git a/src/Discord.Net/Common/Entities/Guilds/VoiceRegion.cs b/src/Discord.Net/Common/Entities/Guilds/VoiceRegion.cs index 1c3ee7f20..f58da92aa 100644 --- a/src/Discord.Net/Common/Entities/Guilds/VoiceRegion.cs +++ b/src/Discord.Net/Common/Entities/Guilds/VoiceRegion.cs @@ -1,7 +1,9 @@ -using Model = Discord.API.VoiceRegion; +using System.Diagnostics; +using Model = Discord.API.VoiceRegion; namespace Discord.Rest { + [DebuggerDisplay("{DebuggerDisplay,nq}")] public class VoiceRegion : IVoiceRegion { /// @@ -27,6 +29,7 @@ namespace Discord.Rest SamplePort = model.SamplePort; } - public override string ToString() => $"{Name ?? Id.ToString()}"; + public override string ToString() => Name; + private string DebuggerDisplay => $"{Name} ({Id}{(IsVip ? ", VIP" : "")}{(IsOptimal ? ", Optimal" : "")})"; } } diff --git a/src/Discord.Net/Common/Entities/Invites/Invite.cs b/src/Discord.Net/Common/Entities/Invites/Invite.cs index feae2119e..e18bc9079 100644 --- a/src/Discord.Net/Common/Entities/Invites/Invite.cs +++ b/src/Discord.Net/Common/Entities/Invites/Invite.cs @@ -1,8 +1,10 @@ -using System.Threading.Tasks; +using System.Diagnostics; +using System.Threading.Tasks; using Model = Discord.API.Invite; namespace Discord { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class Invite : IInvite { /// @@ -56,6 +58,7 @@ namespace Discord /// public override string ToString() => XkcdUrl ?? Url; + private string DebuggerDisplay => $"{XkcdUrl ?? Url} ({GuildName} / {ChannelName})"; string IEntity.Id => Code; } diff --git a/src/Discord.Net/Common/Entities/Permissions/ChannelPermission.cs b/src/Discord.Net/Common/Entities/Permissions/ChannelPermission.cs index df8b88480..f3592b010 100644 --- a/src/Discord.Net/Common/Entities/Permissions/ChannelPermission.cs +++ b/src/Discord.Net/Common/Entities/Permissions/ChannelPermission.cs @@ -1,6 +1,6 @@ namespace Discord { - internal enum ChannelPermission : byte + public enum ChannelPermission : byte { //General CreateInstantInvite = 0, diff --git a/src/Discord.Net/Common/Entities/Permissions/ChannelPermissions.cs b/src/Discord.Net/Common/Entities/Permissions/ChannelPermissions.cs index c7a430e4a..bc78704a8 100644 --- a/src/Discord.Net/Common/Entities/Permissions/ChannelPermissions.cs +++ b/src/Discord.Net/Common/Entities/Permissions/ChannelPermissions.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; +using System.Diagnostics; namespace Discord { + [DebuggerDisplay("{DebuggerDisplay,nq}")] public struct ChannelPermissions { private static ChannelPermissions _allDM { get; } = new ChannelPermissions(0b000100_000000_0011111111_0000011001); @@ -117,20 +119,19 @@ namespace Discord embedLinks, attachFiles, readMessageHistory, mentionEveryone, connect, speak, muteMembers, deafenMembers, moveMembers, useVoiceActivation, managePermissions); - /// - public override string ToString() + public List ToList() { - var perms = new List(); + var perms = new List(); ulong x = 1; for (byte i = 0; i < Permissions.MaxBits; i++, x <<= 1) { if ((RawValue & x) != 0) - { - if (Enum.IsDefined(typeof(ChannelPermission), i)) - perms.Add($"{(ChannelPermission)i}"); - } + perms.Add((ChannelPermission)i); } - return string.Join(", ", perms); + return perms; } + /// + public override string ToString() => RawValue.ToString(); + private string DebuggerDisplay => $"{RawValue} ({string.Join(", ", ToList())})"; } } diff --git a/src/Discord.Net/Common/Entities/Permissions/GuildPermission.cs b/src/Discord.Net/Common/Entities/Permissions/GuildPermission.cs index 497b78726..3ba869cc5 100644 --- a/src/Discord.Net/Common/Entities/Permissions/GuildPermission.cs +++ b/src/Discord.Net/Common/Entities/Permissions/GuildPermission.cs @@ -1,6 +1,6 @@ namespace Discord { - internal enum GuildPermission : byte + public enum GuildPermission : byte { //General CreateInstantInvite = 0, diff --git a/src/Discord.Net/Common/Entities/Permissions/GuildPermissions.cs b/src/Discord.Net/Common/Entities/Permissions/GuildPermissions.cs index 2ab0e6ddf..e5abb712f 100644 --- a/src/Discord.Net/Common/Entities/Permissions/GuildPermissions.cs +++ b/src/Discord.Net/Common/Entities/Permissions/GuildPermissions.cs @@ -1,7 +1,10 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Diagnostics; namespace Discord { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public struct GuildPermissions { /// Gets a blank GuildPermissions that grants no permissions. @@ -125,21 +128,20 @@ namespace Discord => new GuildPermissions(RawValue, createInstantInvite, manageRoles, kickMembers, banMembers, manageChannels, manageGuild, readMessages, sendMessages, sendTTSMessages, manageMessages, embedLinks, attachFiles, mentionEveryone, connect, speak, muteMembers, deafenMembers, moveMembers, useVoiceActivation, changeNickname, manageNicknames, manageRoles); - - /// - public override string ToString() + + public List ToList() { - var perms = new List(); + var perms = new List(); ulong x = 1; for (byte i = 0; i < Permissions.MaxBits; i++, x <<= 1) { if ((RawValue & x) != 0) - { - if (System.Enum.IsDefined(typeof(GuildPermission), i)) - perms.Add($"{(GuildPermission)i}"); - } + perms.Add((GuildPermission)i); } - return string.Join(", ", perms); + return perms; } + /// + public override string ToString() => RawValue.ToString(); + private string DebuggerDisplay => $"{RawValue} ({string.Join(", ", ToList())})"; } } diff --git a/src/Discord.Net/Common/Entities/Permissions/OverwritePermissions.cs b/src/Discord.Net/Common/Entities/Permissions/OverwritePermissions.cs index 5bfa3785a..7c448522e 100644 --- a/src/Discord.Net/Common/Entities/Permissions/OverwritePermissions.cs +++ b/src/Discord.Net/Common/Entities/Permissions/OverwritePermissions.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; +using System.Diagnostics; namespace Discord { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public struct OverwritePermissions { /// Gets a blank OverwritePermissions that inherits all permissions. @@ -111,25 +113,32 @@ namespace Discord embedLinks, attachFiles, readMessageHistory, mentionEveryone, connect, speak, muteMembers, deafenMembers, moveMembers, useVoiceActivation, managePermissions); - /// - public override string ToString() + public List ToAllowList() { - var perms = new List(); + var perms = new List(); ulong x = 1; for (byte i = 0; i < Permissions.MaxBits; i++, x <<= 1) { if ((AllowValue & x) != 0) - { - if (Enum.IsDefined(typeof(GuildPermission), i)) - perms.Add($"+{(GuildPermission)i}"); - } - else if ((DenyValue & x) != 0) - { - if (Enum.IsDefined(typeof(GuildPermission), i)) - perms.Add($"-{(GuildPermission)i}"); - } + perms.Add((ChannelPermission)i); + } + return perms; + } + public List ToDenyList() + { + var perms = new List(); + ulong x = 1; + for (byte i = 0; i < Permissions.MaxBits; i++, x <<= 1) + { + if ((DenyValue & x) != 0) + perms.Add((ChannelPermission)i); } - return string.Join(", ", perms); + return perms; } + /// + public override string ToString() => $"Allow {AllowValue}, Deny {DenyValue}"; + private string DebuggerDisplay => + $"Allow {AllowValue} ({string.Join(", ", ToAllowList())})\n" + + $"Deny {DenyValue} ({string.Join(", ", ToDenyList())})"; } } diff --git a/src/Discord.Net/Common/Entities/Users/Connection.cs b/src/Discord.Net/Common/Entities/Users/Connection.cs index fc4524e90..c6eb65f2f 100644 --- a/src/Discord.Net/Common/Entities/Users/Connection.cs +++ b/src/Discord.Net/Common/Entities/Users/Connection.cs @@ -1,8 +1,10 @@ using System.Collections.Generic; +using System.Diagnostics; using Model = Discord.API.Connection; namespace Discord.Rest { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class Connection : IConnection { public string Id { get; } @@ -23,6 +25,7 @@ namespace Discord.Rest IntegrationIds = model.Integrations; } - public override string ToString() => $"{Name ?? Id.ToString()} ({Type})"; + public override string ToString() => Name; + private string DebuggerDisplay => $"{Name} ({Id}, Type = {Type}{(IsRevoked ? ", Revoked" : "")})"; } } diff --git a/src/Discord.Net/Rest/Entities/Channels/DMChannel.cs b/src/Discord.Net/Rest/Entities/Channels/DMChannel.cs index 90603d24e..ccda2bbd9 100644 --- a/src/Discord.Net/Rest/Entities/Channels/DMChannel.cs +++ b/src/Discord.Net/Rest/Entities/Channels/DMChannel.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Collections.Immutable; +using System.Diagnostics; using System.IO; using System.Linq; using System.Threading.Tasks; @@ -9,6 +10,7 @@ using Model = Discord.API.Channel; namespace Discord.Rest { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class DMChannel : IDMChannel { /// @@ -121,8 +123,9 @@ namespace Discord.Rest } /// - public override string ToString() => $"@{Recipient} [DM]"; - + public override string ToString() => '@' + Recipient.ToString(); + private string DebuggerDisplay => $"@{Recipient} ({Id}, DM)"; + IDMUser IDMChannel.Recipient => Recipient; IEnumerable IMessageChannel.CachedMessages => Array.Empty(); diff --git a/src/Discord.Net/Rest/Entities/Channels/GuildChannel.cs b/src/Discord.Net/Rest/Entities/Channels/GuildChannel.cs index 7a07679c8..6373bccc7 100644 --- a/src/Discord.Net/Rest/Entities/Channels/GuildChannel.cs +++ b/src/Discord.Net/Rest/Entities/Channels/GuildChannel.cs @@ -148,6 +148,9 @@ namespace Discord.Rest Update(model); } + /// + public override string ToString() => Name; + IGuild IGuildChannel.Guild => Guild; async Task IGuildChannel.CreateInvite(int? maxAge, int? maxUses, bool isTemporary, bool withXkcd) => await CreateInvite(maxAge, maxUses, isTemporary, withXkcd).ConfigureAwait(false); diff --git a/src/Discord.Net/Rest/Entities/Channels/TextChannel.cs b/src/Discord.Net/Rest/Entities/Channels/TextChannel.cs index 5b4eb0d82..9ab247c9a 100644 --- a/src/Discord.Net/Rest/Entities/Channels/TextChannel.cs +++ b/src/Discord.Net/Rest/Entities/Channels/TextChannel.cs @@ -1,6 +1,7 @@ using Discord.API.Rest; using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Linq; using System.Threading.Tasks; @@ -8,6 +9,7 @@ using Model = Discord.API.Channel; namespace Discord.Rest { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class TextChannel : GuildChannel, ITextChannel { /// @@ -103,8 +105,7 @@ namespace Discord.Rest await Discord.BaseClient.TriggerTypingIndicator(Id).ConfigureAwait(false); } - /// - public override string ToString() => $"{base.ToString()} [Text]"; + private string DebuggerDisplay => $"{Name} ({Id}, Text)"; IEnumerable IMessageChannel.CachedMessages => Array.Empty(); diff --git a/src/Discord.Net/Rest/Entities/Channels/VoiceChannel.cs b/src/Discord.Net/Rest/Entities/Channels/VoiceChannel.cs index 8c76f3290..032e5eea1 100644 --- a/src/Discord.Net/Rest/Entities/Channels/VoiceChannel.cs +++ b/src/Discord.Net/Rest/Entities/Channels/VoiceChannel.cs @@ -1,11 +1,13 @@ using Discord.API.Rest; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Threading.Tasks; using Model = Discord.API.Channel; namespace Discord.Rest { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class VoiceChannel : GuildChannel, IVoiceChannel { /// @@ -35,7 +37,6 @@ namespace Discord.Rest public override Task GetUser(ulong id) { throw new NotSupportedException(); } public override Task> GetUsers() { throw new NotSupportedException(); } - /// - public override string ToString() => $"{base.ToString()} [Voice]"; + private string DebuggerDisplay => $"{Name} ({Id}, Voice)"; } } diff --git a/src/Discord.Net/Rest/Entities/Guilds/Guild.cs b/src/Discord.Net/Rest/Entities/Guilds/Guild.cs index 421157b7d..d9015dea7 100644 --- a/src/Discord.Net/Rest/Entities/Guilds/Guild.cs +++ b/src/Discord.Net/Rest/Entities/Guilds/Guild.cs @@ -8,10 +8,12 @@ using System.Threading.Tasks; using Model = Discord.API.Guild; using EmbedModel = Discord.API.GuildEmbed; using RoleModel = Discord.API.Role; +using System.Diagnostics; namespace Discord.Rest { /// Represents a Discord guild (called a server in the official client). + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class Guild : IGuild { private ConcurrentDictionary _roles; @@ -332,7 +334,8 @@ namespace Discord.Rest } } - public override string ToString() => Name ?? Id.ToString(); + public override string ToString() => Name; + private string DebuggerDisplay => $"{Name} ({Id})"; IEnumerable IGuild.Emojis => Emojis; ulong IGuild.EveryoneRoleId => EveryoneRole.Id; diff --git a/src/Discord.Net/Rest/Entities/Guilds/GuildEmbed.cs b/src/Discord.Net/Rest/Entities/Guilds/GuildEmbed.cs index f53c621af..d7f5a3831 100644 --- a/src/Discord.Net/Rest/Entities/Guilds/GuildEmbed.cs +++ b/src/Discord.Net/Rest/Entities/Guilds/GuildEmbed.cs @@ -1,8 +1,10 @@ using System; +using System.Diagnostics; using Model = Discord.API.GuildEmbed; namespace Discord { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class GuildEmbed : IGuildEmbed { /// @@ -26,6 +28,7 @@ namespace Discord IsEnabled = model.Enabled; } - public override string ToString() => $"{Id} ({(IsEnabled ? "Enabled" : "Disabled")})"; + public override string ToString() => Id.ToString(); + private string DebuggerDisplay => $"{Id}{(IsEnabled ? " (Enabled)" : "")}"; } } diff --git a/src/Discord.Net/Rest/Entities/Guilds/GuildIntegration.cs b/src/Discord.Net/Rest/Entities/Guilds/GuildIntegration.cs index 5b2a83a78..2d0152d01 100644 --- a/src/Discord.Net/Rest/Entities/Guilds/GuildIntegration.cs +++ b/src/Discord.Net/Rest/Entities/Guilds/GuildIntegration.cs @@ -1,10 +1,12 @@ using Discord.API.Rest; using System; +using System.Diagnostics; using System.Threading.Tasks; using Model = Discord.API.Integration; namespace Discord.Rest { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class GuildIntegration : IGuildIntegration { /// @@ -77,7 +79,8 @@ namespace Discord.Rest await Discord.BaseClient.SyncGuildIntegration(Guild.Id, Id).ConfigureAwait(false); } - public override string ToString() => $"{Name ?? Id.ToString()} ({(IsEnabled ? "Enabled" : "Disabled")})"; + public override string ToString() => Name; + private string DebuggerDisplay => $"{Name} ({Id}{(IsEnabled ? ", Enabled" : "")})"; IGuild IGuildIntegration.Guild => Guild; IRole IGuildIntegration.Role => Role; diff --git a/src/Discord.Net/Rest/Entities/Guilds/UserGuild.cs b/src/Discord.Net/Rest/Entities/Guilds/UserGuild.cs index cead4e794..367a37cdb 100644 --- a/src/Discord.Net/Rest/Entities/Guilds/UserGuild.cs +++ b/src/Discord.Net/Rest/Entities/Guilds/UserGuild.cs @@ -1,9 +1,11 @@ using System; +using System.Diagnostics; using System.Threading.Tasks; using Model = Discord.API.UserGuild; namespace Discord { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class UserGuild : IUserGuild { private string _iconId; @@ -48,6 +50,7 @@ namespace Discord await Discord.BaseClient.DeleteGuild(Id).ConfigureAwait(false); } - public override string ToString() => Name ?? Id.ToString(); + public override string ToString() => Name; + private string DebuggerDisplay => $"{Name} ({Id}{(IsOwner ? ", Owned" : "")})"; } } diff --git a/src/Discord.Net/Rest/Entities/Message.cs b/src/Discord.Net/Rest/Entities/Message.cs index 3e5dd5012..017074a9f 100644 --- a/src/Discord.Net/Rest/Entities/Message.cs +++ b/src/Discord.Net/Rest/Entities/Message.cs @@ -2,11 +2,13 @@ using System; using System.Collections.Generic; using System.Collections.Immutable; +using System.Diagnostics; using System.Threading.Tasks; using Model = Discord.API.Message; namespace Discord.Rest { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class Message : IMessage { /// @@ -135,7 +137,8 @@ namespace Discord.Rest await Discord.BaseClient.DeleteMessage(Channel.Id, Id).ConfigureAwait(false); } - public override string ToString() => $"{Author.ToString()}: {Text}"; + public override string ToString() => Text; + private string DebuggerDisplay => $"{Author}: {Text}"; IUser IMessage.Author => Author; IReadOnlyList IMessage.Attachments => Attachments; diff --git a/src/Discord.Net/Rest/Entities/Role.cs b/src/Discord.Net/Rest/Entities/Role.cs index b22f3f9ea..465c089e6 100644 --- a/src/Discord.Net/Rest/Entities/Role.cs +++ b/src/Discord.Net/Rest/Entities/Role.cs @@ -1,12 +1,14 @@ using Discord.API.Rest; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using Model = Discord.API.Role; namespace Discord.Rest { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class Role : IRole, IMentionable { /// @@ -66,8 +68,9 @@ namespace Discord.Rest => await Discord.BaseClient.DeleteGuildRole(Guild.Id, Id).ConfigureAwait(false); /// - public override string ToString() => Name ?? Id.ToString(); - + public override string ToString() => Name; + private string DebuggerDisplay => $"{Name} ({Id})"; + ulong IRole.GuildId => Guild.Id; async Task> IRole.GetUsers() diff --git a/src/Discord.Net/Rest/Entities/Users/User.cs b/src/Discord.Net/Rest/Entities/Users/User.cs index 622bb6517..c44e1a0a5 100644 --- a/src/Discord.Net/Rest/Entities/Users/User.cs +++ b/src/Discord.Net/Rest/Entities/Users/User.cs @@ -1,10 +1,12 @@ using Discord.API.Rest; using System; +using System.Diagnostics; using System.Threading.Tasks; using Model = Discord.API.User; namespace Discord.Rest { + [DebuggerDisplay("{DebuggerDisplay,nq}")] public abstract class User : IUser { private string _avatarId; @@ -51,7 +53,8 @@ namespace Discord.Rest return new DMChannel(Discord, model); } - public override string ToString() => $"{Username ?? Id.ToString()}"; + public override string ToString() => $"{Username}#{Discriminator}"; + private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id})"; /// Game? IUser.CurrentGame => null; diff --git a/src/Discord.Net/WebSocket/Entities/Channels/DMChannel.cs b/src/Discord.Net/WebSocket/Entities/Channels/DMChannel.cs index 14deb2c52..c1e1f3474 100644 --- a/src/Discord.Net/WebSocket/Entities/Channels/DMChannel.cs +++ b/src/Discord.Net/WebSocket/Entities/Channels/DMChannel.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Collections.Immutable; +using System.Diagnostics; using System.IO; using System.Linq; using System.Threading.Tasks; @@ -9,6 +10,7 @@ using Model = Discord.API.Channel; namespace Discord.WebSocket { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class DMChannel : IDMChannel { private readonly MessageCache _messages; @@ -114,8 +116,9 @@ namespace Discord.WebSocket } /// - public override string ToString() => $"@{Recipient} [DM]"; - + public override string ToString() => '@' + Recipient.ToString(); + private string DebuggerDisplay => $"@{Recipient} ({Id}, DM)"; + IDMUser IDMChannel.Recipient => Recipient; IEnumerable IMessageChannel.CachedMessages => CachedMessages; diff --git a/src/Discord.Net/WebSocket/Entities/Channels/GuildChannel.cs b/src/Discord.Net/WebSocket/Entities/Channels/GuildChannel.cs index 8a364302a..beb11fc64 100644 --- a/src/Discord.Net/WebSocket/Entities/Channels/GuildChannel.cs +++ b/src/Discord.Net/WebSocket/Entities/Channels/GuildChannel.cs @@ -133,6 +133,9 @@ namespace Discord.WebSocket await Discord.BaseClient.DeleteChannel(Id).ConfigureAwait(false); } + /// + public override string ToString() => Name; + IGuild IGuildChannel.Guild => Guild; async Task IGuildChannel.CreateInvite(int? maxAge, int? maxUses, bool isTemporary, bool withXkcd) => await CreateInvite(maxAge, maxUses, isTemporary, withXkcd).ConfigureAwait(false); diff --git a/src/Discord.Net/WebSocket/Entities/Channels/TextChannel.cs b/src/Discord.Net/WebSocket/Entities/Channels/TextChannel.cs index b9176da28..16801a91a 100644 --- a/src/Discord.Net/WebSocket/Entities/Channels/TextChannel.cs +++ b/src/Discord.Net/WebSocket/Entities/Channels/TextChannel.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Collections.Immutable; +using System.Diagnostics; using System.IO; using System.Linq; using System.Threading.Tasks; @@ -9,6 +10,7 @@ using Model = Discord.API.Channel; namespace Discord.WebSocket { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class TextChannel : GuildChannel, ITextChannel { private readonly MessageCache _messages; @@ -105,8 +107,7 @@ namespace Discord.WebSocket await Discord.BaseClient.TriggerTypingIndicator(Id).ConfigureAwait(false); } - /// - public override string ToString() => $"{base.ToString()} [Text]"; + private string DebuggerDisplay => $"{Name} ({Id}, Text)"; IEnumerable IMessageChannel.CachedMessages => CachedMessages; diff --git a/src/Discord.Net/WebSocket/Entities/Channels/VoiceChannel.cs b/src/Discord.Net/WebSocket/Entities/Channels/VoiceChannel.cs index 40c7ee586..24865c401 100644 --- a/src/Discord.Net/WebSocket/Entities/Channels/VoiceChannel.cs +++ b/src/Discord.Net/WebSocket/Entities/Channels/VoiceChannel.cs @@ -1,12 +1,14 @@ using Discord.API.Rest; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using Model = Discord.API.Channel; namespace Discord.WebSocket { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class VoiceChannel : GuildChannel, IVoiceChannel { /// @@ -43,7 +45,6 @@ namespace Discord.WebSocket return null; } - /// - public override string ToString() => $"{base.ToString()} [Voice]"; + private string DebuggerDisplay => $"{Name} ({Id}, Voice)"; } } diff --git a/src/Discord.Net/WebSocket/Entities/Guilds/Guild.cs b/src/Discord.Net/WebSocket/Entities/Guilds/Guild.cs index 519a4b869..c5dfb4b5b 100644 --- a/src/Discord.Net/WebSocket/Entities/Guilds/Guild.cs +++ b/src/Discord.Net/WebSocket/Entities/Guilds/Guild.cs @@ -8,10 +8,12 @@ using System.Threading.Tasks; using Model = Discord.API.Guild; using EmbedModel = Discord.API.GuildEmbed; using RoleModel = Discord.API.Role; +using System.Diagnostics; namespace Discord.WebSocket { /// Represents a Discord guild (called a server in the official client). + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class Guild : IGuild { private ConcurrentDictionary _roles; @@ -325,7 +327,8 @@ namespace Discord.WebSocket } } - public override string ToString() => Name ?? Id.ToString(); + public override string ToString() => Name; + private string DebuggerDisplay => $"{Name} ({Id})"; IEnumerable IGuild.Emojis => Emojis; ulong IGuild.EveryoneRoleId => EveryoneRole.Id; diff --git a/src/Discord.Net/WebSocket/Entities/Guilds/GuildIntegration.cs b/src/Discord.Net/WebSocket/Entities/Guilds/GuildIntegration.cs index 14c8a4911..9d93ee37a 100644 --- a/src/Discord.Net/WebSocket/Entities/Guilds/GuildIntegration.cs +++ b/src/Discord.Net/WebSocket/Entities/Guilds/GuildIntegration.cs @@ -1,10 +1,12 @@ using Discord.API.Rest; using System; +using System.Diagnostics; using System.Threading.Tasks; using Model = Discord.API.Integration; namespace Discord.WebSocket { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class GuildIntegration : IGuildIntegration { /// @@ -75,7 +77,8 @@ namespace Discord.WebSocket await Discord.BaseClient.SyncGuildIntegration(Guild.Id, Id).ConfigureAwait(false); } - public override string ToString() => $"{Name ?? Id.ToString()} ({(IsEnabled ? "Enabled" : "Disabled")})"; + public override string ToString() => Name; + private string DebuggerDisplay => $"{Name} ({Id}{(IsEnabled ? ", Enabled" : "")})"; IGuild IGuildIntegration.Guild => Guild; IRole IGuildIntegration.Role => Role; diff --git a/src/Discord.Net/WebSocket/Entities/Message.cs b/src/Discord.Net/WebSocket/Entities/Message.cs index a68146a44..b5e659862 100644 --- a/src/Discord.Net/WebSocket/Entities/Message.cs +++ b/src/Discord.Net/WebSocket/Entities/Message.cs @@ -2,11 +2,13 @@ using System; using System.Collections.Generic; using System.Collections.Immutable; +using System.Diagnostics; using System.Threading.Tasks; using Model = Discord.API.Message; namespace Discord.WebSocket { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class Message : IMessage { /// @@ -133,7 +135,8 @@ namespace Discord.WebSocket await Discord.BaseClient.DeleteMessage(Channel.Id, Id).ConfigureAwait(false); } - public override string ToString() => $"{Author.ToString()}: {Text}"; + public override string ToString() => Text; + private string DebuggerDisplay => $"{Author}: {Text}"; IUser IMessage.Author => Author; IReadOnlyList IMessage.Attachments => Attachments; diff --git a/src/Discord.Net/WebSocket/Entities/Role.cs b/src/Discord.Net/WebSocket/Entities/Role.cs index 6844cd41f..04ecec344 100644 --- a/src/Discord.Net/WebSocket/Entities/Role.cs +++ b/src/Discord.Net/WebSocket/Entities/Role.cs @@ -1,12 +1,14 @@ using Discord.API.Rest; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using Model = Discord.API.Role; namespace Discord.WebSocket { + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class Role : IRole, IMentionable { /// @@ -65,8 +67,9 @@ namespace Discord.WebSocket => await Discord.BaseClient.DeleteGuildRole(Guild.Id, Id).ConfigureAwait(false); /// - public override string ToString() => Name ?? Id.ToString(); - + public override string ToString() => Name; + private string DebuggerDisplay => $"{Name} ({Id})"; + ulong IRole.GuildId => Guild.Id; async Task> IRole.GetUsers() diff --git a/src/Discord.Net/WebSocket/Entities/Users/User.cs b/src/Discord.Net/WebSocket/Entities/Users/User.cs index 42615dc65..0eb985e15 100644 --- a/src/Discord.Net/WebSocket/Entities/Users/User.cs +++ b/src/Discord.Net/WebSocket/Entities/Users/User.cs @@ -1,10 +1,12 @@ using Discord.API.Rest; using System; +using System.Diagnostics; using System.Threading.Tasks; using Model = Discord.API.User; namespace Discord.WebSocket { + [DebuggerDisplay("{DebuggerDisplay,nq}")] public abstract class User : IUser { private string _avatarId; @@ -51,7 +53,8 @@ namespace Discord.WebSocket return new DMChannel(Discord, model); } - public override string ToString() => $"{Username ?? Id.ToString()}"; + public override string ToString() => $"{Username}#{Discriminator}"; + private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id})"; /// Game? IUser.CurrentGame => null;