diff --git a/src/Discord.Net/Models/Channel.cs b/src/Discord.Net/Models/Channel.cs index 4ce0b1b51..2aa913988 100644 --- a/src/Discord.Net/Models/Channel.cs +++ b/src/Discord.Net/Models/Channel.cs @@ -207,6 +207,8 @@ namespace Discord user.UpdateChannelPermissions(this); } + public override bool Equals(object obj) => obj is Channel && (obj as Channel).Id == Id; + public override int GetHashCode() => Id.GetHashCode(); public override string ToString() => Name ?? Id; } } diff --git a/src/Discord.Net/Models/Color.cs b/src/Discord.Net/Models/Color.cs index 5b5972d48..33887deeb 100644 --- a/src/Discord.Net/Models/Color.cs +++ b/src/Discord.Net/Models/Color.cs @@ -77,5 +77,9 @@ namespace Discord uint mask = (uint)~(0xFF << bit); _rawValue = (_rawValue & mask) | ((uint)value << bit); } + + public override bool Equals(object obj) => obj is Color && (obj as Color)._rawValue == _rawValue; + public override int GetHashCode() => _rawValue.GetHashCode(); + public override string ToString() => '#' + _rawValue.ToString("X"); } } diff --git a/src/Discord.Net/Models/GlobalUser.cs b/src/Discord.Net/Models/GlobalUser.cs index 34848c641..6eb3a24ae 100644 --- a/src/Discord.Net/Models/GlobalUser.cs +++ b/src/Discord.Net/Models/GlobalUser.cs @@ -69,6 +69,8 @@ namespace Discord _client.GlobalUsers.TryRemove(Id); } + public override bool Equals(object obj) => obj is GlobalUser && (obj as GlobalUser).Id == Id; + public override int GetHashCode() => Id.GetHashCode(); public override string ToString() => Id; } } diff --git a/src/Discord.Net/Models/Invite.cs b/src/Discord.Net/Models/Invite.cs index 2c06e8673..a9f50af93 100644 --- a/src/Discord.Net/Models/Invite.cs +++ b/src/Discord.Net/Models/Invite.cs @@ -112,6 +112,8 @@ namespace Discord CreatedAt = model.CreatedAt.Value; } + public override bool Equals(object obj) => obj is Invite && (obj as Invite).Id == Id; + public override int GetHashCode() => Id.GetHashCode(); public override string ToString() => XkcdCode ?? Id; } } diff --git a/src/Discord.Net/Models/Message.cs b/src/Discord.Net/Models/Message.cs index 5787b749b..5e301758b 100644 --- a/src/Discord.Net/Models/Message.cs +++ b/src/Discord.Net/Models/Message.cs @@ -235,6 +235,8 @@ namespace Discord } } + public override bool Equals(object obj) => obj is Message && (obj as Message).Id == Id; + public override int GetHashCode() => Id.GetHashCode(); public override string ToString() => $"{User}: {RawText}"; } } diff --git a/src/Discord.Net/Models/Permissions.cs b/src/Discord.Net/Models/Permissions.cs index bd65436e1..492699b17 100644 --- a/src/Discord.Net/Models/Permissions.cs +++ b/src/Discord.Net/Models/Permissions.cs @@ -137,6 +137,9 @@ namespace Discord if (_isLocked) throw new InvalidOperationException("Unable to edit cached permissions directly, use Copy() to make an editable copy."); } + + public override bool Equals(object obj) => obj is Permissions && (obj as Permissions)._rawValue == _rawValue; + public override int GetHashCode() => _rawValue.GetHashCode(); } public sealed class DualChannelPermissions @@ -214,5 +217,10 @@ namespace Discord Deny.SetBit(pos, false); } } + + public override bool Equals(object obj) => obj is DualChannelPermissions && + (obj as DualChannelPermissions).Allow.Equals(Allow) && + (obj as DualChannelPermissions).Deny.Equals(Deny); + public override int GetHashCode() => unchecked(Allow.GetHashCode() + Deny.GetHashCode()); } } diff --git a/src/Discord.Net/Models/Role.cs b/src/Discord.Net/Models/Role.cs index bbf896404..b625e738d 100644 --- a/src/Discord.Net/Models/Role.cs +++ b/src/Discord.Net/Models/Role.cs @@ -70,6 +70,8 @@ namespace Discord member.UpdateServerPermissions(); } + public override bool Equals(object obj) => obj is Role && (obj as Role).Id == Id; + public override int GetHashCode() => Id.GetHashCode(); public override string ToString() => Name ?? Id; } } diff --git a/src/Discord.Net/Models/Server.cs b/src/Discord.Net/Models/Server.cs index ce4961d8f..18ea3e9b7 100644 --- a/src/Discord.Net/Models/Server.cs +++ b/src/Discord.Net/Models/Server.cs @@ -252,6 +252,8 @@ namespace Discord } } + public override bool Equals(object obj) => obj is Server && (obj as Server).Id == Id; + public override int GetHashCode() => Id.GetHashCode(); public override string ToString() => Name ?? Id; } } diff --git a/src/Discord.Net/Models/User.cs b/src/Discord.Net/Models/User.cs index 3abd56c74..9757864d3 100644 --- a/src/Discord.Net/Models/User.cs +++ b/src/Discord.Net/Models/User.cs @@ -370,6 +370,8 @@ namespace Discord return _roles.ContainsKey(role.Id); } + public override bool Equals(object obj) => obj is User && (obj as User).Id == Id; + public override int GetHashCode() => Id.GetHashCode(); public override string ToString() => Name ?? Id; } } \ No newline at end of file