diff --git a/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs b/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs index de80447953..42c849b276 100644 --- a/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs +++ b/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Drawing; using System.Globalization; @@ -719,6 +720,7 @@ namespace Tgstation.Server.Host.Components.Chat.Providers var remapRequired = false; var guildsClient = serviceProvider.GetRequiredService(); + var guildTasks = new ConcurrentDictionary>>(); async ValueTask>> GetModelChannelFromDBChannel(Models.ChatChannel channelFromDB) { @@ -750,17 +752,28 @@ namespace Tgstation.Server.Host.Components.Chat.Providers var guildId = discordChannelResponse.Entity.GuildID.Value; - var guildsResponse = await guildsClient.GetGuildAsync( + var added = false; + var guildsResponse = await guildTasks.GetOrAdd( guildId, - false, - cancellationToken); + localGuildId => + { + added = true; + return guildsClient.GetGuildAsync( + localGuildId, + false, + cancellationToken); + }); if (!guildsResponse.IsSuccess) { - Logger.LogWarning( - "Error retrieving discord guild {guildID}: {result}", - guildId, - guildsResponse.LogFormat()); - remapRequired |= true; + if (added) + { + Logger.LogWarning( + "Error retrieving discord guild {guildID}: {result}", + guildId, + guildsResponse.LogFormat()); + remapRequired |= true; + } + return null; }