// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using System.Collections.Generic; using Newtonsoft.Json; using osu.Game.Online.API.Requests.Responses; namespace osu.Game.Online.Chat { public class Message : IComparable, IEquatable { [JsonProperty(@"message_id")] public readonly long? Id; [JsonProperty(@"channel_id")] public long ChannelId; [JsonProperty(@"is_action")] public bool IsAction; [JsonProperty(@"timestamp")] public DateTimeOffset Timestamp; [JsonProperty(@"content")] public string Content; [JsonProperty(@"sender")] public APIUser Sender; [JsonConstructor] public Message() { } /// /// The text that is displayed in chat. /// public string DisplayContent { get; set; } /// /// The links found in this message. /// /// The s' and s are according to public List Links; public Message(long? id) { Id = id; } public int CompareTo(Message other) { if (!Id.HasValue) return other.Id.HasValue ? 1 : Timestamp.CompareTo(other.Timestamp); if (!other.Id.HasValue) return -1; return Id.Value.CompareTo(other.Id.Value); } public virtual bool Equals(Message other) => Id.HasValue && Id == other?.Id; // ReSharper disable once ImpureMethodCallOnReadonlyValueField public override int GetHashCode() => Id.GetHashCode(); public override string ToString() => $"[{ChannelId}] ({Id}) {Sender}: {Content}"; } }