diff --git a/.gitignore b/.gitignore index 3b99327..1ff8b34 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ src/EllieBot/credentials.json src/EllieBot/old_credentials.json src/EllieBot/credentials.json.bak src/EllieBot/data/EllieBot.db +ellie-menu.ps1 # Created by https://www.gitignore.io/api/visualstudio,visualstudiocode,windows,linux,macos diff --git a/EllieBot.sln b/EllieBot.sln index 267f7b4..306d678 100644 --- a/EllieBot.sln +++ b/EllieBot.sln @@ -7,9 +7,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{B28FB883-968 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{6C633450-E6C2-47ED-A7AA-7367232F703A}" ProjectSection(SolutionItems) = preProject - build.ps1 = build.ps1 CHANGELOG.md = CHANGELOG.md Dockerfile = Dockerfile + ellie-menu.ps1 = ellie-menu.ps1 LICENSE = LICENSE migrate.ps1 = migrate.ps1 README.md = README.md diff --git a/src/EllieBot/Bot.cs b/src/EllieBot/Bot.cs index a549e65..8231479 100644 --- a/src/EllieBot/Bot.cs +++ b/src/EllieBot/Bot.cs @@ -90,16 +90,16 @@ public sealed class Bot : IBot public IReadOnlyList GetCurrentGuildIds() => Client.Guilds.Select(x => x.Id).ToList().AsReadOnly(); - private void AddServices() + private async Task AddServices() { var startingGuildIdList = GetCurrentGuildIds(); var startTime = Stopwatch.GetTimestamp(); var bot = Client.CurrentUser; - using (var uow = _db.GetDbContext()) + await using (var uow = _db.GetDbContext()) { uow.EnsureUserCreated(bot.Id, bot.Username, bot.Discriminator, bot.AvatarId); - AllGuildConfigs = uow.GuildConfigs.GetAllGuildConfigs(startingGuildIdList); + AllGuildConfigs = await uow.GuildConfigs.GetAllGuildConfigs(startingGuildIdList); } // var svcs = new StandardKernel(new NinjectSettings() @@ -265,7 +265,7 @@ public sealed class Bot : IBot Log.Information("Shard {ShardId} loading services...", Client.ShardId); try { - AddServices(); + await AddServices(); } catch (Exception ex) { diff --git a/src/EllieBot/Db/Extensions/GuildConfigExtensions.cs b/src/EllieBot/Db/Extensions/GuildConfigExtensions.cs index 1c5a27d..d1471ad 100644 --- a/src/EllieBot/Db/Extensions/GuildConfigExtensions.cs +++ b/src/EllieBot/Db/Extensions/GuildConfigExtensions.cs @@ -1,5 +1,6 @@ #nullable disable using Microsoft.EntityFrameworkCore; +using LinqToDB.EntityFrameworkCore; using EllieBot.Db.Models; namespace EllieBot.Db; @@ -42,7 +43,7 @@ public static class GuildConfigExtensions } private static IQueryable IncludeEverything(this DbSet configs) - => configs.AsQueryable() + => configs .AsSplitQuery() .Include(gc => gc.CommandCooldowns) .Include(gc => gc.FollowedStreams) @@ -51,14 +52,13 @@ public static class GuildConfigExtensions .Include(gc => gc.XpSettings) .ThenInclude(x => x.ExclusionList); - public static IReadOnlyCollection GetAllGuildConfigs( + public static Task GetAllGuildConfigs( this DbSet configs, IReadOnlyList availableGuilds) => configs.IncludeEverything() .AsNoTracking() .Where(x => availableGuilds.Contains(x.GuildId)) - .ToList() - .AsReadOnly(); + .ToArrayAsyncEF(); /// /// Gets and creates if it doesn't exist a config for a guild.