Browse Source

Fix referencedMessage author

pull/1659/head
Paulo 4 years ago
parent
commit
e5c52a36d6
3 changed files with 21 additions and 18 deletions
  1. +3
    -15
      src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs
  2. +11
    -0
      src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs
  3. +7
    -3
      src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs

+ 3
- 15
src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs View File

@@ -6,7 +6,6 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Model = Discord.API.Channel; using Model = Discord.API.Channel;
using UserModel = Discord.API.User;


namespace Discord.Rest namespace Discord.Rest
{ {
@@ -130,7 +129,7 @@ namespace Discord.Rest
var model = await client.ApiClient.GetChannelMessageAsync(channel.Id, id, options).ConfigureAwait(false); var model = await client.ApiClient.GetChannelMessageAsync(channel.Id, id, options).ConfigureAwait(false);
if (model == null) if (model == null)
return null; return null;
var author = GetAuthor(client, guild, model.Author.Value, model.WebhookId.ToNullable());
var author = MessageHelper.GetAuthor(client, guild, model.Author.Value, model.WebhookId.ToNullable());
return RestMessage.Create(client, channel, author, model); return RestMessage.Create(client, channel, author, model);
} }
public static IAsyncEnumerable<IReadOnlyCollection<RestMessage>> GetMessagesAsync(IMessageChannel channel, BaseDiscordClient client, public static IAsyncEnumerable<IReadOnlyCollection<RestMessage>> GetMessagesAsync(IMessageChannel channel, BaseDiscordClient client,
@@ -165,7 +164,7 @@ namespace Discord.Rest
var builder = ImmutableArray.CreateBuilder<RestMessage>(); var builder = ImmutableArray.CreateBuilder<RestMessage>();
foreach (var model in models) foreach (var model in models)
{ {
var author = GetAuthor(client, guild, model.Author.Value, model.WebhookId.ToNullable());
var author = MessageHelper.GetAuthor(client, guild, model.Author.Value, model.WebhookId.ToNullable());
builder.Add(RestMessage.Create(client, channel, author, model)); builder.Add(RestMessage.Create(client, channel, author, model));
} }
return builder.ToImmutable(); return builder.ToImmutable();
@@ -193,7 +192,7 @@ namespace Discord.Rest
var builder = ImmutableArray.CreateBuilder<RestMessage>(); var builder = ImmutableArray.CreateBuilder<RestMessage>();
foreach (var model in models) foreach (var model in models)
{ {
var author = GetAuthor(client, guild, model.Author.Value, model.WebhookId.ToNullable());
var author = MessageHelper.GetAuthor(client, guild, model.Author.Value, model.WebhookId.ToNullable());
builder.Add(RestMessage.Create(client, channel, author, model)); builder.Add(RestMessage.Create(client, channel, author, model));
} }
return builder.ToImmutable(); return builder.ToImmutable();
@@ -450,16 +449,5 @@ namespace Discord.Rest
}; };
await client.ApiClient.ModifyGuildChannelAsync(channel.Id, apiArgs, options).ConfigureAwait(false); await client.ApiClient.ModifyGuildChannelAsync(channel.Id, apiArgs, options).ConfigureAwait(false);
} }

//Helpers
private static IUser GetAuthor(BaseDiscordClient client, IGuild guild, UserModel model, ulong? webhookId)
{
IUser author = null;
if (guild != null)
author = guild.GetUserAsync(model.Id, CacheMode.CacheOnly).Result;
if (author == null)
author = RestUser.Create(client, guild, model, webhookId);
return author;
}
} }
} }

+ 11
- 0
src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs View File

@@ -6,6 +6,7 @@ using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using Model = Discord.API.Message; using Model = Discord.API.Message;
using UserModel = Discord.API.User;


namespace Discord.Rest namespace Discord.Rest
{ {
@@ -299,5 +300,15 @@ namespace Discord.Rest
{ {
await client.ApiClient.CrosspostAsync(channelId, msgId, options).ConfigureAwait(false); await client.ApiClient.CrosspostAsync(channelId, msgId, options).ConfigureAwait(false);
} }

public static IUser GetAuthor(BaseDiscordClient client, IGuild guild, UserModel model, ulong? webhookId)
{
IUser author = null;
if (guild != null)
author = guild.GetUserAsync(model.Id, CacheMode.CacheOnly).Result;
if (author == null)
author = RestUser.Create(client, guild, model, webhookId);
return author;
}
} }
} }

+ 7
- 3
src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs View File

@@ -121,17 +121,21 @@ namespace Discord.Rest
} }
} }


var guildId = (Channel as IGuildChannel)?.GuildId;
var guild = guildId != null ? (Discord as IDiscordClient).GetGuildAsync(guildId.Value, CacheMode.CacheOnly).Result : null;
if (model.Content.IsSpecified) if (model.Content.IsSpecified)
{ {
var text = model.Content.Value; var text = model.Content.Value;
var guildId = (Channel as IGuildChannel)?.GuildId;
var guild = guildId != null ? (Discord as IDiscordClient).GetGuildAsync(guildId.Value, CacheMode.CacheOnly).Result : null;
_tags = MessageHelper.ParseTags(text, null, guild, _userMentions); _tags = MessageHelper.ParseTags(text, null, guild, _userMentions);
model.Content = text; model.Content = text;
} }


if (model.ReferencedMessage.IsSpecified && model.ReferencedMessage.Value != null) if (model.ReferencedMessage.IsSpecified && model.ReferencedMessage.Value != null)
_referencedMessage = RestUserMessage.Create(Discord, Channel, Author, model.ReferencedMessage.Value);
{
var refMsg = model.ReferencedMessage.Value;
IUser refMsgAuthor = MessageHelper.GetAuthor(Discord, guild, refMsg.Author.Value, refMsg.WebhookId.ToNullable());
_referencedMessage = RestUserMessage.Create(Discord, Channel, refMsgAuthor, refMsg);
}
} }


/// <inheritdoc /> /// <inheritdoc />


Loading…
Cancel
Save