mirror of
				https://gitlab.com/Kwoth/nadekobot.git
				synced 2025-11-04 00:34:26 -05:00 
			
		
		
		
	Massive cleanup
- Removed GuildConfigs repository, moved to extensions - Moved StreamSettings extension to GuildConfig extensions - namespace NadekoBot.Core has been simplified to NadekoBot in many places (more to come) - Replaced some raw delete queries with simple linqtodb queries
This commit is contained in:
		@@ -17,6 +17,7 @@ using System.Threading;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using NadekoBot.Core.Common.Configs;
 | 
			
		||||
using NadekoBot.Core.Services.Impl;
 | 
			
		||||
using NadekoBot.Modules.Administration;
 | 
			
		||||
using Serilog;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services
 | 
			
		||||
@@ -107,7 +108,7 @@ namespace NadekoBot.Core.Services
 | 
			
		||||
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                var gc = uow.GuildConfigs.ForId(guild.Id, set => set);
 | 
			
		||||
                var gc = uow._context.GuildConfigsForId(guild.Id, set => set);
 | 
			
		||||
                gc.Prefix = prefix;
 | 
			
		||||
                uow.SaveChanges();
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -7,10 +7,8 @@ namespace NadekoBot.Core.Services.Database
 | 
			
		||||
    public interface IUnitOfWork : IDisposable
 | 
			
		||||
    {
 | 
			
		||||
        NadekoContext _context { get; } 
 | 
			
		||||
        IGuildConfigRepository GuildConfigs { get; }
 | 
			
		||||
        IWaifuRepository Waifus { get; }
 | 
			
		||||
        IDiscordUserRepository DiscordUsers { get; }
 | 
			
		||||
        IXpRepository Xp { get; }
 | 
			
		||||
 | 
			
		||||
        int SaveChanges();
 | 
			
		||||
        Task<int> SaveChangesAsync();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.ComponentModel.DataAnnotations;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Models
 | 
			
		||||
namespace NadekoBot.Services.Database.Models
 | 
			
		||||
{
 | 
			
		||||
    public class ClubInfo : DbEntity
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
using System;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Models
 | 
			
		||||
namespace NadekoBot.Services.Database.Models
 | 
			
		||||
{
 | 
			
		||||
    public class DiscordUser : DbEntity
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
using System;
 | 
			
		||||
using NadekoBot.Core.Modules.Searches.Common;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
using NadekoBot.Modules.Searches.Common;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Models
 | 
			
		||||
namespace NadekoBot.Services.Database.Models
 | 
			
		||||
{
 | 
			
		||||
    public class FollowedStream : DbEntity
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
using System;
 | 
			
		||||
using NadekoBot.Common.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Models
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
using NadekoBot.Extensions;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using NadekoBot.Core.Modules.Gambling.Common;
 | 
			
		||||
using NadekoBot.Modules.Gambling.Common;
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Models
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,6 @@
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Models
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Models
 | 
			
		||||
{
 | 
			
		||||
    public class WaifuUpdate : DbEntity
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ using NadekoBot.Core.Services.Impl;
 | 
			
		||||
using System;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using Microsoft.Extensions.Logging;
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,8 @@ using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
using NadekoBot.Services.Database.Repositories;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Repositories
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -1,28 +0,0 @@
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Repositories
 | 
			
		||||
{
 | 
			
		||||
    public interface IGuildConfigRepository : IRepository<GuildConfig>
 | 
			
		||||
    {
 | 
			
		||||
        GuildConfig ForId(ulong guildId, Func<DbSet<GuildConfig>, IQueryable<GuildConfig>> includes = null);
 | 
			
		||||
        GuildConfig LogSettingsFor(ulong guildId);
 | 
			
		||||
        IEnumerable<GuildConfig> GetAllGuildConfigs(List<ulong> availableGuilds);
 | 
			
		||||
        IEnumerable<FollowedStream> GetFollowedStreams(List<ulong> included);
 | 
			
		||||
        IEnumerable<FollowedStream> GetFollowedStreams();
 | 
			
		||||
        void SetCleverbotEnabled(ulong id, bool cleverbotEnabled);
 | 
			
		||||
        IEnumerable<GuildConfig> Permissionsv2ForAll(List<ulong> include);
 | 
			
		||||
        GuildConfig GcWithPermissionsv2For(ulong guildId);
 | 
			
		||||
        XpSettings XpSettingsFor(ulong guildId);
 | 
			
		||||
        IEnumerable<GeneratingChannel> GetGeneratingChannels();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class GeneratingChannel
 | 
			
		||||
    {
 | 
			
		||||
        public ulong GuildId { get; set; }
 | 
			
		||||
        public ulong ChannelId { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,21 +1,11 @@
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Repositories
 | 
			
		||||
namespace NadekoBot.Services.Database.Repositories
 | 
			
		||||
{
 | 
			
		||||
    public interface IRepository<T> where T : DbEntity
 | 
			
		||||
    {
 | 
			
		||||
        T GetById(int id);
 | 
			
		||||
        IEnumerable<T> GetAll();
 | 
			
		||||
 | 
			
		||||
        void Add(T obj);
 | 
			
		||||
        void AddRange(params T[] objs);
 | 
			
		||||
 | 
			
		||||
        void Remove(int id);
 | 
			
		||||
        void Remove(T obj);
 | 
			
		||||
        void RemoveRange(params T[] objs);
 | 
			
		||||
 | 
			
		||||
        void Update(T obj);
 | 
			
		||||
        void UpdateRange(params T[] objs);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using NadekoBot.Services.Database.Repositories;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Repositories
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +0,0 @@
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Repositories
 | 
			
		||||
{
 | 
			
		||||
    public interface IXpRepository : IRepository<UserXpStats>
 | 
			
		||||
    {
 | 
			
		||||
        UserXpStats GetOrCreateUser(ulong guildId, ulong userId);
 | 
			
		||||
        int GetUserGuildRanking(ulong userId, ulong guildId);
 | 
			
		||||
        List<UserXpStats> GetUsersFor(ulong guildId, int page);
 | 
			
		||||
        void ResetGuildUserXp(ulong userId, ulong guildId);
 | 
			
		||||
        void ResetGuildXp(ulong guildId);
 | 
			
		||||
        List<UserXpStats> GetTopUserXps(ulong guildId, int count);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -2,6 +2,7 @@
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Modules.Xp.Common
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,9 @@
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using LinqToDB;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Modules.CustomReactions
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,12 @@
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using Discord;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Repositories;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
namespace NadekoBot.Services.Database.Repositories.Impl
 | 
			
		||||
{
 | 
			
		||||
    public class DiscordUserRepository : Repository<DiscordUser>, IDiscordUserRepository
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,41 +3,38 @@ using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using NadekoBot.Core.Services.Database;
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
namespace NadekoBot.Modules.Administration
 | 
			
		||||
{
 | 
			
		||||
    public static class MusicPlayerSettingsExtensions
 | 
			
		||||
    public static class GuildConfigExtensions
 | 
			
		||||
    {
 | 
			
		||||
        public static async Task<MusicPlayerSettings> ForGuildAsync(this DbSet<MusicPlayerSettings> settings, ulong guildId)
 | 
			
		||||
        public class GeneratingChannel
 | 
			
		||||
        {
 | 
			
		||||
            var toReturn = await settings
 | 
			
		||||
                .AsQueryable()
 | 
			
		||||
                .FirstOrDefaultAsync(x => x.GuildId == guildId);
 | 
			
		||||
 | 
			
		||||
            if (toReturn is null)
 | 
			
		||||
            {
 | 
			
		||||
                var newSettings = new MusicPlayerSettings()
 | 
			
		||||
                {
 | 
			
		||||
                    GuildId = guildId,
 | 
			
		||||
                    PlayerRepeat = PlayerRepeatType.Queue
 | 
			
		||||
                };
 | 
			
		||||
 | 
			
		||||
                await settings.AddAsync(newSettings);
 | 
			
		||||
                return newSettings;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return toReturn;
 | 
			
		||||
            public ulong GuildId { get; set; }
 | 
			
		||||
            public ulong ChannelId { get; set; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public class GuildConfigRepository : Repository<GuildConfig>, IGuildConfigRepository
 | 
			
		||||
    {
 | 
			
		||||
        public GuildConfigRepository(DbContext context) : base(context)
 | 
			
		||||
        
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets full stream role settings for the guild with the specified id.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="ctx">Db Context</param>
 | 
			
		||||
        /// <param name="guildId">Id of the guild to get stream role settings for.</param>
 | 
			
		||||
        /// <returns>Guild'p stream role settings</returns>
 | 
			
		||||
        public static StreamRoleSettings GetStreamRoleSettings(this NadekoContext ctx, ulong guildId)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
            var conf = ctx.GuildConfigsForId(guildId, set => set.Include(y => y.StreamRole)
 | 
			
		||||
                .Include(y => y.StreamRole.Whitelist)
 | 
			
		||||
                .Include(y => y.StreamRole.Blacklist));
 | 
			
		||||
 | 
			
		||||
        private List<WarningPunishment> DefaultWarnPunishments =>
 | 
			
		||||
            if (conf.StreamRole == null)
 | 
			
		||||
                conf.StreamRole = new StreamRoleSettings();
 | 
			
		||||
 | 
			
		||||
            return conf.StreamRole;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        private static List<WarningPunishment> DefaultWarnPunishments =>
 | 
			
		||||
            new List<WarningPunishment>() {
 | 
			
		||||
                new WarningPunishment() {
 | 
			
		||||
                    Count = 3,
 | 
			
		||||
@@ -49,59 +46,62 @@ namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
        public IEnumerable<GuildConfig> GetAllGuildConfigs(List<ulong> availableGuilds) =>
 | 
			
		||||
            IncludeEverything()
 | 
			
		||||
                .AsNoTracking()
 | 
			
		||||
                .Where(x => availableGuilds.Contains(x.GuildId))
 | 
			
		||||
                .ToList();
 | 
			
		||||
 | 
			
		||||
        private IQueryable<GuildConfig> IncludeEverything()
 | 
			
		||||
        private static IQueryable<GuildConfig> IncludeEverything(this DbSet<GuildConfig> configs)
 | 
			
		||||
        {
 | 
			
		||||
            return _set
 | 
			
		||||
                .AsQueryable()
 | 
			
		||||
                .Include(gc => gc.CommandCooldowns)
 | 
			
		||||
                .Include(gc => gc.FollowedStreams)
 | 
			
		||||
                .Include(gc => gc.StreamRole)
 | 
			
		||||
                .Include(gc => gc.NsfwBlacklistedTags)
 | 
			
		||||
                .Include(gc => gc.XpSettings)
 | 
			
		||||
            return configs
 | 
			
		||||
                    .AsQueryable()
 | 
			
		||||
                    .Include(gc => gc.CommandCooldowns)
 | 
			
		||||
                    .Include(gc => gc.FollowedStreams)
 | 
			
		||||
                    .Include(gc => gc.StreamRole)
 | 
			
		||||
                    .Include(gc => gc.NsfwBlacklistedTags)
 | 
			
		||||
                    .Include(gc => gc.XpSettings)
 | 
			
		||||
                    .ThenInclude(x => x.ExclusionList)
 | 
			
		||||
                .Include(gc => gc.DelMsgOnCmdChannels)
 | 
			
		||||
                .Include(gc => gc.ReactionRoleMessages)
 | 
			
		||||
                    .Include(gc => gc.DelMsgOnCmdChannels)
 | 
			
		||||
                    .Include(gc => gc.ReactionRoleMessages)
 | 
			
		||||
                    .ThenInclude(x => x.ReactionRoles)
 | 
			
		||||
                ;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static IEnumerable<GuildConfig> GetAllGuildConfigs(this DbSet<GuildConfig> configs, List<ulong> availableGuilds)
 | 
			
		||||
            => configs
 | 
			
		||||
                .IncludeEverything()
 | 
			
		||||
                .AsNoTracking()
 | 
			
		||||
                .Where(x => availableGuilds.Contains(x.GuildId))
 | 
			
		||||
                .ToList();
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets and creates if it doesn't exist a config for a guild.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="guildId">For which guild</param>
 | 
			
		||||
        /// <param name="includes">Use to manipulate the set however you want</param>
 | 
			
		||||
        /// <returns>Config for the guild</returns>
 | 
			
		||||
        public GuildConfig ForId(ulong guildId, Func<DbSet<GuildConfig>, IQueryable<GuildConfig>> includes)
 | 
			
		||||
        public static GuildConfig GuildConfigsForId(this NadekoContext ctx, ulong guildId, Func<DbSet<GuildConfig>, IQueryable<GuildConfig>> includes = null)
 | 
			
		||||
        {
 | 
			
		||||
            GuildConfig config;
 | 
			
		||||
 | 
			
		||||
            if (includes == null)
 | 
			
		||||
            {
 | 
			
		||||
                config = IncludeEverything()
 | 
			
		||||
                config = ctx
 | 
			
		||||
                    .GuildConfigs
 | 
			
		||||
                    .IncludeEverything()
 | 
			
		||||
                    .FirstOrDefault(c => c.GuildId == guildId);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                var set = includes(_set);
 | 
			
		||||
                var set = includes(ctx.GuildConfigs);
 | 
			
		||||
                config = set.FirstOrDefault(c => c.GuildId == guildId);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (config == null)
 | 
			
		||||
            {
 | 
			
		||||
                _set.Add((config = new GuildConfig
 | 
			
		||||
                ctx.GuildConfigs.Add((config = new GuildConfig
 | 
			
		||||
                {
 | 
			
		||||
                    GuildId = guildId,
 | 
			
		||||
                    Permissions = Permissionv2.GetDefaultPermlist,
 | 
			
		||||
                    WarningsInitialized = true,
 | 
			
		||||
                    WarnPunishments = DefaultWarnPunishments,
 | 
			
		||||
                }));
 | 
			
		||||
                _context.SaveChanges();
 | 
			
		||||
                ctx.SaveChanges();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!config.WarningsInitialized)
 | 
			
		||||
@@ -113,9 +113,10 @@ namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
            return config;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public GuildConfig LogSettingsFor(ulong guildId)
 | 
			
		||||
        public static GuildConfig LogSettingsFor(this NadekoContext ctx, ulong guildId)
 | 
			
		||||
        {
 | 
			
		||||
            var config = _set
 | 
			
		||||
            var config = ctx
 | 
			
		||||
                .GuildConfigs
 | 
			
		||||
                .AsQueryable()
 | 
			
		||||
                .Include(gc => gc.LogSetting)
 | 
			
		||||
                    .ThenInclude(gc => gc.IgnoredChannels)
 | 
			
		||||
@@ -123,14 +124,14 @@ namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
 | 
			
		||||
            if (config == null)
 | 
			
		||||
            {
 | 
			
		||||
                _set.Add((config = new GuildConfig
 | 
			
		||||
                ctx.GuildConfigs.Add((config = new GuildConfig
 | 
			
		||||
                {
 | 
			
		||||
                    GuildId = guildId,
 | 
			
		||||
                    Permissions = Permissionv2.GetDefaultPermlist,
 | 
			
		||||
                    WarningsInitialized = true,
 | 
			
		||||
                    WarnPunishments = DefaultWarnPunishments,
 | 
			
		||||
                }));
 | 
			
		||||
                _context.SaveChanges();
 | 
			
		||||
                ctx.SaveChanges();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!config.WarningsInitialized)
 | 
			
		||||
@@ -141,61 +142,63 @@ namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
            return config;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IEnumerable<GuildConfig> Permissionsv2ForAll(List<ulong> include)
 | 
			
		||||
        public static IEnumerable<GuildConfig> Permissionsv2ForAll(this DbSet<GuildConfig> configs, List<ulong> include)
 | 
			
		||||
        {
 | 
			
		||||
            var query = _set.AsQueryable()
 | 
			
		||||
            var query = configs.AsQueryable()
 | 
			
		||||
                .Where(x => include.Contains(x.GuildId))
 | 
			
		||||
                .Include(gc => gc.Permissions);
 | 
			
		||||
 | 
			
		||||
            return query.ToList();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public GuildConfig GcWithPermissionsv2For(ulong guildId)
 | 
			
		||||
        public static GuildConfig GcWithPermissionsv2For(this NadekoContext ctx, ulong guildId)
 | 
			
		||||
        {
 | 
			
		||||
            var config = _set.AsQueryable()
 | 
			
		||||
            var config = ctx
 | 
			
		||||
                .GuildConfigs
 | 
			
		||||
                .AsQueryable()
 | 
			
		||||
                .Where(gc => gc.GuildId == guildId)
 | 
			
		||||
                .Include(gc => gc.Permissions)
 | 
			
		||||
                .FirstOrDefault();
 | 
			
		||||
 | 
			
		||||
            if (config == null) // if there is no guildconfig, create new one
 | 
			
		||||
            {
 | 
			
		||||
                _set.Add((config = new GuildConfig
 | 
			
		||||
                ctx.GuildConfigs.Add((config = new GuildConfig
 | 
			
		||||
                {
 | 
			
		||||
                    GuildId = guildId,
 | 
			
		||||
                    Permissions = Permissionv2.GetDefaultPermlist
 | 
			
		||||
                }));
 | 
			
		||||
                _context.SaveChanges();
 | 
			
		||||
                ctx.SaveChanges();
 | 
			
		||||
            }
 | 
			
		||||
            else if (config.Permissions == null || !config.Permissions.Any()) // if no perms, add default ones
 | 
			
		||||
            {
 | 
			
		||||
                config.Permissions = Permissionv2.GetDefaultPermlist;
 | 
			
		||||
                _context.SaveChanges();
 | 
			
		||||
                ctx.SaveChanges();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return config;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IEnumerable<FollowedStream> GetFollowedStreams()
 | 
			
		||||
        public static IEnumerable<FollowedStream> GetFollowedStreams(this DbSet<GuildConfig> configs)
 | 
			
		||||
        {
 | 
			
		||||
            return _set
 | 
			
		||||
            return configs
 | 
			
		||||
                .AsQueryable()
 | 
			
		||||
                .Include(x => x.FollowedStreams)
 | 
			
		||||
                .SelectMany(gc => gc.FollowedStreams)
 | 
			
		||||
                .ToArray();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IEnumerable<FollowedStream> GetFollowedStreams(List<ulong> included)
 | 
			
		||||
        public static IEnumerable<FollowedStream> GetFollowedStreams(this DbSet<GuildConfig> configs, List<ulong> included)
 | 
			
		||||
        {
 | 
			
		||||
            return _set.AsQueryable()
 | 
			
		||||
            return configs.AsQueryable()
 | 
			
		||||
                .Where(gc => included.Contains(gc.GuildId))
 | 
			
		||||
                .Include(gc => gc.FollowedStreams)
 | 
			
		||||
                .SelectMany(gc => gc.FollowedStreams)
 | 
			
		||||
                .ToList();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void SetCleverbotEnabled(ulong id, bool cleverbotEnabled)
 | 
			
		||||
        public static void SetCleverbotEnabled(this DbSet<GuildConfig> configs, ulong id, bool cleverbotEnabled)
 | 
			
		||||
        {
 | 
			
		||||
            var conf = _set.FirstOrDefault(gc => gc.GuildId == id);
 | 
			
		||||
            var conf = configs.FirstOrDefault(gc => gc.GuildId == id);
 | 
			
		||||
 | 
			
		||||
            if (conf == null)
 | 
			
		||||
                return;
 | 
			
		||||
@@ -203,9 +206,9 @@ namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
            conf.CleverbotEnabled = cleverbotEnabled;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public XpSettings XpSettingsFor(ulong guildId)
 | 
			
		||||
        public static XpSettings XpSettingsFor(this NadekoContext ctx, ulong guildId)
 | 
			
		||||
        {
 | 
			
		||||
            var gc = ForId(guildId,
 | 
			
		||||
            var gc = ctx.GuildConfigsForId(guildId,
 | 
			
		||||
                set => set.Include(x => x.XpSettings)
 | 
			
		||||
                          .ThenInclude(x => x.RoleRewards)
 | 
			
		||||
                          .Include(x => x.XpSettings)
 | 
			
		||||
@@ -219,9 +222,9 @@ namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
            return gc.XpSettings;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IEnumerable<GeneratingChannel> GetGeneratingChannels()
 | 
			
		||||
        public static IEnumerable<GeneratingChannel> GetGeneratingChannels(this DbSet<GuildConfig> configs)
 | 
			
		||||
        {
 | 
			
		||||
            return _set
 | 
			
		||||
            return configs
 | 
			
		||||
                .AsQueryable()
 | 
			
		||||
                .Include(x => x.GenerateCurrencyChannelIds)
 | 
			
		||||
                .Where(x => x.GenerateCurrencyChannelIds.Any())
 | 
			
		||||
@@ -0,0 +1,30 @@
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
{
 | 
			
		||||
    public static class MusicPlayerSettingsExtensions
 | 
			
		||||
    {
 | 
			
		||||
        public static async Task<MusicPlayerSettings> ForGuildAsync(this DbSet<MusicPlayerSettings> settings, ulong guildId)
 | 
			
		||||
        {
 | 
			
		||||
            var toReturn = await settings
 | 
			
		||||
                .AsQueryable()
 | 
			
		||||
                .FirstOrDefaultAsync(x => x.GuildId == guildId);
 | 
			
		||||
 | 
			
		||||
            if (toReturn is null)
 | 
			
		||||
            {
 | 
			
		||||
                var newSettings = new MusicPlayerSettings()
 | 
			
		||||
                {
 | 
			
		||||
                    GuildId = guildId,
 | 
			
		||||
                    PlayerRepeat = PlayerRepeatType.Queue
 | 
			
		||||
                };
 | 
			
		||||
 | 
			
		||||
                await settings.AddAsync(newSettings);
 | 
			
		||||
                return newSettings;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return toReturn;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,8 +1,9 @@
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Modules.Music
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using NadekoBot.Core.Services.Database;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
using NadekoBot.Services.Database;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Modules.Games.Common
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,10 @@
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
namespace NadekoBot.Services.Database.Repositories.Impl
 | 
			
		||||
{
 | 
			
		||||
    public abstract class Repository<T> : IRepository<T> where T : DbEntity
 | 
			
		||||
    {
 | 
			
		||||
@@ -18,29 +19,5 @@ namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
 | 
			
		||||
        public void Add(T obj) =>
 | 
			
		||||
            _set.Add(obj);
 | 
			
		||||
 | 
			
		||||
        public void AddRange(params T[] objs) =>
 | 
			
		||||
            _set.AddRange(objs);
 | 
			
		||||
 | 
			
		||||
        public T GetById(int id) =>
 | 
			
		||||
            _set.FirstOrDefault(e => e.Id == id);
 | 
			
		||||
 | 
			
		||||
        public IEnumerable<T> GetAll() =>
 | 
			
		||||
            _set.ToList();
 | 
			
		||||
 | 
			
		||||
        public void Remove(int id) =>
 | 
			
		||||
            _set.Remove(this.GetById(id));
 | 
			
		||||
 | 
			
		||||
        public void Remove(T obj) =>
 | 
			
		||||
            _set.Remove(obj);
 | 
			
		||||
 | 
			
		||||
        public void RemoveRange(params T[] objs) =>
 | 
			
		||||
            _set.RemoveRange(objs);
 | 
			
		||||
 | 
			
		||||
        public void Update(T obj) =>
 | 
			
		||||
            _set.Update(obj);
 | 
			
		||||
 | 
			
		||||
        public void UpdateRange(params T[] objs) =>
 | 
			
		||||
            _set.UpdateRange(objs);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,23 +1,23 @@
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using LinqToDB;
 | 
			
		||||
using NadekoBot.Core.Services.Database;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
using NadekoBot.Services.Database;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
namespace NadekoBot.Modules.Xp.Common
 | 
			
		||||
{
 | 
			
		||||
    public class XpRepository : Repository<UserXpStats>, IXpRepository
 | 
			
		||||
    public static class UserXpExtensions
 | 
			
		||||
    {
 | 
			
		||||
        public XpRepository(DbContext context) : base(context)
 | 
			
		||||
        public static UserXpStats GetOrCreateUserXpStats(this NadekoContext ctx, ulong guildId, ulong userId)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public UserXpStats GetOrCreateUser(ulong guildId, ulong userId)
 | 
			
		||||
        {
 | 
			
		||||
            var usr = _set.FirstOrDefault(x => x.UserId == userId && x.GuildId == guildId);
 | 
			
		||||
            var usr = ctx.UserXpStats.FirstOrDefault(x => x.UserId == userId && x.GuildId == guildId);
 | 
			
		||||
 | 
			
		||||
            if (usr == null)
 | 
			
		||||
            {
 | 
			
		||||
                _context.Add(usr = new UserXpStats()
 | 
			
		||||
                ctx.Add(usr = new UserXpStats()
 | 
			
		||||
                {
 | 
			
		||||
                    Xp = 0,
 | 
			
		||||
                    UserId = userId,
 | 
			
		||||
@@ -29,9 +29,9 @@ namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
            return usr;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public List<UserXpStats> GetUsersFor(ulong guildId, int page)
 | 
			
		||||
        public static List<UserXpStats> GetUsersFor(this DbSet<UserXpStats> xps, ulong guildId, int page)
 | 
			
		||||
        {
 | 
			
		||||
            return _set
 | 
			
		||||
            return xps
 | 
			
		||||
                .AsQueryable()
 | 
			
		||||
                .AsNoTracking()
 | 
			
		||||
                .Where(x => x.GuildId == guildId)
 | 
			
		||||
@@ -41,9 +41,9 @@ namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
                .ToList();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public List<UserXpStats> GetTopUserXps(ulong guildId, int count)
 | 
			
		||||
        public static List<UserXpStats> GetTopUserXps(this DbSet<UserXpStats> xps, ulong guildId, int count)
 | 
			
		||||
        {
 | 
			
		||||
            return _set
 | 
			
		||||
            return xps
 | 
			
		||||
                .AsQueryable()
 | 
			
		||||
                .AsNoTracking()
 | 
			
		||||
                .Where(x => x.GuildId == guildId)
 | 
			
		||||
@@ -52,7 +52,7 @@ namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
                .ToList();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public int GetUserGuildRanking(ulong userId, ulong guildId)
 | 
			
		||||
        public static int GetUserGuildRanking(this DbSet<UserXpStats> xps, ulong userId, ulong guildId)
 | 
			
		||||
        {
 | 
			
		||||
            //            @"SELECT COUNT(*) + 1
 | 
			
		||||
            //FROM UserXpStats
 | 
			
		||||
@@ -61,11 +61,11 @@ namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
            //	WHERE UserId = @p2 AND GuildId = @p1
 | 
			
		||||
            //	LIMIT 1));";
 | 
			
		||||
 | 
			
		||||
            return _set
 | 
			
		||||
            return xps
 | 
			
		||||
                .AsQueryable()
 | 
			
		||||
                .AsNoTracking()
 | 
			
		||||
                .Where(x => x.GuildId == guildId && ((x.Xp + x.AwardedXp) >
 | 
			
		||||
                    (_set.AsQueryable()
 | 
			
		||||
                    (xps.AsQueryable()
 | 
			
		||||
                        .Where(y => y.UserId == userId && y.GuildId == guildId)
 | 
			
		||||
                        .Select(y => y.Xp + y.AwardedXp)
 | 
			
		||||
                        .FirstOrDefault())
 | 
			
		||||
@@ -73,14 +73,14 @@ namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
                .Count() + 1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void ResetGuildUserXp(ulong userId, ulong guildId)
 | 
			
		||||
        public static void ResetGuildUserXp(this DbSet<UserXpStats> xps, ulong userId, ulong guildId)
 | 
			
		||||
        {
 | 
			
		||||
            _context.Database.ExecuteSqlInterpolated($"DELETE FROM UserXpStats WHERE UserId={userId} AND GuildId={guildId};");
 | 
			
		||||
            xps.Delete(x => x.UserId == userId && x.GuildId == guildId);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void ResetGuildXp(ulong guildId)
 | 
			
		||||
        public static void ResetGuildXp(this DbSet<UserXpStats> xps, ulong guildId)
 | 
			
		||||
        {
 | 
			
		||||
            _context.Database.ExecuteSqlInterpolated($"DELETE FROM UserXpStats WHERE GuildId={guildId};");
 | 
			
		||||
            xps.Delete(x => x.GuildId == guildId);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,10 +1,12 @@
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Models;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Repositories;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database.Repositories.Impl
 | 
			
		||||
namespace NadekoBot.Services.Database.Repositories.Impl
 | 
			
		||||
{
 | 
			
		||||
    public class WaifuRepository : Repository<WaifuInfo>, IWaifuRepository
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,26 +1,22 @@
 | 
			
		||||
using NadekoBot.Core.Services.Database.Repositories;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Repositories.Impl;
 | 
			
		||||
using NadekoBot.Services.Database.Repositories;
 | 
			
		||||
using NadekoBot.Services.Database.Repositories.Impl;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using NadekoBot.Core.Services.Database;
 | 
			
		||||
using NadekoBot.Core.Services.Database.Repositories;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Database
 | 
			
		||||
namespace NadekoBot.Services.Database
 | 
			
		||||
{
 | 
			
		||||
    public sealed class UnitOfWork : IUnitOfWork
 | 
			
		||||
    {
 | 
			
		||||
        public NadekoContext _context { get; }
 | 
			
		||||
 | 
			
		||||
        private IGuildConfigRepository _guildConfigs;
 | 
			
		||||
        public IGuildConfigRepository GuildConfigs => _guildConfigs ?? (_guildConfigs = new GuildConfigRepository(_context));
 | 
			
		||||
 | 
			
		||||
        private IWaifuRepository _waifus;
 | 
			
		||||
        public IWaifuRepository Waifus => _waifus ?? (_waifus = new WaifuRepository(_context));
 | 
			
		||||
 | 
			
		||||
        private IDiscordUserRepository _discordUsers;
 | 
			
		||||
        public IDiscordUserRepository DiscordUsers => _discordUsers ?? (_discordUsers = new DiscordUserRepository(_context));
 | 
			
		||||
 | 
			
		||||
        private IXpRepository _xp;
 | 
			
		||||
        public IXpRepository Xp => _xp ?? (_xp = new XpRepository(_context));
 | 
			
		||||
 | 
			
		||||
        public UnitOfWork(NadekoContext context)
 | 
			
		||||
        {
 | 
			
		||||
            _context = context;
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ using NadekoBot.Core.Services.Database;
 | 
			
		||||
using System;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using NadekoBot.Services.Database;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,7 @@ using System.Collections.Concurrent;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using NadekoBot.Modules.Administration;
 | 
			
		||||
using Serilog;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services
 | 
			
		||||
@@ -106,7 +107,7 @@ namespace NadekoBot.Core.Services
 | 
			
		||||
        {
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                return uow.GuildConfigs.ForId(id, set => set)?.DmGreetMessageText;
 | 
			
		||||
                return uow._context.GuildConfigsForId(id, set => set)?.DmGreetMessageText;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -114,7 +115,7 @@ namespace NadekoBot.Core.Services
 | 
			
		||||
        {
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                return uow.GuildConfigs.ForId(gid, set => set).ChannelGreetMessageText;
 | 
			
		||||
                return uow._context.GuildConfigsForId(gid, set => set).ChannelGreetMessageText;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -318,7 +319,7 @@ namespace NadekoBot.Core.Services
 | 
			
		||||
        {
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                return uow.GuildConfigs.ForId(gid, set => set).ChannelByeMessageText;
 | 
			
		||||
                return uow._context.GuildConfigsForId(gid, set => set).ChannelByeMessageText;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -330,7 +331,7 @@ namespace NadekoBot.Core.Services
 | 
			
		||||
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                var gc = uow.GuildConfigs.ForId(guildId, set => set);
 | 
			
		||||
                var gc = uow._context.GuildConfigsForId(guildId, set => set);
 | 
			
		||||
                settings = GreetSettings.Create(gc);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@@ -350,7 +351,7 @@ namespace NadekoBot.Core.Services
 | 
			
		||||
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                var conf = uow.GuildConfigs.ForId(guildId, set => set);
 | 
			
		||||
                var conf = uow._context.GuildConfigsForId(guildId, set => set);
 | 
			
		||||
                conf.DmGreetMessageText = settings.DmGreetMessageText?.SanitizeMentions();
 | 
			
		||||
                conf.ChannelGreetMessageText = settings.ChannelGreetMessageText?.SanitizeMentions();
 | 
			
		||||
                conf.ChannelByeMessageText = settings.ChannelByeMessageText?.SanitizeMentions();
 | 
			
		||||
@@ -381,7 +382,7 @@ namespace NadekoBot.Core.Services
 | 
			
		||||
            bool enabled;
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                var conf = uow.GuildConfigs.ForId(guildId, set => set);
 | 
			
		||||
                var conf = uow._context.GuildConfigsForId(guildId, set => set);
 | 
			
		||||
                enabled = conf.SendChannelGreetMessage = value ?? !conf.SendChannelGreetMessage;
 | 
			
		||||
                conf.GreetMessageChannelId = channelId;
 | 
			
		||||
 | 
			
		||||
@@ -403,7 +404,7 @@ namespace NadekoBot.Core.Services
 | 
			
		||||
            bool greetMsgEnabled;
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                var conf = uow.GuildConfigs.ForId(guildId, set => set);
 | 
			
		||||
                var conf = uow._context.GuildConfigsForId(guildId, set => set);
 | 
			
		||||
                conf.ChannelGreetMessageText = message;
 | 
			
		||||
                greetMsgEnabled = conf.SendChannelGreetMessage;
 | 
			
		||||
 | 
			
		||||
@@ -420,7 +421,7 @@ namespace NadekoBot.Core.Services
 | 
			
		||||
            bool enabled;
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                var conf = uow.GuildConfigs.ForId(guildId, set => set);
 | 
			
		||||
                var conf = uow._context.GuildConfigsForId(guildId, set => set);
 | 
			
		||||
                enabled = conf.SendDmGreetMessage = value ?? !conf.SendDmGreetMessage;
 | 
			
		||||
 | 
			
		||||
                var toAdd = GreetSettings.Create(conf);
 | 
			
		||||
@@ -436,7 +437,7 @@ namespace NadekoBot.Core.Services
 | 
			
		||||
        {
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                var conf = uow.GuildConfigs.ForId(guildId, set => set);
 | 
			
		||||
                var conf = uow._context.GuildConfigsForId(guildId, set => set);
 | 
			
		||||
                return conf.SendDmGreetMessage;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -445,7 +446,7 @@ namespace NadekoBot.Core.Services
 | 
			
		||||
        {
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                var conf = uow.GuildConfigs.ForId(guildId, set => set);
 | 
			
		||||
                var conf = uow._context.GuildConfigsForId(guildId, set => set);
 | 
			
		||||
                return conf.SendChannelGreetMessage;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -454,7 +455,7 @@ namespace NadekoBot.Core.Services
 | 
			
		||||
        {
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                var conf = uow.GuildConfigs.ForId(guildId, set => set);
 | 
			
		||||
                var conf = uow._context.GuildConfigsForId(guildId, set => set);
 | 
			
		||||
                return conf.SendChannelByeMessage;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -491,7 +492,7 @@ namespace NadekoBot.Core.Services
 | 
			
		||||
            bool greetMsgEnabled;
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                var conf = uow.GuildConfigs.ForId(guildId, set => set);
 | 
			
		||||
                var conf = uow._context.GuildConfigsForId(guildId, set => set);
 | 
			
		||||
                conf.DmGreetMessageText = message;
 | 
			
		||||
                greetMsgEnabled = conf.SendDmGreetMessage;
 | 
			
		||||
 | 
			
		||||
@@ -508,7 +509,7 @@ namespace NadekoBot.Core.Services
 | 
			
		||||
            bool enabled;
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                var conf = uow.GuildConfigs.ForId(guildId, set => set);
 | 
			
		||||
                var conf = uow._context.GuildConfigsForId(guildId, set => set);
 | 
			
		||||
                enabled = conf.SendChannelByeMessage = value ?? !conf.SendChannelByeMessage;
 | 
			
		||||
                conf.ByeMessageChannelId = channelId;
 | 
			
		||||
 | 
			
		||||
@@ -530,7 +531,7 @@ namespace NadekoBot.Core.Services
 | 
			
		||||
            bool byeMsgEnabled;
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                var conf = uow.GuildConfigs.ForId(guildId, set => set);
 | 
			
		||||
                var conf = uow._context.GuildConfigsForId(guildId, set => set);
 | 
			
		||||
                conf.ChannelByeMessageText = message;
 | 
			
		||||
                byeMsgEnabled = conf.SendChannelByeMessage;
 | 
			
		||||
 | 
			
		||||
@@ -549,7 +550,7 @@ namespace NadekoBot.Core.Services
 | 
			
		||||
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                var conf = uow.GuildConfigs.ForId(guildId, set => set);
 | 
			
		||||
                var conf = uow._context.GuildConfigsForId(guildId, set => set);
 | 
			
		||||
                conf.AutoDeleteByeMessagesTimer = timer;
 | 
			
		||||
 | 
			
		||||
                var toAdd = GreetSettings.Create(conf);
 | 
			
		||||
@@ -566,7 +567,7 @@ namespace NadekoBot.Core.Services
 | 
			
		||||
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                var conf = uow.GuildConfigs.ForId(id, set => set);
 | 
			
		||||
                var conf = uow._context.GuildConfigsForId(id, set => set);
 | 
			
		||||
                conf.AutoDeleteGreetMessagesTimer = timer;
 | 
			
		||||
 | 
			
		||||
                var toAdd = GreetSettings.Create(conf);
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using NadekoBot.Core.Modules.Gambling.Services;
 | 
			
		||||
using NadekoBot.Modules.Gambling.Services;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ using Discord;
 | 
			
		||||
using NadekoBot.Common;
 | 
			
		||||
using Newtonsoft.Json;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using NadekoBot.Modules.Administration;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services.Impl
 | 
			
		||||
{
 | 
			
		||||
@@ -55,7 +56,7 @@ namespace NadekoBot.Core.Services.Impl
 | 
			
		||||
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                var gc = uow.GuildConfigs.ForId(guildId, set => set);
 | 
			
		||||
                var gc = uow._context.GuildConfigsForId(guildId, set => set);
 | 
			
		||||
                gc.Locale = ci.Name;
 | 
			
		||||
                uow.SaveChanges();
 | 
			
		||||
            }
 | 
			
		||||
@@ -73,7 +74,7 @@ namespace NadekoBot.Core.Services.Impl
 | 
			
		||||
            {
 | 
			
		||||
                using (var uow = _db.GetDbContext())
 | 
			
		||||
                {
 | 
			
		||||
                    var gc = uow.GuildConfigs.ForId(guildId, set => set);
 | 
			
		||||
                    var gc = uow._context.GuildConfigsForId(guildId, set => set);
 | 
			
		||||
                    gc.Locale = null;
 | 
			
		||||
                    uow.SaveChanges();
 | 
			
		||||
                }
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,8 @@ using LinqToDB.EntityFrameworkCore;
 | 
			
		||||
using NadekoBot.Common.ModuleBehaviors;
 | 
			
		||||
using NadekoBot.Core.Common;
 | 
			
		||||
using NadekoBot.Core.Common.Configs;
 | 
			
		||||
using NadekoBot.Core.Modules.Gambling.Services;
 | 
			
		||||
using NadekoBot.Modules.Administration;
 | 
			
		||||
using NadekoBot.Modules.Gambling.Services;
 | 
			
		||||
using NadekoBot.Modules.Administration.Services;
 | 
			
		||||
using NadekoBot.Modules.CustomReactions.Services;
 | 
			
		||||
using NadekoBot.Modules.Utility.Services;
 | 
			
		||||
@@ -135,7 +136,7 @@ namespace NadekoBot
 | 
			
		||||
        public IEnumerable<GuildConfig> GetCurrentGuildConfigs()
 | 
			
		||||
        {
 | 
			
		||||
            using var uow = _db.GetDbContext();
 | 
			
		||||
            return uow.GuildConfigs.GetAllGuildConfigs(GetCurrentGuildIds()).ToImmutableArray();
 | 
			
		||||
            return uow._context.GuildConfigs.GetAllGuildConfigs(GetCurrentGuildIds()).ToImmutableArray();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void AddServices()
 | 
			
		||||
@@ -147,7 +148,7 @@ namespace NadekoBot
 | 
			
		||||
            using (var uow = _db.GetDbContext())
 | 
			
		||||
            {
 | 
			
		||||
                uow.DiscordUsers.EnsureCreated(_bot.Id, _bot.Username, _bot.Discriminator, _bot.AvatarId);
 | 
			
		||||
                AllGuildConfigs = uow.GuildConfigs.GetAllGuildConfigs(startingGuildIdList).ToImmutableArray();
 | 
			
		||||
                AllGuildConfigs = uow._context.GuildConfigs.GetAllGuildConfigs(startingGuildIdList).ToImmutableArray();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var s = new ServiceCollection()
 | 
			
		||||
@@ -307,13 +308,13 @@ namespace NadekoBot
 | 
			
		||||
 | 
			
		||||
        private Task Client_JoinedGuild(SocketGuild arg)
 | 
			
		||||
        {
 | 
			
		||||
            Log.Information($"Joined server: {0} [{1}]", arg?.Name, arg?.Id);
 | 
			
		||||
            Log.Information($"Joined server: {0} [{1}]", arg.Name, arg.Id);
 | 
			
		||||
            var _ = Task.Run(async () =>
 | 
			
		||||
            {
 | 
			
		||||
                GuildConfig gc;
 | 
			
		||||
                using (var uow = _db.GetDbContext())
 | 
			
		||||
                {
 | 
			
		||||
                    gc = uow.GuildConfigs.ForId(arg.Id);
 | 
			
		||||
                    gc = uow._context.GuildConfigsForId(arg.Id);
 | 
			
		||||
                }
 | 
			
		||||
                await JoinedGuild.Invoke(gc).ConfigureAwait(false);
 | 
			
		||||
            });
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Data.Common;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using NadekoBot.Core.Modules.Gambling.Common;
 | 
			
		||||
using NadekoBot.Core.Modules.Gambling.Services;
 | 
			
		||||
using NadekoBot.Modules.Gambling.Common;
 | 
			
		||||
using NadekoBot.Modules.Gambling.Services;
 | 
			
		||||
using Serilog;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Core.Services
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user