Skip to content

Commit b0fd0d3

Browse files
committed
fix: use async instead of blocking the thread and allow for the use of the cache
1 parent fc18ebc commit b0fd0d3

2 files changed

Lines changed: 23 additions & 15 deletions

File tree

src/Discord.Net.Rest/DiscordRestApiClient.cs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1741,13 +1741,13 @@ public async Task<GuildMessageSearchData> GetGuildMessagesAsync(ulong guildId, G
17411741
Preconditions.AtMost(args.Limit, DiscordConfig.MaxGuildMessageSearchLimit, nameof(args.Limit));
17421742
Preconditions.AtMost(args.Offset, DiscordConfig.MaxGuildMessageSearchOffset, nameof(args.Offset));
17431743
Preconditions.AtMost(args.Slop, DiscordConfig.MaxGuildMessageSearchSlop, nameof(args.Slop));
1744-
Preconditions.AtMostSize(args.Content, DiscordConfig.MaxGuildMessageSearchContentLength, nameof(args.Content));
1745-
Preconditions.AtMostSize(args.ChannelIds, DiscordConfig.MaxGuildMessageSearchChannels, nameof(args.ChannelIds));
1746-
Preconditions.AtMostSize(args.AuthorIds, DiscordConfig.MaxGuildMessageSearchAuthors, nameof(args.AuthorIds));
1747-
Preconditions.AtMostSize(args.UserMentionIds, DiscordConfig.MaxGuildMessageSearchUserMentions, nameof(args.UserMentionIds));
1748-
Preconditions.AtMostSize(args.RoleMentionIds, DiscordConfig.MaxGuildMessageSearchRoleMentions, nameof(args.RoleMentionIds));
1749-
Preconditions.AtMostSize(args.RepliedToUserIds, DiscordConfig.MaxGuildMessageSearchReplyUserIds, nameof(args.RepliedToUserIds));
1750-
Preconditions.AtMostSize(args.RepliedToMessageIds, DiscordConfig.MaxGuildMessageSearchReplyMessageIds, nameof(args.RepliedToMessageIds));
1744+
Preconditions.AtMostLength(args.Content, DiscordConfig.MaxGuildMessageSearchContentLength, nameof(args.Content));
1745+
Preconditions.AtMostLength(args.ChannelIds, DiscordConfig.MaxGuildMessageSearchChannels, nameof(args.ChannelIds));
1746+
Preconditions.AtMostLength(args.AuthorIds, DiscordConfig.MaxGuildMessageSearchAuthors, nameof(args.AuthorIds));
1747+
Preconditions.AtMostLength(args.UserMentionIds, DiscordConfig.MaxGuildMessageSearchUserMentions, nameof(args.UserMentionIds));
1748+
Preconditions.AtMostLength(args.RoleMentionIds, DiscordConfig.MaxGuildMessageSearchRoleMentions, nameof(args.RoleMentionIds));
1749+
Preconditions.AtMostLength(args.RepliedToUserIds, DiscordConfig.MaxGuildMessageSearchReplyUserIds, nameof(args.RepliedToUserIds));
1750+
Preconditions.AtMostLength(args.RepliedToMessageIds, DiscordConfig.MaxGuildMessageSearchReplyMessageIds, nameof(args.RepliedToMessageIds));
17511751

17521752
options = RequestOptions.CreateOrClone(options);
17531753

@@ -1809,8 +1809,6 @@ public async Task<GuildMessageSearchData> GetGuildMessagesAsync(ulong guildId, G
18091809
if (args.IncludeNsfw.IsSpecified)
18101810
endpointQueryParams.Append($"&include_nsfw={(args.IncludeNsfw.Value ? "true" : "false")}");
18111811

1812-
Console.WriteLine($"ENDPOINT: guilds/{guildId}/messages/search?{endpointQueryParams}");
1813-
18141812
var ids = new BucketIds(guildId: guildId);
18151813
Expression<Func<string>> endpoint = () => $"guilds/{guildId}/messages/search?{endpointQueryParams}";
18161814

src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -185,12 +185,9 @@ public static async Task<GuildMessageSearchData> GetGuildMessagesAsync(IGuild gu
185185

186186
var builder = ImmutableArray.CreateBuilder<RestMessage>();
187187
if (model.ParseMessages)
188-
foreach (var msg in model.Messages)
189-
{
190-
var author = MessageHelper.GetAuthor(client, guild, msg.Author.Value, msg.WebhookId.ToNullable());
191-
var channel = GetChannelAsync(guild, client, msg.ChannelId, options).Result;
192-
builder.Add(RestMessage.Create(client, channel as IMessageChannel, author, msg));
193-
}
188+
builder.AddRange(await Task.WhenAll(
189+
model.Messages.Select(ParseMessage)
190+
));
194191

195192
return new GuildMessageSearchData
196193
{
@@ -199,6 +196,19 @@ public static async Task<GuildMessageSearchData> GetGuildMessagesAsync(IGuild gu
199196
TotalResults = model.TotalResults,
200197
Messages = builder.ToImmutable(),
201198
};
199+
200+
async Task<RestMessage> ParseMessage(Message msg)
201+
{
202+
var authorTask = guild.GetUserAsync(msg.Author.Value.Id, options: options);
203+
var channelTask = guild.GetChannelAsync(msg.ChannelId, options: options);
204+
205+
await Task.WhenAll(authorTask, channelTask);
206+
207+
var author = await authorTask;
208+
var channel = await channelTask;
209+
210+
return RestMessage.Create(client, channel as IMessageChannel, author, msg);
211+
}
202212
}
203213

204214
#endregion

0 commit comments

Comments
 (0)