| @@ -6,6 +6,7 @@ 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 | ||||
| { | { | ||||
| @@ -68,7 +69,7 @@ namespace Discord.Rest | |||||
| var guildId = (channel as IGuildChannel)?.GuildId; | var guildId = (channel as IGuildChannel)?.GuildId; | ||||
| var guild = guildId != null ? await (client as IDiscordClient).GetGuildAsync(guildId.Value, CacheMode.CacheOnly).ConfigureAwait(false) : null; | 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 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); | 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, | ||||
| @@ -96,7 +97,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 = 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)); | builder.Add(RestMessage.Create(client, channel, author, model)); | ||||
| } | } | ||||
| return builder.ToImmutable(); | return builder.ToImmutable(); | ||||
| @@ -124,7 +125,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 = 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)); | builder.Add(RestMessage.Create(client, channel, author, model)); | ||||
| } | } | ||||
| return builder.ToImmutable(); | return builder.ToImmutable(); | ||||
| @@ -237,5 +238,16 @@ namespace Discord.Rest | |||||
| public static IDisposable EnterTypingState(IMessageChannel channel, BaseDiscordClient client, | public static IDisposable EnterTypingState(IMessageChannel channel, BaseDiscordClient client, | ||||
| RequestOptions options) | RequestOptions options) | ||||
| => new TypingNotifier(client, channel, 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; | |||||
| } | |||||
| } | } | ||||
| } | } | ||||