using Discord.Rest;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Threading.Tasks;
using Model = Discord.API.Message;
namespace Discord.WebSocket
{
///
/// Represents a WebSocket-based message.
///
public abstract class SocketMessage : SocketEntity, IMessage
{
#region SocketMessage
private long _timestampTicks;
private readonly List _reactions = new List();
private ImmutableArray _userMentions = ImmutableArray.Create();
///
/// Gets the author of this message.
///
///
/// A WebSocket-based user object.
///
public SocketUser Author { get; }
///
/// Gets the source channel of the message.
///
///
/// A WebSocket-based message channel.
///
public ISocketMessageChannel Channel { get; }
///
public MessageSource Source { get; }
///
public string Content { get; private set; }
///
public string CleanContent => MessageHelper.SanitizeMessage(this);
///
public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);
///
public virtual bool IsTTS => false;
///
public virtual bool IsPinned => false;
///
public virtual bool IsSuppressed => false;
///
public virtual DateTimeOffset? EditedTimestamp => null;
///
public virtual bool MentionedEveryone => false;
///
public MessageActivity Activity { get; private set; }
///
public MessageApplication Application { get; private set; }
///
public MessageReference Reference { get; private set; }
///
public IReadOnlyCollection Components { get; private set; }
///
/// Gets the interaction this message is a response to.
///
public MessageInteraction Interaction { get; private set; }
///
public MessageFlags? Flags { get; private set; }
///
public MessageType Type { get; private set; }
///
/// Returns all attachments included in this message.
///
///
/// Collection of attachments.
///
public virtual IReadOnlyCollection Attachments => ImmutableArray.Create();
///
/// Returns all embeds included in this message.
///
///
/// Collection of embed objects.
///
public virtual IReadOnlyCollection