Browse Source

Fix system messages not including mentioned users. Added ContextMenuCommand message type

pull/1923/head
quin lynch 3 years ago
parent
commit
b828dd6866
9 changed files with 202 additions and 98 deletions
  1. +26
    -6
      src/Discord.Net.Core/Discord.Net.Core.xml
  2. +10
    -6
      src/Discord.Net.Core/Entities/Messages/MessageType.cs
  3. +1
    -1
      src/Discord.Net.Rest/API/Common/Message.cs
  4. +96
    -9
      src/Discord.Net.Rest/Discord.Net.Rest.xml
  5. +21
    -4
      src/Discord.Net.Rest/Entities/Messages/RestMessage.cs
  6. +1
    -20
      src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs
  7. +16
    -19
      src/Discord.Net.WebSocket/Discord.Net.WebSocket.xml
  8. +30
    -7
      src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs
  9. +1
    -26
      src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs

+ 26
- 6
src/Discord.Net.Core/Discord.Net.Core.xml View File

@@ -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">


+ 10
- 6
src/Discord.Net.Core/Entities/Messages/MessageType.cs View File

@@ -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,
}
}

+ 1
- 1
src/Discord.Net.Rest/API/Common/Message.cs View File

@@ -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")]


+ 96
- 9
src/Discord.Net.Rest/Discord.Net.Rest.xml View File

@@ -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>


+ 21
- 4
src/Discord.Net.Rest/Entities/Messages/RestMessage.cs View File

@@ -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)


+ 1
- 20
src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs View File

@@ -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;
}



+ 16
- 19
src/Discord.Net.WebSocket/Discord.Net.WebSocket.xml View File

@@ -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>


+ 30
- 7
src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs View File

@@ -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;
}


+ 1
- 26
src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs View File

@@ -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;
}



Loading…
Cancel
Save