@@ -1085,6 +1085,21 @@ | |||
A sticker was deleted. | |||
</summary> | |||
</member> | |||
<member name="F:Discord.ActionType.ThreadCreate"> | |||
<summary> | |||
A thread was created. | |||
</summary> | |||
</member> | |||
<member name="F:Discord.ActionType.ThreadUpdate"> | |||
<summary> | |||
A thread was updated. | |||
</summary> | |||
</member> | |||
<member name="F:Discord.ActionType.ThreadDelete"> | |||
<summary> | |||
A thread was deleted. | |||
</summary> | |||
</member> | |||
<member name="T:Discord.IAuditLogData"> | |||
<summary> | |||
Represents data applied to an <see cref="T:Discord.IAuditLogEntry"/>. | |||
@@ -4981,7 +4996,7 @@ | |||
</member> | |||
<member name="P:Discord.IApplicationCommandOption.ChannelTypes"> | |||
<summary> | |||
The allowed channel types for this option. | |||
The allowed channel types for this option. | |||
</summary> | |||
</member> | |||
<member name="T:Discord.IApplicationCommandOptionChoice"> | |||
@@ -8286,15 +8301,15 @@ | |||
The message is an inline reply. | |||
</summary> | |||
<remarks> | |||
Only available in API v8 | |||
Only available in API v8. | |||
</remarks> | |||
</member> | |||
<member name="F:Discord.MessageType.ApplicationCommand"> | |||
<summary> | |||
The message is an Application Command | |||
The message is an Application Command. | |||
</summary> | |||
<remarks> | |||
Only available in API v8 | |||
Only available in API v8. | |||
</remarks> | |||
</member> | |||
<member name="F:Discord.MessageType.ThreadStarterMessage"> | |||
@@ -8302,12 +8317,17 @@ | |||
The message that starts a thread. | |||
</summary> | |||
<remarks> | |||
Only available in API v9 | |||
Only available in API v9. | |||
</remarks> | |||
</member> | |||
<member name="F:Discord.MessageType.GuildInviteReminder"> | |||
<summary> | |||
The message for a invite reminder | |||
The message for a invite reminder. | |||
</summary> | |||
</member> | |||
<member name="F:Discord.MessageType.ContextMenuCommand"> | |||
<summary> | |||
The message for a context menu command. | |||
</summary> | |||
</member> | |||
<member name="T:Discord.ReactionMetadata"> | |||
@@ -81,26 +81,30 @@ namespace Discord | |||
/// The message is an inline reply. | |||
/// </summary> | |||
/// <remarks> | |||
/// Only available in API v8 | |||
/// Only available in API v8. | |||
/// </remarks> | |||
Reply = 19, | |||
/// <summary> | |||
/// The message is an Application Command | |||
/// The message is an Application Command. | |||
/// </summary> | |||
/// <remarks> | |||
/// Only available in API v8 | |||
/// Only available in API v8. | |||
/// </remarks> | |||
ApplicationCommand = 20, | |||
/// <summary> | |||
/// The message that starts a thread. | |||
/// </summary> | |||
/// <remarks> | |||
/// Only available in API v9 | |||
/// Only available in API v9. | |||
/// </remarks> | |||
ThreadStarterMessage = 21, | |||
/// <summary> | |||
/// The message for a invite reminder | |||
/// The message for a invite reminder. | |||
/// </summary> | |||
GuildInviteReminder = 22 | |||
GuildInviteReminder = 22, | |||
/// <summary> | |||
/// The message for a context menu command. | |||
/// </summary> | |||
ContextMenuCommand = 23, | |||
} | |||
} |
@@ -32,7 +32,7 @@ namespace Discord.API | |||
[JsonProperty("mention_everyone")] | |||
public Optional<bool> MentionEveryone { get; set; } | |||
[JsonProperty("mentions")] | |||
public Optional<EntityOrId<User>[]> UserMentions { get; set; } | |||
public Optional<User[]> UserMentions { get; set; } | |||
[JsonProperty("mention_roles")] | |||
public Optional<ulong[]> RoleMentions { get; set; } | |||
[JsonProperty("attachments")] | |||
@@ -1507,6 +1507,96 @@ | |||
A role information object containing the role information after the changes were made. | |||
</returns> | |||
</member> | |||
<member name="T:Discord.Rest.StageInfo"> | |||
<summary> | |||
Represents information for a stage. | |||
</summary> | |||
</member> | |||
<member name="P:Discord.Rest.StageInfo.Topic"> | |||
<summary> | |||
Gets the topic of the stage channel. | |||
</summary> | |||
</member> | |||
<member name="P:Discord.Rest.StageInfo.PrivacyLevel"> | |||
<summary> | |||
Gets the privacy level of the stage channel. | |||
</summary> | |||
</member> | |||
<member name="P:Discord.Rest.StageInfo.User"> | |||
<summary> | |||
Gets the user who started the stage channel. | |||
</summary> | |||
</member> | |||
<member name="T:Discord.Rest.StageInstanceCreateAuditLogData"> | |||
<summary> | |||
Contains a piece of audit log data related to a stage going live. | |||
</summary> | |||
</member> | |||
<member name="P:Discord.Rest.StageInstanceCreateAuditLogData.Topic"> | |||
<summary> | |||
Gets the topic of the stage channel. | |||
</summary> | |||
</member> | |||
<member name="P:Discord.Rest.StageInstanceCreateAuditLogData.PrivacyLevel"> | |||
<summary> | |||
Gets the privacy level of the stage channel. | |||
</summary> | |||
</member> | |||
<member name="P:Discord.Rest.StageInstanceCreateAuditLogData.User"> | |||
<summary> | |||
Gets the user who started the stage channel. | |||
</summary> | |||
</member> | |||
<member name="P:Discord.Rest.StageInstanceCreateAuditLogData.StageChannelId"> | |||
<summary> | |||
Gets the Id of the stage channel. | |||
</summary> | |||
</member> | |||
<member name="T:Discord.Rest.StageInstanceDeleteAuditLogData"> | |||
<summary> | |||
Contains a piece of audit log data related to a stage instance deleted. | |||
</summary> | |||
</member> | |||
<member name="P:Discord.Rest.StageInstanceDeleteAuditLogData.Topic"> | |||
<summary> | |||
Gets the topic of the stage channel. | |||
</summary> | |||
</member> | |||
<member name="P:Discord.Rest.StageInstanceDeleteAuditLogData.PrivacyLevel"> | |||
<summary> | |||
Gets the privacy level of the stage channel. | |||
</summary> | |||
</member> | |||
<member name="P:Discord.Rest.StageInstanceDeleteAuditLogData.User"> | |||
<summary> | |||
Gets the user who started the stage channel. | |||
</summary> | |||
</member> | |||
<member name="P:Discord.Rest.StageInstanceDeleteAuditLogData.StageChannelId"> | |||
<summary> | |||
Gets the Id of the stage channel. | |||
</summary> | |||
</member> | |||
<member name="T:Discord.Rest.StageInstanceUpdatedAuditLogData"> | |||
<summary> | |||
Contains a piece of audit log data related to a stage instance update. | |||
</summary> | |||
</member> | |||
<member name="P:Discord.Rest.StageInstanceUpdatedAuditLogData.StageChannelId"> | |||
<summary> | |||
Gets the Id of the stage channel. | |||
</summary> | |||
</member> | |||
<member name="P:Discord.Rest.StageInstanceUpdatedAuditLogData.Before"> | |||
<summary> | |||
Gets the stage information before the changes. | |||
</summary> | |||
</member> | |||
<member name="P:Discord.Rest.StageInstanceUpdatedAuditLogData.After"> | |||
<summary> | |||
Gets the stage information after the changes. | |||
</summary> | |||
</member> | |||
<member name="T:Discord.Rest.UnbanAuditLogData"> | |||
<summary> | |||
Contains a piece of audit log data related to an unban. | |||
@@ -4031,7 +4121,7 @@ | |||
</member> | |||
<member name="P:Discord.Rest.RestApplicationCommandOption.ChannelTypes"> | |||
<summary> | |||
The allowed channel types for this option. | |||
The allowed channel types for this option. | |||
</summary> | |||
</member> | |||
<member name="T:Discord.Rest.RestGlobalCommand"> | |||
@@ -4341,11 +4431,6 @@ | |||
<member name="P:Discord.Rest.RestMessage.MentionedRoleIds"> | |||
<inheritdoc /> | |||
</member> | |||
<member name="P:Discord.Rest.RestMessage.MentionedUsers"> | |||
<summary> | |||
Gets a collection of the mentioned users in the message. | |||
</summary> | |||
</member> | |||
<member name="P:Discord.Rest.RestMessage.Tags"> | |||
<inheritdoc /> | |||
</member> | |||
@@ -4373,6 +4458,11 @@ | |||
<member name="P:Discord.Rest.RestMessage.Components"> | |||
<inheritdoc/> | |||
</member> | |||
<member name="P:Discord.Rest.RestMessage.MentionedUsers"> | |||
<summary> | |||
Gets a collection of the mentioned users in the message. | |||
</summary> | |||
</member> | |||
<member name="M:Discord.Rest.RestMessage.UpdateAsync(Discord.RequestOptions)"> | |||
<inheritdoc /> | |||
</member> | |||
@@ -4478,9 +4568,6 @@ | |||
<member name="P:Discord.Rest.RestUserMessage.MentionedRoleIds"> | |||
<inheritdoc /> | |||
</member> | |||
<member name="P:Discord.Rest.RestUserMessage.MentionedUsers"> | |||
<inheritdoc /> | |||
</member> | |||
<member name="P:Discord.Rest.RestUserMessage.Tags"> | |||
<inheritdoc /> | |||
</member> | |||
@@ -15,6 +15,7 @@ namespace Discord.Rest | |||
{ | |||
private long _timestampTicks; | |||
private ImmutableArray<RestReaction> _reactions = ImmutableArray.Create<RestReaction>(); | |||
private ImmutableArray<RestUser> _userMentions = ImmutableArray.Create<RestUser>(); | |||
/// <inheritdoc /> | |||
public IMessageChannel Channel { get; } | |||
@@ -56,10 +57,6 @@ namespace Discord.Rest | |||
public virtual IReadOnlyCollection<ulong> MentionedChannelIds => ImmutableArray.Create<ulong>(); | |||
/// <inheritdoc /> | |||
public virtual IReadOnlyCollection<ulong> MentionedRoleIds => ImmutableArray.Create<ulong>(); | |||
/// <summary> | |||
/// Gets a collection of the mentioned users in the message. | |||
/// </summary> | |||
public virtual IReadOnlyCollection<RestUser> MentionedUsers => ImmutableArray.Create<RestUser>(); | |||
/// <inheritdoc /> | |||
public virtual IReadOnlyCollection<ITag> Tags => ImmutableArray.Create<ITag>(); | |||
/// <inheritdoc /> | |||
@@ -80,6 +77,10 @@ namespace Discord.Rest | |||
/// <inheritdoc/> | |||
public IReadOnlyCollection<ActionRowComponent> Components { get; private set; } | |||
/// <summary> | |||
/// Gets a collection of the mentioned users in the message. | |||
/// </summary> | |||
public IReadOnlyCollection<RestUser> MentionedUsers => _userMentions; | |||
internal RestMessage(BaseDiscordClient discord, ulong id, IMessageChannel channel, IUser author, MessageSource source) | |||
: base(discord, id) | |||
@@ -210,6 +211,22 @@ namespace Discord.Rest | |||
} | |||
else | |||
_reactions = ImmutableArray.Create<RestReaction>(); | |||
if (model.UserMentions.IsSpecified) | |||
{ | |||
var value = model.UserMentions.Value; | |||
if (value.Length > 0) | |||
{ | |||
var newMentions = ImmutableArray.CreateBuilder<RestUser>(value.Length); | |||
for (int i = 0; i < value.Length; i++) | |||
{ | |||
var val = value[i]; | |||
if (val != null) | |||
newMentions.Add(RestUser.Create(Discord, val)); | |||
} | |||
_userMentions = newMentions.ToImmutable(); | |||
} | |||
} | |||
} | |||
/// <inheritdoc /> | |||
public async Task UpdateAsync(RequestOptions options = null) | |||
@@ -20,7 +20,6 @@ namespace Discord.Rest | |||
private ImmutableArray<Embed> _embeds = ImmutableArray.Create<Embed>(); | |||
private ImmutableArray<ITag> _tags = ImmutableArray.Create<ITag>(); | |||
private ImmutableArray<ulong> _roleMentionIds = ImmutableArray.Create<ulong>(); | |||
private ImmutableArray<RestUser> _userMentions = ImmutableArray.Create<RestUser>(); | |||
private ImmutableArray<StickerItem> _stickers = ImmutableArray.Create<StickerItem>(); | |||
/// <inheritdoc /> | |||
@@ -42,8 +41,6 @@ namespace Discord.Rest | |||
/// <inheritdoc /> | |||
public override IReadOnlyCollection<ulong> MentionedRoleIds => _roleMentionIds; | |||
/// <inheritdoc /> | |||
public override IReadOnlyCollection<RestUser> MentionedUsers => _userMentions; | |||
/// <inheritdoc /> | |||
public override IReadOnlyCollection<ITag> Tags => _tags; | |||
/// <inheritdoc /> | |||
public override IReadOnlyCollection<StickerItem> Stickers => _stickers; | |||
@@ -104,28 +101,12 @@ namespace Discord.Rest | |||
_embeds = ImmutableArray.Create<Embed>(); | |||
} | |||
if (model.UserMentions.IsSpecified) | |||
{ | |||
var value = model.UserMentions.Value; | |||
if (value.Length > 0) | |||
{ | |||
var newMentions = ImmutableArray.CreateBuilder<RestUser>(value.Length); | |||
for (int i = 0; i < value.Length; i++) | |||
{ | |||
var val = value[i]; | |||
if (val.Object != null) | |||
newMentions.Add(RestUser.Create(Discord, val.Object)); | |||
} | |||
_userMentions = newMentions.ToImmutable(); | |||
} | |||
} | |||
var guildId = (Channel as IGuildChannel)?.GuildId; | |||
var guild = guildId != null ? (Discord as IDiscordClient).GetGuildAsync(guildId.Value, CacheMode.CacheOnly).Result : null; | |||
if (model.Content.IsSpecified) | |||
{ | |||
var text = model.Content.Value; | |||
_tags = MessageHelper.ParseTags(text, null, guild, _userMentions); | |||
_tags = MessageHelper.ParseTags(text, null, guild, MentionedUsers); | |||
model.Content = text; | |||
} | |||
@@ -3933,7 +3933,7 @@ | |||
<member name="M:Discord.WebSocket.SocketMessageComponent.FollowupAsync(System.String,Discord.Embed[],System.Boolean,System.Boolean,Discord.AllowedMentions,Discord.RequestOptions,Discord.MessageComponent,Discord.Embed)"> | |||
<inheritdoc/> | |||
</member> | |||
<member name="M:Discord.WebSocket.SocketMessageComponent.FollowupWithFileAsync(System.String,System.IO.Stream,System.String,Discord.Embed[],System.Boolean,System.Boolean,Discord.AllowedMentions,Discord.RequestOptions,Discord.MessageComponent,Discord.Embed)"> | |||
<member name="M:Discord.WebSocket.SocketMessageComponent.FollowupWithFileAsync(System.IO.Stream,System.String,System.String,Discord.Embed[],System.Boolean,System.Boolean,Discord.AllowedMentions,Discord.RequestOptions,Discord.MessageComponent,Discord.Embed)"> | |||
<inheritdoc/> | |||
</member> | |||
<member name="M:Discord.WebSocket.SocketMessageComponent.FollowupWithFileAsync(System.String,System.String,System.String,Discord.Embed[],System.Boolean,System.Boolean,Discord.AllowedMentions,Discord.RequestOptions,Discord.MessageComponent,Discord.Embed)"> | |||
@@ -4020,7 +4020,7 @@ | |||
<member name="M:Discord.WebSocket.SocketAutocompleteInteraction.FollowupAsync(System.String,Discord.Embed[],System.Boolean,System.Boolean,Discord.AllowedMentions,Discord.RequestOptions,Discord.MessageComponent,Discord.Embed)"> | |||
<inheritdoc/> | |||
</member> | |||
<member name="M:Discord.WebSocket.SocketAutocompleteInteraction.FollowupWithFileAsync(System.String,System.IO.Stream,System.String,Discord.Embed[],System.Boolean,System.Boolean,Discord.AllowedMentions,Discord.RequestOptions,Discord.MessageComponent,Discord.Embed)"> | |||
<member name="M:Discord.WebSocket.SocketAutocompleteInteraction.FollowupWithFileAsync(System.IO.Stream,System.String,System.String,Discord.Embed[],System.Boolean,System.Boolean,Discord.AllowedMentions,Discord.RequestOptions,Discord.MessageComponent,Discord.Embed)"> | |||
<inheritdoc/> | |||
</member> | |||
<member name="M:Discord.WebSocket.SocketAutocompleteInteraction.FollowupWithFileAsync(System.String,System.String,System.String,Discord.Embed[],System.Boolean,System.Boolean,Discord.AllowedMentions,Discord.RequestOptions,Discord.MessageComponent,Discord.Embed)"> | |||
@@ -4191,7 +4191,7 @@ | |||
</member> | |||
<member name="P:Discord.WebSocket.SocketApplicationCommandOption.ChannelTypes"> | |||
<summary> | |||
The allowed channel types for this option. | |||
The allowed channel types for this option. | |||
</summary> | |||
</member> | |||
<member name="T:Discord.WebSocket.SocketCommandBase"> | |||
@@ -4220,7 +4220,7 @@ | |||
<member name="M:Discord.WebSocket.SocketCommandBase.FollowupAsync(System.String,Discord.Embed[],System.Boolean,System.Boolean,Discord.AllowedMentions,Discord.RequestOptions,Discord.MessageComponent,Discord.Embed)"> | |||
<inheritdoc/> | |||
</member> | |||
<member name="M:Discord.WebSocket.SocketCommandBase.FollowupWithFileAsync(System.String,System.IO.Stream,System.String,Discord.Embed[],System.Boolean,System.Boolean,Discord.AllowedMentions,Discord.RequestOptions,Discord.MessageComponent,Discord.Embed)"> | |||
<member name="M:Discord.WebSocket.SocketCommandBase.FollowupWithFileAsync(System.IO.Stream,System.String,System.String,Discord.Embed[],System.Boolean,System.Boolean,Discord.AllowedMentions,Discord.RequestOptions,Discord.MessageComponent,Discord.Embed)"> | |||
<inheritdoc/> | |||
</member> | |||
<member name="M:Discord.WebSocket.SocketCommandBase.FollowupWithFileAsync(System.String,System.String,System.String,Discord.Embed[],System.Boolean,System.Boolean,Discord.AllowedMentions,Discord.RequestOptions,Discord.MessageComponent,Discord.Embed)"> | |||
@@ -4326,7 +4326,7 @@ | |||
The sent message. | |||
</returns> | |||
</member> | |||
<member name="M:Discord.WebSocket.SocketInteraction.FollowupWithFileAsync(System.String,System.IO.Stream,System.String,Discord.Embed[],System.Boolean,System.Boolean,Discord.AllowedMentions,Discord.RequestOptions,Discord.MessageComponent,Discord.Embed)"> | |||
<member name="M:Discord.WebSocket.SocketInteraction.FollowupWithFileAsync(System.IO.Stream,System.String,System.String,Discord.Embed[],System.Boolean,System.Boolean,Discord.AllowedMentions,Discord.RequestOptions,Discord.MessageComponent,Discord.Embed)"> | |||
<summary> | |||
Sends a followup message for this interaction. | |||
</summary> | |||
@@ -4366,7 +4366,7 @@ | |||
<summary> | |||
Gets the original response for this interaction. | |||
</summary> | |||
<param name="options">The request options for this async request.</param> | |||
<param name="options">The request options for this <see langword="async"/> request.</param> | |||
<returns>A <see cref="T:Discord.Rest.RestInteractionMessage"/> that represents the initial response.</returns> | |||
</member> | |||
<member name="M:Discord.WebSocket.SocketInteraction.ModifyOriginalResponseAsync(System.Action{Discord.MessageProperties},Discord.RequestOptions)"> | |||
@@ -4374,7 +4374,7 @@ | |||
Edits original response for this interaction. | |||
</summary> | |||
<param name="func">A delegate containing the properties to modify the message with.</param> | |||
<param name="options">The request options for this async request.</param> | |||
<param name="options">The request options for this <see langword="async"/> request.</param> | |||
<returns>A <see cref="T:Discord.Rest.RestInteractionMessage"/> that represents the initial response.</returns> | |||
</member> | |||
<member name="M:Discord.WebSocket.SocketInteraction.DeferAsync(System.Boolean,Discord.RequestOptions)"> | |||
@@ -4382,7 +4382,7 @@ | |||
Acknowledges this interaction. | |||
</summary> | |||
<param name="ephemeral"><see langword="true"/> to send this message ephemerally, otherwise <see langword="false"/>.</param> | |||
<param name="options">The request options for this async request.</param> | |||
<param name="options">The request options for this <see langword="async"/> request.</param> | |||
<returns> | |||
A task that represents the asynchronous operation of acknowledging the interaction. | |||
</returns> | |||
@@ -4612,14 +4612,6 @@ | |||
Collection of WebSocket-based roles. | |||
</returns> | |||
</member> | |||
<member name="P:Discord.WebSocket.SocketMessage.MentionedUsers"> | |||
<summary> | |||
Returns the users mentioned in this message. | |||
</summary> | |||
<returns> | |||
Collection of WebSocket-based users. | |||
</returns> | |||
</member> | |||
<member name="P:Discord.WebSocket.SocketMessage.Tags"> | |||
<inheritdoc /> | |||
</member> | |||
@@ -4629,6 +4621,14 @@ | |||
<member name="P:Discord.WebSocket.SocketMessage.Reactions"> | |||
<inheritdoc /> | |||
</member> | |||
<member name="P:Discord.WebSocket.SocketMessage.MentionedUsers"> | |||
<summary> | |||
Returns the users mentioned in this message. | |||
</summary> | |||
<returns> | |||
Collection of WebSocket-based users. | |||
</returns> | |||
</member> | |||
<member name="P:Discord.WebSocket.SocketMessage.Timestamp"> | |||
<inheritdoc /> | |||
</member> | |||
@@ -4801,9 +4801,6 @@ | |||
<member name="P:Discord.WebSocket.SocketUserMessage.MentionedRoles"> | |||
<inheritdoc /> | |||
</member> | |||
<member name="P:Discord.WebSocket.SocketUserMessage.MentionedUsers"> | |||
<inheritdoc /> | |||
</member> | |||
<member name="P:Discord.WebSocket.SocketUserMessage.Stickers"> | |||
<inheritdoc /> | |||
</member> | |||
@@ -17,6 +17,7 @@ namespace Discord.WebSocket | |||
#region SocketMessage | |||
private long _timestampTicks; | |||
private readonly List<SocketReaction> _reactions = new List<SocketReaction>(); | |||
private ImmutableArray<SocketUser> _userMentions = ImmutableArray.Create<SocketUser>(); | |||
/// <summary> | |||
/// Gets the author of this message. | |||
@@ -100,19 +101,19 @@ namespace Discord.WebSocket | |||
/// Collection of WebSocket-based roles. | |||
/// </returns> | |||
public virtual IReadOnlyCollection<SocketRole> MentionedRoles => ImmutableArray.Create<SocketRole>(); | |||
/// <summary> | |||
/// Returns the users mentioned in this message. | |||
/// </summary> | |||
/// <returns> | |||
/// Collection of WebSocket-based users. | |||
/// </returns> | |||
public virtual IReadOnlyCollection<SocketUser> MentionedUsers => ImmutableArray.Create<SocketUser>(); | |||
/// <inheritdoc /> | |||
public virtual IReadOnlyCollection<ITag> Tags => ImmutableArray.Create<ITag>(); | |||
/// <inheritdoc /> | |||
public virtual IReadOnlyCollection<SocketSticker> Stickers => ImmutableArray.Create<SocketSticker>(); | |||
/// <inheritdoc /> | |||
public IReadOnlyDictionary<IEmote, ReactionMetadata> Reactions => _reactions.GroupBy(r => r.Emote).ToDictionary(x => x.Key, x => new ReactionMetadata { ReactionCount = x.Count(), IsMe = x.Any(y => y.UserId == Discord.CurrentUser.Id) }); | |||
/// <summary> | |||
/// Returns the users mentioned in this message. | |||
/// </summary> | |||
/// <returns> | |||
/// Collection of WebSocket-based users. | |||
/// </returns> | |||
public IReadOnlyCollection<SocketUser> MentionedUsers => ImmutableArray.Create<SocketUser>(); | |||
/// <inheritdoc /> | |||
public DateTimeOffset Timestamp => DateTimeUtils.FromTicks(_timestampTicks); | |||
@@ -230,6 +231,28 @@ namespace Discord.WebSocket | |||
else | |||
Components = new List<ActionRowComponent>(); | |||
if (model.UserMentions.IsSpecified) | |||
{ | |||
var value = model.UserMentions.Value; | |||
if (value.Length > 0) | |||
{ | |||
var newMentions = ImmutableArray.CreateBuilder<SocketUser>(value.Length); | |||
for (int i = 0; i < value.Length; i++) | |||
{ | |||
var val = value[i]; | |||
if (val != null) | |||
{ | |||
var user = Channel.GetUserAsync(val.Id, CacheMode.CacheOnly).GetAwaiter().GetResult() as SocketUser; | |||
if (user != null) | |||
newMentions.Add(user); | |||
else | |||
newMentions.Add(SocketUnknownUser.Create(Discord, state, val)); | |||
} | |||
} | |||
_userMentions = newMentions.ToImmutable(); | |||
} | |||
} | |||
if (model.Flags.IsSpecified) | |||
Flags = model.Flags.Value; | |||
} | |||
@@ -22,7 +22,6 @@ namespace Discord.WebSocket | |||
private ImmutableArray<Embed> _embeds = ImmutableArray.Create<Embed>(); | |||
private ImmutableArray<ITag> _tags = ImmutableArray.Create<ITag>(); | |||
private ImmutableArray<SocketRole> _roleMentions = ImmutableArray.Create<SocketRole>(); | |||
private ImmutableArray<SocketUser> _userMentions = ImmutableArray.Create<SocketUser>(); | |||
private ImmutableArray<SocketSticker> _stickers = ImmutableArray.Create<SocketSticker>(); | |||
/// <inheritdoc /> | |||
@@ -46,8 +45,6 @@ namespace Discord.WebSocket | |||
/// <inheritdoc /> | |||
public override IReadOnlyCollection<SocketRole> MentionedRoles => _roleMentions; | |||
/// <inheritdoc /> | |||
public override IReadOnlyCollection<SocketUser> MentionedUsers => _userMentions; | |||
/// <inheritdoc /> | |||
public override IReadOnlyCollection<SocketSticker> Stickers => _stickers; | |||
/// <inheritdoc /> | |||
public IUserMessage ReferencedMessage => _referencedMessage; | |||
@@ -108,32 +105,10 @@ namespace Discord.WebSocket | |||
_embeds = ImmutableArray.Create<Embed>(); | |||
} | |||
if (model.UserMentions.IsSpecified) | |||
{ | |||
var value = model.UserMentions.Value; | |||
if (value.Length > 0) | |||
{ | |||
var newMentions = ImmutableArray.CreateBuilder<SocketUser>(value.Length); | |||
for (int i = 0; i < value.Length; i++) | |||
{ | |||
var val = value[i]; | |||
if (val.Object != null) | |||
{ | |||
var user = Channel.GetUserAsync(val.Object.Id, CacheMode.CacheOnly).GetAwaiter().GetResult() as SocketUser; | |||
if (user != null) | |||
newMentions.Add(user); | |||
else | |||
newMentions.Add(SocketUnknownUser.Create(Discord, state, val.Object)); | |||
} | |||
} | |||
_userMentions = newMentions.ToImmutable(); | |||
} | |||
} | |||
if (model.Content.IsSpecified) | |||
{ | |||
var text = model.Content.Value; | |||
_tags = MessageHelper.ParseTags(text, Channel, guild, _userMentions); | |||
_tags = MessageHelper.ParseTags(text, Channel, guild, MentionedUsers); | |||
model.Content = text; | |||
} | |||