| @@ -6,6 +6,7 @@ using System.IO; | |||
| using System.Linq; | |||
| using System.Threading.Tasks; | |||
| using Model = Discord.API.Channel; | |||
| using UserModel = Discord.API.User; | |||
| namespace Discord.Rest | |||
| { | |||
| @@ -68,7 +69,7 @@ namespace Discord.Rest | |||
| var guildId = (channel as IGuildChannel)?.GuildId; | |||
| var guild = guildId != null ? await (client as IDiscordClient).GetGuildAsync(guildId.Value, CacheMode.CacheOnly).ConfigureAwait(false) : null; | |||
| var model = await client.ApiClient.GetChannelMessageAsync(channel.Id, id, options).ConfigureAwait(false); | |||
| var author = guild != null ? await guild.GetUserAsync(model.Author.Value.Id, CacheMode.CacheOnly).ConfigureAwait(false) : null; | |||
| var author = GetAuthor(client, guild, model.Author.Value); | |||
| return RestMessage.Create(client, channel, author, model); | |||
| } | |||
| public static IAsyncEnumerable<IReadOnlyCollection<RestMessage>> GetMessagesAsync(IMessageChannel channel, BaseDiscordClient client, | |||
| @@ -96,7 +97,7 @@ namespace Discord.Rest | |||
| var builder = ImmutableArray.CreateBuilder<RestMessage>(); | |||
| foreach (var model in models) | |||
| { | |||
| var author = guild != null ? await guild.GetUserAsync(model.Author.Value.Id, CacheMode.CacheOnly).ConfigureAwait(false) : null; | |||
| var author = GetAuthor(client, guild, model.Author.Value); | |||
| builder.Add(RestMessage.Create(client, channel, author, model)); | |||
| } | |||
| return builder.ToImmutable(); | |||
| @@ -124,7 +125,7 @@ namespace Discord.Rest | |||
| var builder = ImmutableArray.CreateBuilder<RestMessage>(); | |||
| foreach (var model in models) | |||
| { | |||
| var author = guild != null ? await guild.GetUserAsync(model.Author.Value.Id, CacheMode.CacheOnly).ConfigureAwait(false) : null; | |||
| var author = GetAuthor(client, guild, model.Author.Value); | |||
| builder.Add(RestMessage.Create(client, channel, author, model)); | |||
| } | |||
| return builder.ToImmutable(); | |||
| @@ -237,5 +238,16 @@ namespace Discord.Rest | |||
| public static IDisposable EnterTypingState(IMessageChannel channel, BaseDiscordClient client, | |||
| RequestOptions options) | |||
| => new TypingNotifier(client, channel, options); | |||
| //Helpers | |||
| private static IUser GetAuthor(BaseDiscordClient client, IGuild guild, UserModel model) | |||
| { | |||
| IUser author = null; | |||
| if (guild != null) | |||
| author = guild.GetUserAsync(model.Id, CacheMode.CacheOnly).Result; | |||
| if (author == null) | |||
| author = RestUser.Create(client, model); | |||
| return author; | |||
| } | |||
| } | |||
| } | |||