diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Card.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Card.cs index 175b7c8b..9ef5a7b6 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Card.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Card.cs @@ -1,6 +1,5 @@ using System.Collections.Immutable; using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -8,7 +7,7 @@ namespace Kook; /// 表示一个卡片对象,可用于卡片消息。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class Card : ICard, IEquatable, IEquatable +public record Card : ICard { internal Card(CardTheme theme, CardSize size, Color? color, ImmutableArray modules) { @@ -46,44 +45,6 @@ internal Card(CardTheme theme, CardSize size, Color? color, ImmutableArray $"{Type} ({Modules.Length} Modules)"; - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(Card left, Card right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(Card left, Card right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is Card card && Equals(card); - - /// - public bool Equals([NotNullWhen(true)] Card? card) => - GetHashCode() == card?.GetHashCode(); - - /// - public override int GetHashCode() - { - unchecked - { - int hash = (int)2166136261; - hash = (hash * 16777619) ^ (Type, Theme, Color, Size).GetHashCode(); - foreach (IModule module in Modules) - hash = (hash * 16777619) ^ module.GetHashCode(); - return hash; - } - } - - bool IEquatable.Equals([NotNullWhen(true)] ICard? card) => - Equals(card as Card); - /// IReadOnlyCollection ICard.Modules => Modules; } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/CardBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/CardBuilder.cs index 0f5f803a..6935a522 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/CardBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/CardBuilder.cs @@ -5,7 +5,7 @@ namespace Kook; /// /// 用来构建 卡片的构建器。 /// -public class CardBuilder : ICardBuilder, IEquatable, IEquatable +public record CardBuilder : ICardBuilder { /// /// 初始化一个 类的新实例。 @@ -152,48 +152,4 @@ or AudioModuleBuilder /// ICard ICardBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(CardBuilder? left, CardBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(CardBuilder? left, CardBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is CardBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] CardBuilder? cardBuilder) - { - if (cardBuilder is null) - return false; - - if (Modules.Count != cardBuilder.Modules.Count) - return false; - - if (Modules - .Zip(cardBuilder.Modules, (x, y) => (x, y)) - .Any(pair => pair.x != pair.y)) - return false; - - return Type == cardBuilder.Type - && Theme == cardBuilder.Theme - && Color == cardBuilder.Color - && Size == cardBuilder.Size; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] ICardBuilder? cardBuilder) => - Equals(cardBuilder as CardBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/ButtonElementBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/ButtonElementBuilder.cs index bd400525..2aa470f2 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/ButtonElementBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/ButtonElementBuilder.cs @@ -5,7 +5,7 @@ namespace Kook; /// /// 用来构建 元素的构建器。 /// -public class ButtonElementBuilder : IElementBuilder, IEquatable, IEquatable +public record ButtonElementBuilder : IElementBuilder { /// /// 按钮文本的最大长度。 @@ -233,41 +233,4 @@ public ButtonElement Build() /// [MemberNotNull(nameof(Text))] IElement IElementBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(ButtonElementBuilder? left, ButtonElementBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(ButtonElementBuilder? left, ButtonElementBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is ButtonElementBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] ButtonElementBuilder? buttonElementBuilder) - { - if (buttonElementBuilder is null) - return false; - - return Type == buttonElementBuilder.Type - && Theme == buttonElementBuilder.Theme - && Value == buttonElementBuilder.Value - && Click == buttonElementBuilder.Click - && Text == buttonElementBuilder.Text; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IElementBuilder? elementBuilder) => - Equals(elementBuilder as ButtonElementBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/ImageElementBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/ImageElementBuilder.cs index 669f7640..014d63ef 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/ImageElementBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/ImageElementBuilder.cs @@ -5,7 +5,7 @@ namespace Kook; /// /// 用来构建 元素的构建器。 /// -public class ImageElementBuilder : IElementBuilder, IEquatable, IEquatable +public record ImageElementBuilder : IElementBuilder { /// /// 图片替代文本的最大长度。 @@ -193,41 +193,4 @@ public ImageElement Build() /// [MemberNotNull(nameof(Source))] IElement IElementBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(ImageElementBuilder? left, ImageElementBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(ImageElementBuilder? left, ImageElementBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is ImageElementBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] ImageElementBuilder? imageElementBuilder) - { - if (imageElementBuilder is null) return false; - - return Type == imageElementBuilder.Type - && Source == imageElementBuilder.Source - && Alternative == imageElementBuilder.Alternative - && Size == imageElementBuilder.Size - && Circle == imageElementBuilder.Circle - && FallbackUrl == imageElementBuilder.FallbackUrl; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IElementBuilder? elementBuilder) => - Equals(elementBuilder as ImageElementBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/KMarkdownElementBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/KMarkdownElementBuilder.cs index d2420c1c..99a38b77 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/KMarkdownElementBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/KMarkdownElementBuilder.cs @@ -5,7 +5,7 @@ namespace Kook; /// /// 用来构建 元素的构建器。 /// -public class KMarkdownElementBuilder : IElementBuilder, IEquatable, IEquatable +public record KMarkdownElementBuilder : IElementBuilder { /// /// KMarkdown 文本的最大长度。 @@ -81,37 +81,4 @@ public KMarkdownElement Build() /// [MemberNotNull(nameof(Content))] IElement IElementBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(KMarkdownElementBuilder? left, KMarkdownElementBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(KMarkdownElementBuilder? left, KMarkdownElementBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is KMarkdownElementBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] KMarkdownElementBuilder? kMarkdownElementBuilder) - { - if (kMarkdownElementBuilder is null) - return false; - return Type == kMarkdownElementBuilder.Type - && Content == kMarkdownElementBuilder.Content; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IElementBuilder? elementBuilder) => - Equals(elementBuilder as KMarkdownElementBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/ParagraphStructBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/ParagraphStructBuilder.cs index 0d480761..1f0fdcd2 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/ParagraphStructBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/ParagraphStructBuilder.cs @@ -1,11 +1,9 @@ -using System.Diagnostics.CodeAnalysis; - namespace Kook; /// /// 用来构建 元素的构建器。 /// -public class ParagraphStructBuilder : IElementBuilder, IEquatable, IEquatable +public record ParagraphStructBuilder : IElementBuilder { /// /// 区域文本内文本块的最大数量。 @@ -165,46 +163,4 @@ public ParagraphStruct Build() /// IElement IElementBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(ParagraphStructBuilder? left, ParagraphStructBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(ParagraphStructBuilder? left, ParagraphStructBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is ParagraphStructBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] ParagraphStructBuilder? paragraphStructBuilder) - { - if (paragraphStructBuilder is null) - return false; - - if (Fields.Count != paragraphStructBuilder.Fields.Count) - return false; - - if (Fields - .Zip(paragraphStructBuilder.Fields, (x, y) => (x, y)) - .Any(pair => pair.x != pair.y)) - return false; - - return Type == paragraphStructBuilder.Type - && ColumnCount == paragraphStructBuilder.ColumnCount; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IElementBuilder? elementBuilder) => - Equals(elementBuilder as ParagraphStructBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/PlainTextElementBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/PlainTextElementBuilder.cs index 4a1d0637..0cd871c0 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/PlainTextElementBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/Builders/PlainTextElementBuilder.cs @@ -5,7 +5,7 @@ namespace Kook; /// /// 用来构建 元素的构建器。 /// -public class PlainTextElementBuilder : IElementBuilder, IEquatable, IEquatable +public class PlainTextElementBuilder : IElementBuilder { /// /// 纯文本的最大长度。 @@ -103,38 +103,4 @@ public PlainTextElement Build() /// [MemberNotNull(nameof(Content))] IElement IElementBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(PlainTextElementBuilder? left, PlainTextElementBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(PlainTextElementBuilder? left, PlainTextElementBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is PlainTextElementBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] PlainTextElementBuilder? plainTextElementBuilder) - { - if (plainTextElementBuilder is null) return false; - - return Type == plainTextElementBuilder.Type - && Content == plainTextElementBuilder.Content - && Emoji == plainTextElementBuilder.Emoji; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IElementBuilder? elementBuilder) => - Equals(elementBuilder as PlainTextElementBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/ButtonElement.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/ButtonElement.cs index 085fa363..d8389c53 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/ButtonElement.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/ButtonElement.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -7,7 +6,7 @@ namespace Kook; /// 按钮元素,可用于 中。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class ButtonElement : IElement, IEquatable, IEquatable +public record ButtonElement : IElement { internal ButtonElement(ButtonTheme? theme, string? value, ButtonClickEventType? click, IElement text) { @@ -41,41 +40,4 @@ internal ButtonElement(ButtonTheme? theme, string? value, ButtonClickEventType? public IElement Text { get; } private string DebuggerDisplay => $"{Type}: {Text} ({Click}, {Value}, {Theme})"; - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(ButtonElement? left, ButtonElement? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(ButtonElement? left, ButtonElement? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is ButtonElement buttonElement && Equals(buttonElement); - - /// - public bool Equals([NotNullWhen(true)] ButtonElement? buttonElement) => - GetHashCode() == buttonElement?.GetHashCode(); - - /// - public override int GetHashCode() - { - unchecked - { - int hash = (int) 2166136261; - hash = (hash * 16777619) ^ (Type, Theme, Value, Click).GetHashCode(); - hash = (hash * 16777619) ^ Text.GetHashCode(); - return hash; - } - } - - bool IEquatable.Equals([NotNullWhen(true)] IElement? element) => - Equals(element as ButtonElement); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/ImageElement.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/ImageElement.cs index d9fa701e..e86b5583 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/ImageElement.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/ImageElement.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -7,7 +6,7 @@ namespace Kook; /// 图片元素,可用于 中。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class ImageElement : IElement, IEquatable, IEquatable +public record ImageElement : IElement { internal ImageElement(string source, string? alternative = null, ImageSize? size = null, bool? circle = null, string? fallbackUrl = null) @@ -51,33 +50,4 @@ internal ImageElement(string source, string? alternative = null, public string? FallbackUrl { get; } private string DebuggerDisplay => $"{Type}: {Source}"; - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(ImageElement? left, ImageElement? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(ImageElement? left, ImageElement? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is ImageElement imageElement && Equals(imageElement); - - /// - public bool Equals([NotNullWhen(true)] ImageElement? imageElement) => - GetHashCode() == imageElement?.GetHashCode(); - - /// - public override int GetHashCode() => - (Type, Source, Alternative, Size, Circle, FallbackUrl).GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IElement? element) => - Equals(element as ImageElement); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/KMarkdownElement.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/KMarkdownElement.cs index 50c3aec9..fe0934d5 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/KMarkdownElement.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/KMarkdownElement.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -7,7 +6,7 @@ namespace Kook; /// KMarkdown 文本元素,可用于 中。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class KMarkdownElement : IElement, IEquatable, IEquatable +public record KMarkdownElement : IElement { internal KMarkdownElement(string content) { @@ -26,33 +25,4 @@ internal KMarkdownElement(string content) public override string ToString() => Content; private string DebuggerDisplay => $"{Type}: {Content}"; - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(KMarkdownElement? left, KMarkdownElement? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(KMarkdownElement? left, KMarkdownElement? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is KMarkdownElement kMarkdownElement && Equals(kMarkdownElement); - - /// - public bool Equals([NotNullWhen(true)] KMarkdownElement? kMarkdownElement) => - GetHashCode() == kMarkdownElement?.GetHashCode(); - - /// - public override int GetHashCode() => - (Type, Content).GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IElement? element) => - Equals(element as KMarkdownElement); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/ParagraphStruct.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/ParagraphStruct.cs index a16c8f37..e08ea48b 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/ParagraphStruct.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/ParagraphStruct.cs @@ -1,6 +1,5 @@ using System.Collections.Immutable; using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -8,7 +7,7 @@ namespace Kook; /// 区域文本结构,可用于 中。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class ParagraphStruct : IElement, IEquatable, IEquatable +public record ParagraphStruct : IElement { internal ParagraphStruct(int? columnCount, ImmutableArray fields) { @@ -30,42 +29,4 @@ internal ParagraphStruct(int? columnCount, ImmutableArray fields) public ImmutableArray Fields { get; } private string DebuggerDisplay => $"{Type} ({ColumnCount} Columns, {Fields.Length} Fields)"; - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(ParagraphStruct? left, ParagraphStruct? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(ParagraphStruct? left, ParagraphStruct? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is ParagraphStruct paragraphStruct && Equals(paragraphStruct); - - /// - public bool Equals([NotNullWhen(true)] ParagraphStruct? paragraphStruct) => - GetHashCode() == paragraphStruct?.GetHashCode(); - - /// - public override int GetHashCode() - { - unchecked - { - int hash = (int) 2166136261; - hash = (hash * 16777619) ^ (Type, ColumnCount).GetHashCode(); - foreach (IElement element in Fields) - hash = (hash * 16777619) ^ element.GetHashCode(); - return hash; - } - } - - bool IEquatable.Equals([NotNullWhen(true)] IElement? element) => - Equals(element as ParagraphStruct); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/PlainTextElement.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/PlainTextElement.cs index 26064769..9c055ea5 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Elements/PlainTextElement.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Elements/PlainTextElement.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -7,7 +6,7 @@ namespace Kook; /// 纯文本元素,可用于 中。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class PlainTextElement : IElement, IEquatable, IEquatable +public record PlainTextElement : IElement { internal PlainTextElement(string content, bool? emoji) { @@ -32,33 +31,4 @@ internal PlainTextElement(string content, bool? emoji) public override string ToString() => Content; private string DebuggerDisplay => $"{Type}: {Content}"; - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(PlainTextElement? left, PlainTextElement? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(PlainTextElement? left, PlainTextElement? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is PlainTextElement plainTextElement && Equals(plainTextElement); - - /// - public bool Equals([NotNullWhen(true)] PlainTextElement? plainTextElement) => - GetHashCode() == plainTextElement?.GetHashCode(); - - /// - public override int GetHashCode() => - (Type, Content, Emoji).GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IElement? element) => - Equals(element as PlainTextElement); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/ActionGroupModule.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/ActionGroupModule.cs index bcb80ea8..9e4726cd 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/ActionGroupModule.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/ActionGroupModule.cs @@ -1,6 +1,5 @@ using System.Collections.Immutable; using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -8,7 +7,7 @@ namespace Kook; /// 按钮组模块,可用于 中。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class ActionGroupModule : IModule, IEquatable, IEquatable +public record ActionGroupModule : IModule { internal ActionGroupModule(ImmutableArray elements) { @@ -24,42 +23,4 @@ internal ActionGroupModule(ImmutableArray elements) public ImmutableArray Elements { get; } private string DebuggerDisplay => $"{Type} ({Elements.Length} Elements)"; - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(ActionGroupModule left, ActionGroupModule right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(ActionGroupModule left, ActionGroupModule right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is ActionGroupModule actionGroupModule && Equals(actionGroupModule); - - /// - public bool Equals([NotNullWhen(true)] ActionGroupModule? actionGroupModule) => - GetHashCode() == actionGroupModule?.GetHashCode(); - - /// - public override int GetHashCode() - { - unchecked - { - int hash = (int)2166136261; - hash = (hash * 16777619) ^ Type.GetHashCode(); - foreach (ButtonElement buttonElement in Elements) - hash = (hash * 16777619) ^ buttonElement.GetHashCode(); - return hash; - } - } - - bool IEquatable.Equals([NotNullWhen(true)] IModule? module) => - Equals(module as ActionGroupModule); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/AudioModule.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/AudioModule.cs index b85776f6..c608f88a 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/AudioModule.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/AudioModule.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -7,7 +6,7 @@ namespace Kook; /// 音频模块,可用于 中。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class AudioModule : IMediaModule, IEquatable, IEquatable +public record AudioModule : IMediaModule { internal AudioModule(string source, string? title, string? cover) { @@ -35,33 +34,4 @@ internal AudioModule(string source, string? title, string? cover) public string? Cover { get; } private string DebuggerDisplay => $"{Type}: {Title}"; - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(AudioModule left, AudioModule right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(AudioModule left, AudioModule right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is AudioModule audioModule && Equals(audioModule); - - /// - public bool Equals([NotNullWhen(true)] AudioModule? audioModule) => - GetHashCode() == audioModule?.GetHashCode(); - - /// - public override int GetHashCode() => - (Type, Source, Title, Cover).GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModule? module) => - Equals(module as AudioModule); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/ActionGroupModuleBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/ActionGroupModuleBuilder.cs index 1a61aeb0..c76615ed 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/ActionGroupModuleBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/ActionGroupModuleBuilder.cs @@ -1,11 +1,9 @@ -using System.Diagnostics.CodeAnalysis; - namespace Kook; /// /// 用来构建 模块的构建器。 /// -public class ActionGroupModuleBuilder : IModuleBuilder, IEquatable, IEquatable +public record ActionGroupModuleBuilder : IModuleBuilder { /// /// 元素的最大数量。 @@ -90,45 +88,4 @@ public ActionGroupModule Build() /// IModule IModuleBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(ActionGroupModuleBuilder? left, ActionGroupModuleBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(ActionGroupModuleBuilder? left, ActionGroupModuleBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is ActionGroupModuleBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] ActionGroupModuleBuilder? actionGroupModuleBuilder) - { - if (actionGroupModuleBuilder is null) - return false; - - if (Elements.Count != actionGroupModuleBuilder.Elements.Count) - return false; - - if (Elements - .Zip(actionGroupModuleBuilder.Elements, (x, y) => (x, y)) - .Any(pair => pair.x != pair.y)) - return false; - - return Type == actionGroupModuleBuilder.Type; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModuleBuilder? moduleBuilder) => - Equals(moduleBuilder as ActionGroupModuleBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/AudioModuleBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/AudioModuleBuilder.cs index a4155963..706c63db 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/AudioModuleBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/AudioModuleBuilder.cs @@ -5,7 +5,7 @@ namespace Kook; /// /// 用来构建 模块的构建器。 /// -public class AudioModuleBuilder : IModuleBuilder, IEquatable, IEquatable +public record AudioModuleBuilder : IModuleBuilder { /// public ModuleType Type => ModuleType.Audio; @@ -107,40 +107,4 @@ public AudioModule Build() /// [MemberNotNull(nameof(Source))] IModule IModuleBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(AudioModuleBuilder? left, AudioModuleBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(AudioModuleBuilder? left, AudioModuleBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is AudioModuleBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] AudioModuleBuilder? audioModuleBuilder) - { - if (audioModuleBuilder is null) - return false; - - return Type == audioModuleBuilder.Type - && Source == audioModuleBuilder.Source - && Title == audioModuleBuilder.Title - && Cover == audioModuleBuilder.Cover; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModuleBuilder? moduleBuilder) => - Equals(moduleBuilder as AudioModuleBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/ContainerModuleBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/ContainerModuleBuilder.cs index f2a5e2f4..4e55ddc3 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/ContainerModuleBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/ContainerModuleBuilder.cs @@ -1,11 +1,9 @@ -using System.Diagnostics.CodeAnalysis; - namespace Kook; /// /// 用来构建 模块的构建器。 /// -public class ContainerModuleBuilder : IModuleBuilder, IEquatable, IEquatable +public record ContainerModuleBuilder : IModuleBuilder { /// /// 元素的最大数量。 @@ -92,45 +90,4 @@ public ContainerModule Build() /// IModule IModuleBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(ContainerModuleBuilder? left, ContainerModuleBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(ContainerModuleBuilder? left, ContainerModuleBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is ContainerModuleBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] ContainerModuleBuilder? containerModuleBuilder) - { - if (containerModuleBuilder is null) - return false; - - if (Elements.Count != containerModuleBuilder.Elements.Count) - return false; - - if (Elements - .Zip(containerModuleBuilder.Elements, (x, y) => (x, y)) - .Any(pair => pair.x != pair.y)) - return false; - - return Type == containerModuleBuilder.Type; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModuleBuilder? moduleBuilder) => - Equals(moduleBuilder as ContainerModuleBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/ContextModuleBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/ContextModuleBuilder.cs index daef0434..86f54e23 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/ContextModuleBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/ContextModuleBuilder.cs @@ -1,11 +1,9 @@ -using System.Diagnostics.CodeAnalysis; - namespace Kook; /// /// 用来构建 模块的构建器。 /// -public class ContextModuleBuilder : IModuleBuilder, IEquatable, IEquatable +public record ContextModuleBuilder : IModuleBuilder { /// /// 元素的最大数量。 @@ -121,45 +119,4 @@ public ContextModule Build() /// IModule IModuleBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(ContextModuleBuilder? left, ContextModuleBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(ContextModuleBuilder? left, ContextModuleBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is ContextModuleBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] ContextModuleBuilder? contextModuleBuilder) - { - if (contextModuleBuilder is null) - return false; - - if (Elements.Count != contextModuleBuilder.Elements.Count) - return false; - - if (Elements - .Zip(contextModuleBuilder.Elements, (x, y) => (x, y)) - .Any(pair => pair.x != pair.y)) - return false; - - return Type == contextModuleBuilder.Type; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModuleBuilder? moduleBuilder) => - Equals(moduleBuilder as ContextModuleBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/CountdownModuleBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/CountdownModuleBuilder.cs index bdf18dc5..2bf94fc4 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/CountdownModuleBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/CountdownModuleBuilder.cs @@ -1,11 +1,9 @@ -using System.Diagnostics.CodeAnalysis; - namespace Kook; /// /// 用来构建 模块的构建器。 /// -public class CountdownModuleBuilder : IModuleBuilder, IEquatable, IEquatable +public record CountdownModuleBuilder : IModuleBuilder { /// public ModuleType Type => ModuleType.Countdown; @@ -126,39 +124,4 @@ public CountdownModule Build() /// IModule IModuleBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(CountdownModuleBuilder? left, CountdownModuleBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(CountdownModuleBuilder? left, CountdownModuleBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is CountdownModuleBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] CountdownModuleBuilder? countdownModuleBuilder) - { - if (countdownModuleBuilder is null) return false; - - return Type == countdownModuleBuilder.Type - && EndTime == countdownModuleBuilder.EndTime - && StartTime == countdownModuleBuilder.StartTime - && Mode == countdownModuleBuilder.Mode; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModuleBuilder? moduleBuilder) => - Equals(moduleBuilder as CountdownModuleBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/DividerModuleBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/DividerModuleBuilder.cs index 8ae3ff37..adc6000c 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/DividerModuleBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/DividerModuleBuilder.cs @@ -1,11 +1,9 @@ -using System.Diagnostics.CodeAnalysis; - namespace Kook; /// /// 用来构建 模块的构建器。 /// -public class DividerModuleBuilder : IModuleBuilder, IEquatable, IEquatable +public record DividerModuleBuilder : IModuleBuilder { /// public ModuleType Type => ModuleType.Divider; @@ -25,37 +23,4 @@ public DividerModuleBuilder() /// IModule IModuleBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(DividerModuleBuilder? left, DividerModuleBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(DividerModuleBuilder? left, DividerModuleBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is DividerModuleBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] DividerModuleBuilder? dividerModuleBuilder) - { - if (dividerModuleBuilder is null) - return false; - - return Type == dividerModuleBuilder.Type; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModuleBuilder? moduleBuilder) => - Equals(moduleBuilder as DividerModuleBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/FileModuleBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/FileModuleBuilder.cs index a0243efd..844e5bea 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/FileModuleBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/FileModuleBuilder.cs @@ -5,7 +5,7 @@ namespace Kook; /// /// 用来构建 模块的构建器。 /// -public class FileModuleBuilder : IModuleBuilder, IEquatable, IEquatable +public record FileModuleBuilder : IModuleBuilder { /// public ModuleType Type => ModuleType.File; @@ -89,38 +89,4 @@ public FileModule Build() /// [MemberNotNull(nameof(Source))] IModule IModuleBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(FileModuleBuilder? left, FileModuleBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(FileModuleBuilder? left, FileModuleBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is FileModuleBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] FileModuleBuilder? fileModuleBuilder) - { - if (fileModuleBuilder is null) return false; - - return Type == fileModuleBuilder.Type - && Source == fileModuleBuilder.Source - && Title == fileModuleBuilder.Title; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModuleBuilder? moduleBuilder) => - Equals(moduleBuilder as FileModuleBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/HeaderModuleBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/HeaderModuleBuilder.cs index 537149c7..3d533efe 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/HeaderModuleBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/HeaderModuleBuilder.cs @@ -5,7 +5,7 @@ namespace Kook; /// /// 用来构建 模块的构建器。 /// -public class HeaderModuleBuilder : IModuleBuilder, IEquatable, IEquatable +public record HeaderModuleBuilder : IModuleBuilder { /// /// 标题内容文本的最大长度。 @@ -116,38 +116,4 @@ public HeaderModule Build() /// [MemberNotNull(nameof(Text))] IModule IModuleBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(HeaderModuleBuilder? left, HeaderModuleBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(HeaderModuleBuilder? left, HeaderModuleBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is HeaderModuleBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] HeaderModuleBuilder? headerModuleBuilder) - { - if (headerModuleBuilder == null) - return false; - - return Type == headerModuleBuilder.Type - && Text == headerModuleBuilder.Text; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModuleBuilder? moduleBuilder) => - Equals(moduleBuilder as HeaderModuleBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/ImageGroupModuleBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/ImageGroupModuleBuilder.cs index bcea4b75..954230dc 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/ImageGroupModuleBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/ImageGroupModuleBuilder.cs @@ -1,11 +1,9 @@ -using System.Diagnostics.CodeAnalysis; - namespace Kook; /// /// 用来构建 模块的构建器。 /// -public class ImageGroupModuleBuilder : IModuleBuilder, IEquatable, IEquatable +public record ImageGroupModuleBuilder : IModuleBuilder { /// /// 元素的最大数量。 @@ -97,45 +95,4 @@ public ImageGroupModule Build() /// IModule IModuleBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(ImageGroupModuleBuilder? left, ImageGroupModuleBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(ImageGroupModuleBuilder? left, ImageGroupModuleBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is ImageGroupModuleBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] ImageGroupModuleBuilder? imageGroupModuleBuilder) - { - if (imageGroupModuleBuilder is null) - return false; - - if (Elements.Count != imageGroupModuleBuilder.Elements.Count) - return false; - - if (Elements - .Zip(imageGroupModuleBuilder.Elements, (x, y) => (x, y)) - .Any(pair => pair.x != pair.y)) - return false; - - return Type == imageGroupModuleBuilder.Type; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModuleBuilder? moduleBuilder) => - Equals(moduleBuilder as ImageGroupModuleBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/InviteModuleBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/InviteModuleBuilder.cs index 2e6263fb..0ec01be9 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/InviteModuleBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/InviteModuleBuilder.cs @@ -5,7 +5,7 @@ namespace Kook; /// /// 用来构建 模块的构建器。 /// -public class InviteModuleBuilder : IModuleBuilder, IEquatable, IEquatable +public record InviteModuleBuilder : IModuleBuilder { /// public ModuleType Type => ModuleType.Invite; @@ -68,37 +68,4 @@ public InviteModule Build() /// [MemberNotNull(nameof(Code))] IModule IModuleBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(InviteModuleBuilder? left, InviteModuleBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(InviteModuleBuilder? left, InviteModuleBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is InviteModuleBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] InviteModuleBuilder? inviteModuleBuilder) - { - if (inviteModuleBuilder is null) return false; - - return Type == inviteModuleBuilder.Type - && Code == inviteModuleBuilder.Code; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModuleBuilder? moduleBuilder) => - Equals(moduleBuilder as InviteModuleBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/SectionModuleBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/SectionModuleBuilder.cs index 2a975ba3..d2779424 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/SectionModuleBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/SectionModuleBuilder.cs @@ -1,11 +1,9 @@ -using System.Diagnostics.CodeAnalysis; - namespace Kook; /// /// 用来构建 模块的构建器。 /// -public class SectionModuleBuilder : IModuleBuilder, IEquatable, IEquatable +public record SectionModuleBuilder : IModuleBuilder { /// public ModuleType Type => ModuleType.Section; @@ -206,39 +204,4 @@ public SectionModule Build() /// IModule IModuleBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(SectionModuleBuilder? left, SectionModuleBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(SectionModuleBuilder? left, SectionModuleBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is SectionModuleBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] SectionModuleBuilder? sectionModuleBuilder) - { - if (sectionModuleBuilder is null) return false; - - return Type == sectionModuleBuilder.Type - && Mode == sectionModuleBuilder.Mode - && Text == sectionModuleBuilder.Text - && Accessory == sectionModuleBuilder.Accessory; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModuleBuilder? moduleBuilder) => - Equals(moduleBuilder as SectionModuleBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/VideoModuleBuilder.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/VideoModuleBuilder.cs index db546f3d..af7e2431 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/VideoModuleBuilder.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/Builders/VideoModuleBuilder.cs @@ -5,7 +5,7 @@ namespace Kook; /// /// 用来构建 模块的构建器。 /// -public class VideoModuleBuilder : IModuleBuilder, IEquatable, IEquatable +public record VideoModuleBuilder : IModuleBuilder { /// public ModuleType Type => ModuleType.Video; @@ -89,38 +89,4 @@ public VideoModule Build() /// [MemberNotNull(nameof(Source))] IModule IModuleBuilder.Build() => Build(); - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(VideoModuleBuilder? left, VideoModuleBuilder? right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(VideoModuleBuilder? left, VideoModuleBuilder? right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is VideoModuleBuilder builder && Equals(builder); - - /// - public bool Equals([NotNullWhen(true)] VideoModuleBuilder? videoModuleBuilder) - { - if (videoModuleBuilder is null) return false; - - return Type == videoModuleBuilder.Type - && Source == videoModuleBuilder.Source - && Title == videoModuleBuilder.Title; - } - - /// - public override int GetHashCode() => base.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModuleBuilder? moduleBuilder) => - Equals(moduleBuilder as VideoModuleBuilder); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/ContainerModule.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/ContainerModule.cs index 6625f3ad..e5b4b558 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/ContainerModule.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/ContainerModule.cs @@ -1,6 +1,5 @@ using System.Collections.Immutable; using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -8,7 +7,7 @@ namespace Kook; /// 容器模块,可用于 中。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class ContainerModule : IModule, IEquatable, IEquatable +public record ContainerModule : IModule { internal ContainerModule(ImmutableArray elements) { @@ -24,42 +23,4 @@ internal ContainerModule(ImmutableArray elements) public ImmutableArray Elements { get; } private string DebuggerDisplay => $"{Type} ({Elements.Length} Elements)"; - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(ContainerModule left, ContainerModule right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(ContainerModule left, ContainerModule right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is ContainerModule containerModule && Equals(containerModule); - - /// - public bool Equals([NotNullWhen(true)] ContainerModule? containerModule) => - GetHashCode() == containerModule?.GetHashCode(); - - /// - public override int GetHashCode() - { - unchecked - { - int hash = (int)2166136261; - hash = (hash * 16777619) ^ Type.GetHashCode(); - foreach (ImageElement element in Elements) - hash = (hash * 16777619) ^ element.GetHashCode(); - return hash; - } - } - - bool IEquatable.Equals([NotNullWhen(true)] IModule? module) => - Equals(module as ContainerModule); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/ContextModule.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/ContextModule.cs index 814f7b41..7cb16882 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/ContextModule.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/ContextModule.cs @@ -1,6 +1,5 @@ using System.Collections.Immutable; using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -8,7 +7,7 @@ namespace Kook; /// 备注模块,可用于 中。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class ContextModule : IModule, IEquatable, IEquatable +public record ContextModule : IModule { internal ContextModule(ImmutableArray elements) { @@ -24,42 +23,4 @@ internal ContextModule(ImmutableArray elements) public ImmutableArray Elements { get; } private string DebuggerDisplay => $"{Type} ({Elements.Length} Elements)"; - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(ContextModule left, ContextModule right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(ContextModule left, ContextModule right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is ContextModule contextModule && Equals(contextModule); - - /// - public bool Equals([NotNullWhen(true)] ContextModule? contextModule) => - GetHashCode() == contextModule?.GetHashCode(); - - /// - public override int GetHashCode() - { - unchecked - { - int hash = (int)2166136261; - hash = (hash * 16777619) ^ Type.GetHashCode(); - foreach (IElement element in Elements) - hash = (hash * 16777619) ^ element.GetHashCode(); - return hash; - } - } - - bool IEquatable.Equals([NotNullWhen(true)] IModule? module) => - Equals(module as ContextModule); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/CountdownModule.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/CountdownModule.cs index 4fee1d6c..571a4416 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/CountdownModule.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/CountdownModule.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -7,7 +6,7 @@ namespace Kook; /// 倒计时模块,可用于 中。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class CountdownModule : IModule, IEquatable, IEquatable +public record CountdownModule : IModule { internal CountdownModule(CountdownMode mode, DateTimeOffset endTime, DateTimeOffset? startTime = null) { @@ -36,33 +35,4 @@ internal CountdownModule(CountdownMode mode, DateTimeOffset endTime, DateTimeOff private string DebuggerDisplay => $"{Type}: To {EndTime:yyyy'/'M'/'d HH:mm:ss z} ({Mode} Mode{(StartTime is null ? string.Empty : $", From {EndTime:yyyy'/'M'/'d HH:mm:ss z}")})"; - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(CountdownModule left, CountdownModule right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(CountdownModule left, CountdownModule right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is CountdownModule countdownModule && Equals(countdownModule); - - /// - public bool Equals([NotNullWhen(true)] CountdownModule? countdownModule) => - GetHashCode() == countdownModule?.GetHashCode(); - - /// - public override int GetHashCode() => - (Type, EndTime, StartTime, Mode).GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModule? module) => - Equals(module as CountdownModule); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/DividerModule.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/DividerModule.cs index 5f25a6a3..bbaf0004 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/DividerModule.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/DividerModule.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -7,7 +6,7 @@ namespace Kook; /// 分割线模块,可用于 中。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class DividerModule : IModule, IEquatable, IEquatable +public record DividerModule : IModule { internal DividerModule() { @@ -17,33 +16,4 @@ internal DividerModule() public ModuleType Type => ModuleType.Divider; private string DebuggerDisplay => $"{Type}"; - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(DividerModule left, DividerModule right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(DividerModule left, DividerModule right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is DividerModule dividerModule && Equals(dividerModule); - - /// - public bool Equals([NotNullWhen(true)] DividerModule? dividerModule) => - GetHashCode() == dividerModule?.GetHashCode(); - - /// - public override int GetHashCode() => - Type.GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModule? module) => - Equals(module as DividerModule); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/FileModule.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/FileModule.cs index 7a636ab1..43032e4d 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/FileModule.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/FileModule.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -7,7 +6,7 @@ namespace Kook; /// 文件模块,可用于 中。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class FileModule : IMediaModule, IEquatable, IEquatable +public record FileModule : IMediaModule { internal FileModule(string source, string? title, int? size = null) { @@ -35,33 +34,4 @@ internal FileModule(string source, string? title, int? size = null) public int? Size { get; } private string DebuggerDisplay => $"{Type}: {Title}"; - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(FileModule left, FileModule right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(FileModule left, FileModule right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is FileModule fileModule && Equals(fileModule); - - /// - public bool Equals([NotNullWhen(true)] FileModule? fileModule) => - GetHashCode() == fileModule?.GetHashCode(); - - /// - public override int GetHashCode() => - (Type, Source, Title).GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModule? module) => - Equals(module as FileModule); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/HeaderModule.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/HeaderModule.cs index 6ac39b98..89336914 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/HeaderModule.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/HeaderModule.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -7,7 +6,7 @@ namespace Kook; /// 标题模块,可用于 中。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class HeaderModule : IModule, IEquatable, IEquatable +public record HeaderModule : IModule { internal HeaderModule(PlainTextElement? text) { @@ -26,41 +25,4 @@ internal HeaderModule(PlainTextElement? text) public override string? ToString() => Text?.ToString(); private string DebuggerDisplay => $"{Type}: {Text}"; - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(HeaderModule left, HeaderModule right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(HeaderModule left, HeaderModule right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is HeaderModule headerModule && Equals(headerModule); - - /// - public bool Equals([NotNullWhen(true)] HeaderModule? headerModule) => - GetHashCode() == headerModule?.GetHashCode(); - - /// - public override int GetHashCode() - { - unchecked - { - int hash = (int)2166136261; - hash = (hash * 16777619) ^ Type.GetHashCode(); - hash = (hash * 16777619) ^ (Text?.GetHashCode() ?? 0); - return hash; - } - } - - bool IEquatable.Equals([NotNullWhen(true)] IModule? module) => - Equals(module as HeaderModule); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/ImageGroupModule.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/ImageGroupModule.cs index 1313f65d..99d526a8 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/ImageGroupModule.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/ImageGroupModule.cs @@ -1,6 +1,5 @@ using System.Collections.Immutable; using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -8,7 +7,7 @@ namespace Kook; /// 图片组模块,可用于 中。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class ImageGroupModule : IModule, IEquatable, IEquatable +public record ImageGroupModule : IModule { internal ImageGroupModule(ImmutableArray elements) { @@ -24,42 +23,4 @@ internal ImageGroupModule(ImmutableArray elements) public ImmutableArray Elements { get; } private string DebuggerDisplay => $"{Type} ({Elements.Length} Elements)"; - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(ImageGroupModule left, ImageGroupModule right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(ImageGroupModule left, ImageGroupModule right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is ImageGroupModule imageGroupModule && Equals(imageGroupModule); - - /// - public bool Equals([NotNullWhen(true)] ImageGroupModule? imageGroupModule) => - GetHashCode() == imageGroupModule?.GetHashCode(); - - /// - public override int GetHashCode() - { - unchecked - { - int hash = (int)2166136261; - hash = (hash * 16777619) ^ Type.GetHashCode(); - foreach (ImageElement element in Elements) - hash = (hash * 16777619) ^ element.GetHashCode(); - return hash; - } - } - - bool IEquatable.Equals([NotNullWhen(true)] IModule? module) => - Equals(module as ImageGroupModule); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/InviteModule.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/InviteModule.cs index ce6225bd..7a6f99e2 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/InviteModule.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/InviteModule.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -7,7 +6,7 @@ namespace Kook; /// 邀请模块,可用于 中。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class InviteModule : IModule, IEquatable, IEquatable +public record InviteModule : IModule { internal InviteModule(string? code) { @@ -23,33 +22,4 @@ internal InviteModule(string? code) public string? Code { get; } private string DebuggerDisplay => $"{Type}: {Code}"; - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(InviteModule left, InviteModule right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(InviteModule left, InviteModule right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is InviteModule inviteModule && Equals(inviteModule); - - /// - public bool Equals([NotNullWhen(true)] InviteModule? inviteModule) => - GetHashCode() == inviteModule?.GetHashCode(); - - /// - public override int GetHashCode() => - (Type, Code).GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModule? module) => - Equals(module as InviteModule); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/SectionModule.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/SectionModule.cs index d3b689b5..e926c0d2 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/SectionModule.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/SectionModule.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -7,7 +6,7 @@ namespace Kook; /// 内容模块,可用于 中。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class SectionModule : IModule, IEquatable, IEquatable +public record SectionModule : IModule { internal SectionModule(SectionAccessoryMode? mode, IElement? text = null, IElement? accessory = null) { @@ -35,42 +34,4 @@ internal SectionModule(SectionAccessoryMode? mode, IElement? text = null, IEleme public IElement? Accessory { get; } private string DebuggerDisplay => $"{Type}: {Text}{(Accessory is null ? string.Empty : $"{Mode} Accessory")}"; - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(SectionModule left, SectionModule right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(SectionModule left, SectionModule right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is SectionModule sectionModule && Equals(sectionModule); - - /// - public bool Equals([NotNullWhen(true)] SectionModule? sectionModule) => - GetHashCode() == sectionModule?.GetHashCode(); - - /// - public override int GetHashCode() - { - unchecked - { - int hash = (int)2166136261; - hash = (hash * 16777619) ^ (Type, Mode).GetHashCode(); - hash = (hash * 16777619) ^ (Text?.GetHashCode() ?? 0); - hash = (hash * 16777619) ^ (Accessory?.GetHashCode() ?? 0); - return hash; - } - } - - bool IEquatable.Equals([NotNullWhen(true)] IModule? module) => - Equals(module as SectionModule); } diff --git a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/VideoModule.cs b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/VideoModule.cs index 350e8134..8087341d 100644 --- a/src/Kook.Net.Core/Entities/Messages/Cards/Modules/VideoModule.cs +++ b/src/Kook.Net.Core/Entities/Messages/Cards/Modules/VideoModule.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; @@ -7,7 +6,7 @@ namespace Kook; /// 视频模块,可用于 中。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class VideoModule : IMediaModule, IEquatable, IEquatable +public record VideoModule : IMediaModule { internal VideoModule(string source, string? title, string? cover, int? size, TimeSpan? duration, int? width, int? height) @@ -60,33 +59,4 @@ internal VideoModule(string source, string? title, string? cover, public int? Height { get; } private string DebuggerDisplay => $"{Type}: {Title}"; - - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(VideoModule left, VideoModule right) => - left?.Equals(right) ?? right is null; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(VideoModule left, VideoModule right) => - !(left == right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is VideoModule videoModule && Equals(videoModule); - - /// - public bool Equals([NotNullWhen(true)]VideoModule? videoModule) => - GetHashCode() == videoModule?.GetHashCode(); - - /// - public override int GetHashCode() => - (Type, Source, Title).GetHashCode(); - - bool IEquatable.Equals([NotNullWhen(true)] IModule? module) => - Equals(module as VideoModule); } diff --git a/src/Kook.Net.Core/Entities/Roles/AlphaColor.cs b/src/Kook.Net.Core/Entities/Roles/AlphaColor.cs index b7b85ff1..7bfe7fde 100644 --- a/src/Kook.Net.Core/Entities/Roles/AlphaColor.cs +++ b/src/Kook.Net.Core/Entities/Roles/AlphaColor.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; using StandardColor = System.Drawing.Color; namespace Kook; @@ -8,7 +7,7 @@ namespace Kook; /// 表示 KOOK 中使用的带有不透明度通道的颜色。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public readonly struct AlphaColor : IEquatable +public readonly record struct AlphaColor { /// /// 获取一个 KOOK 中带有不透明度通道的颜色的最大值的原始值。 @@ -178,18 +177,6 @@ public AlphaColor(float r, float g, float b, float a) | (uint)(a * 255.0f); } - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(AlphaColor lhs, AlphaColor rhs) => lhs.RawValue == rhs.RawValue; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(AlphaColor lhs, AlphaColor rhs) => lhs.RawValue != rhs.RawValue; - /// /// 使用指定的 32 位无符号整型值初始化一个 结构的新实例。 /// @@ -205,15 +192,6 @@ public AlphaColor(float r, float g, float b, float a) /// public static implicit operator uint(AlphaColor color) => color.RawValue; - /// - public bool Equals(AlphaColor other) => RawValue == other.RawValue; - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => obj is AlphaColor other && Equals(other); - - /// - public override int GetHashCode() => (int) RawValue; - /// /// 将由 Kook.Net 定义的 颜色转换为 Kook.Net 定义的 颜色。 /// diff --git a/src/Kook.Net.Core/Entities/Roles/Color.cs b/src/Kook.Net.Core/Entities/Roles/Color.cs index 9db338e1..0ef6a4e4 100644 --- a/src/Kook.Net.Core/Entities/Roles/Color.cs +++ b/src/Kook.Net.Core/Entities/Roles/Color.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; using StandardColor = System.Drawing.Color; namespace Kook; @@ -8,7 +7,7 @@ namespace Kook; /// 表示 KOOK 中使用的颜色。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public readonly struct Color : IEquatable +public readonly record struct Color { /// /// 获取一个 KOOK 颜色的最大值的原始值。 @@ -306,18 +305,6 @@ public Color(float r, float g, float b) | (uint)(b * 255.0f); } - /// - /// 判定两个 是否相等。 - /// - /// 如果两个 相等,则为 true;否则为 false - public static bool operator ==(Color lhs, Color rhs) => lhs.RawValue == rhs.RawValue; - - /// - /// 判定两个 是否不相等。 - /// - /// 如果两个 不相等,则为 true;否则为 false - public static bool operator !=(Color lhs, Color rhs) => lhs.RawValue != rhs.RawValue; - /// /// 使用指定的 24 位无符号整型值初始化一个 结构的新实例。 /// @@ -334,16 +321,6 @@ public Color(float r, float g, float b) /// public static implicit operator uint(Color color) => color.RawValue; - /// - public bool Equals(Color other) => RawValue == other.RawValue; - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is Color other && Equals(other); - - /// - public override int GetHashCode() => (int) RawValue; - /// /// 将由 Kook.Net 定义的 颜色转换为由 .NET 定义的 颜色。 /// diff --git a/src/Kook.Net.Core/Entities/Roles/GradientColor.cs b/src/Kook.Net.Core/Entities/Roles/GradientColor.cs index c594b3df..968e6998 100644 --- a/src/Kook.Net.Core/Entities/Roles/GradientColor.cs +++ b/src/Kook.Net.Core/Entities/Roles/GradientColor.cs @@ -7,7 +7,7 @@ namespace Kook; /// 表示一个渐变色。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public readonly struct GradientColor : IEquatable +public readonly record struct GradientColor { /// /// 初始化一个 结构的新实例。 @@ -56,20 +56,4 @@ public void Deconstruct(out Color left, out Color right) public static implicit operator GradientColor((Color Left, Color Right) gradient) => new(gradient.Left, gradient.Right); private string DebuggerDisplay => $"{Left} -> {Right}"; - - /// - public bool Equals(GradientColor other) => Left.Equals(other.Left) && Right.Equals(other.Right); - - /// - public override bool Equals([NotNullWhen(true)] object? obj) => - obj is GradientColor other && Equals(other); - - /// - public override int GetHashCode() - { - unchecked - { - return (Left.GetHashCode() * 397) ^ Right.GetHashCode(); - } - } } diff --git a/src/Kook.Net.Core/Entities/Users/Nameplate.cs b/src/Kook.Net.Core/Entities/Users/Nameplate.cs index 17f89254..69b6d2bc 100644 --- a/src/Kook.Net.Core/Entities/Users/Nameplate.cs +++ b/src/Kook.Net.Core/Entities/Users/Nameplate.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Kook; diff --git a/src/Kook.Net.Core/Entities/Users/UserTag.cs b/src/Kook.Net.Core/Entities/Users/UserTag.cs index 5de00b05..6e792646 100644 --- a/src/Kook.Net.Core/Entities/Users/UserTag.cs +++ b/src/Kook.Net.Core/Entities/Users/UserTag.cs @@ -7,7 +7,7 @@ namespace Kook; /// 表示一个用户的标签。 /// [DebuggerDisplay("{DebuggerDisplay,nq}")] -public class UserTag : IEquatable +public record UserTag { /// /// 获取此用户标签的颜色。 @@ -37,34 +37,4 @@ internal static UserTag Create(Color color, AlphaColor backgroundColor, string t } private string DebuggerDisplay => Text; - - #region IEquatable - - /// - public bool Equals([NotNullWhen(true)] UserTag? other) - { - if (ReferenceEquals(null, other)) - return false; - if (ReferenceEquals(this, other)) - return true; - return Text == other.Text; - } - - /// - public override bool Equals([NotNullWhen(true)] object? obj) - { - if (ReferenceEquals(null, obj)) - return false; - if (ReferenceEquals(this, obj)) - return true; - if (obj.GetType() != GetType()) - return false; - - return Equals((UserTag)obj); - } - - /// - public override int GetHashCode() => Text != null ? Text.GetHashCode() : 0; - - #endregion } diff --git a/src/Kook.Net.Experimental/Rest/ExperimentalGuildHelper.cs b/src/Kook.Net.Experimental/Rest/ExperimentalGuildHelper.cs index 3d45d387..56446803 100644 --- a/src/Kook.Net.Experimental/Rest/ExperimentalGuildHelper.cs +++ b/src/Kook.Net.Experimental/Rest/ExperimentalGuildHelper.cs @@ -1,7 +1,6 @@ using System.Collections.Immutable; using Kook.API.Rest; using Kook.Rest.Extensions; -using Kook.WebSocket; namespace Kook.Rest; diff --git a/src/Kook.Net.Rest/BaseKookClient.cs b/src/Kook.Net.Rest/BaseKookClient.cs index b8d3d266..fe4b02d7 100644 --- a/src/Kook.Net.Rest/BaseKookClient.cs +++ b/src/Kook.Net.Rest/BaseKookClient.cs @@ -168,7 +168,7 @@ internal virtual async Task LoginInternalAsync(TokenType tokenType, string token } catch (ArgumentException ex) { - // log these ArgumentExceptions and allow for the client to attempt to log in any ways + // log these ArgumentExceptions and allow for the client to attempt to log in anyway await LogManager.WarningAsync("Kook", "A supplied token was invalid.", ex).ConfigureAwait(false); } } diff --git a/src/Kook.Net.Rest/Entities/Threads/ThreadHelper.cs b/src/Kook.Net.Rest/Entities/Threads/ThreadHelper.cs index 1988a43d..129c6ce4 100644 --- a/src/Kook.Net.Rest/Entities/Threads/ThreadHelper.cs +++ b/src/Kook.Net.Rest/Entities/Threads/ThreadHelper.cs @@ -1,6 +1,4 @@ using System.Collections.Immutable; -using System.Runtime.CompilerServices; -using System.Text.Json; using Kook.API; using Kook.API.Rest; using Thread = Kook.API.Thread; diff --git a/src/Kook.Net.Rest/Net/Converters/TypeIdPermissionOverwriteTargetTypeConverter.cs b/src/Kook.Net.Rest/Net/Converters/TypeIdPermissionOverwriteTargetTypeConverter.cs index 4ada33f1..9ecf88e0 100644 --- a/src/Kook.Net.Rest/Net/Converters/TypeIdPermissionOverwriteTargetTypeConverter.cs +++ b/src/Kook.Net.Rest/Net/Converters/TypeIdPermissionOverwriteTargetTypeConverter.cs @@ -1,4 +1,3 @@ -using Kook.API.Rest; using System.Text.Json; using System.Text.Json.Serialization; diff --git a/src/Kook.Net.Rest/Net/Converters/TypePermissionOverwriteTargetTypeConverter.cs b/src/Kook.Net.Rest/Net/Converters/TypePermissionOverwriteTargetTypeConverter.cs index 7dc25ab9..c8e24885 100644 --- a/src/Kook.Net.Rest/Net/Converters/TypePermissionOverwriteTargetTypeConverter.cs +++ b/src/Kook.Net.Rest/Net/Converters/TypePermissionOverwriteTargetTypeConverter.cs @@ -1,6 +1,5 @@ using System.Text.Json; using System.Text.Json.Serialization; -using Kook.API.Rest; namespace Kook.Net.Converters; diff --git a/src/Kook.Net.WebSocket/KookSocketApiClient.cs b/src/Kook.Net.WebSocket/KookSocketApiClient.cs index 95b40d3c..552d35d1 100644 --- a/src/Kook.Net.WebSocket/KookSocketApiClient.cs +++ b/src/Kook.Net.WebSocket/KookSocketApiClient.cs @@ -1,6 +1,5 @@ using System.IO.Compression; using System.Text; -using System.Diagnostics; using System.Text.Encodings.Web; using System.Text.Json; using Kook.API.Gateway; diff --git a/src/Kook.Net.WebSocket/KookSocketClient.Messages.cs b/src/Kook.Net.WebSocket/KookSocketClient.Messages.cs index b4bc8e49..08588f6d 100644 --- a/src/Kook.Net.WebSocket/KookSocketClient.Messages.cs +++ b/src/Kook.Net.WebSocket/KookSocketClient.Messages.cs @@ -4,7 +4,6 @@ using Kook.API; using Kook.API.Gateway; using Kook.API.Rest; -using Kook.Audio; using Kook.Net; using Kook.Rest; diff --git a/test/Kook.Net.Tests.Unit/CardBuilderTests.cs b/test/Kook.Net.Tests.Unit/CardBuilderTests.cs index dd15a84c..478bf5be 100644 --- a/test/Kook.Net.Tests.Unit/CardBuilderTests.cs +++ b/test/Kook.Net.Tests.Unit/CardBuilderTests.cs @@ -1,5 +1,4 @@ using System; -using System.Linq; using Xunit; namespace Kook; @@ -80,7 +79,7 @@ public void WithColor() [Fact] public void WithSize() { - foreach (CardSize size in (CardSize[])Enum.GetValues(typeof(CardSize))) + foreach (CardSize size in Enum.GetValues()) { CardBuilder builder = new CardBuilder().WithSize(size); Assert.Equal(size, builder.Size);