From 224d0403dbd5bc8352de53a09129847cef45fe07 Mon Sep 17 00:00:00 2001 From: Pat Murphy Date: Thu, 29 Jun 2017 14:05:16 -0700 Subject: [PATCH] Adding Equals() overloads for reactions/emotes (#723) --- src/Discord.Net.Core/Entities/Emotes/Emoji.cs | 13 +++++++++++ src/Discord.Net.Core/Entities/Emotes/Emote.cs | 19 ++++++++++++++++ .../Entities/Messages/SocketReaction.cs | 22 +++++++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/src/Discord.Net.Core/Entities/Emotes/Emoji.cs b/src/Discord.Net.Core/Entities/Emotes/Emoji.cs index 07cee10a9..76eef58c8 100644 --- a/src/Discord.Net.Core/Entities/Emotes/Emoji.cs +++ b/src/Discord.Net.Core/Entities/Emotes/Emoji.cs @@ -21,5 +21,18 @@ public string Name { get; } public override string ToString() => Name; + + public override bool Equals(object other) + { + if (other == null) return false; + if (other == this) return true; + + var otherEmoji = other as Emoji; + if (otherEmoji == null) return false; + + return string.Equals(Name, otherEmoji.Name); + } + + public override int GetHashCode() => Name.GetHashCode(); } } diff --git a/src/Discord.Net.Core/Entities/Emotes/Emote.cs b/src/Discord.Net.Core/Entities/Emotes/Emote.cs index 76c20a77d..f498c818e 100644 --- a/src/Discord.Net.Core/Entities/Emotes/Emote.cs +++ b/src/Discord.Net.Core/Entities/Emotes/Emote.cs @@ -25,6 +25,25 @@ namespace Discord Name = name; } + public override bool Equals(object other) + { + if (other == null) return false; + if (other == this) return true; + + var otherEmote = other as Emote; + if (otherEmote == null) return false; + + return string.Equals(Name, otherEmote.Name) && Id == otherEmote.Id; + } + + public override int GetHashCode() + { + unchecked + { + return (Name.GetHashCode() * 397) ^ Id.GetHashCode(); + } + } + /// /// Parse an Emote from its raw format /// diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketReaction.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketReaction.cs index 9f58f1cf6..35bee9e68 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/SocketReaction.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketReaction.cs @@ -29,5 +29,27 @@ namespace Discord.WebSocket emote = new Emoji(model.Emoji.Name); return new SocketReaction(channel, model.MessageId, message, model.UserId, user, emote); } + + public override bool Equals(object other) + { + if (other == null) return false; + if (other == this) return true; + + var otherReaction = other as SocketReaction; + if (otherReaction == null) return false; + + return UserId == otherReaction.UserId && MessageId == otherReaction.MessageId && Emote.Equals(otherReaction.Emote); + } + + public override int GetHashCode() + { + unchecked + { + var hashCode = UserId.GetHashCode(); + hashCode = (hashCode * 397) ^ MessageId.GetHashCode(); + hashCode = (hashCode * 397) ^ Emote.GetHashCode(); + return hashCode; + } + } } }