示例#1
0
        async Task CreateNewGuildMembersAsync(Guild guild, GuildCreateEventArgs e, InciteDbContext dbContext)
        {
            var members = await e.Guild.GetAllMembersAsync();

            var memberDiscordIds = members
                                   .AsEnumerable()
                                   .Select(x => x.Id);

            var existingUsers = await dbContext.Users
                                .Where(x => memberDiscordIds
                                       .Contains(x.DiscordId))
                                .ToArrayAsync();

            var existingMembers = await dbContext.Members
                                  .Include(x => x.User)
                                  .Where(x => x.Guild.DiscordId == guild.DiscordId && memberDiscordIds
                                         .Contains(x.User.DiscordId))
                                  .ToArrayAsync();

            var newUsers = memberDiscordIds
                           .Where(x => !existingUsers
                                  .Select(x => x.DiscordId)
                                  .Contains(x))
                           .Select(x => new User()
            {
                DiscordId = x
            });

            dbContext.Users.AddRange(newUsers);

            var newMembers = memberDiscordIds
                             .Where(x => !existingMembers
                                    .Select(x => x.User.DiscordId)
                                    .Contains(x))
                             .Select(x => new Member()
            {
                Guild = guild,
                User  = dbContext.Users.Local.First(y => y.DiscordId == x)
            });

            dbContext.Members.AddRange(newMembers);
        }
示例#2
0
        static void Main(string[] args)
        {
            var config = new ConfigurationBuilder()
                         .AddUserSecrets("894aa8f3-8db9-4868-8964-a973da7e7cc8")
                         .AddEnvironmentVariables()
                         .Build();

            using var sqlServerDbContext = new InciteDbContext(new DbContextOptionsBuilder <InciteDbContext>()
                                                               .UseNpgsql(config["ConnectionStrings:SqlServer"], sqlOptions =>
            {
                sqlOptions.EnableRetryOnFailure();
            }).Options);

            using var postgresDbContext = new InciteDbContext(new DbContextOptionsBuilder <InciteDbContext>()
                                                              .UseNpgsql(config["ConnectionStrings:Postgres"], sqlOptions =>
            {
                sqlOptions.EnableRetryOnFailure();
            }).Options);

            postgresDbContext.Database.MigrateAsync().Wait();

            postgresDbContext.WowItemClasses.AddRange(sqlServerDbContext.WowItemClasses);
            postgresDbContext.WowItemSubclasses.AddRange(sqlServerDbContext.WowItemSubclasses);
            postgresDbContext.WowItems.AddRange(sqlServerDbContext.WowItems);
            postgresDbContext.WowSpells.AddRange(sqlServerDbContext.WowSpells);

            postgresDbContext.Users.AddRange(sqlServerDbContext.Users);
            postgresDbContext.Guilds.AddRange(sqlServerDbContext.Guilds);
            postgresDbContext.Roles.AddRange(sqlServerDbContext.Roles);

            postgresDbContext.WowCharacters.AddRange(sqlServerDbContext.WowCharacters);
            postgresDbContext.WowCharacterProfessions.AddRange(sqlServerDbContext.WowCharacterProfessions);

            postgresDbContext.Members.AddRange(sqlServerDbContext.Members);
            postgresDbContext.Events.AddRange(sqlServerDbContext.Events);

            postgresDbContext.SaveChanges();
        }
示例#3
0
 public MemberCommands(InciteDbContext dbContext)
 {
     m_dbContext = dbContext;
 }
示例#4
0
 public ServerCommands(InciteDbContext dbContext)
 {
     m_dbContext = dbContext;
 }
示例#5
0
 public EventCommands(InciteDbContext dbContext, EmojiService emojiService)
 {
     m_dbContext    = dbContext;
     m_emojiService = emojiService;
 }
示例#6
0
 public EpgpCommands(InciteDbContext dbContext)
 {
     m_dbContext = dbContext;
 }
示例#7
0
 public WowCharacterCommands(InciteDbContext dbContext)
 {
     m_dbContext = dbContext;
 }
示例#8
0
 public WowProfessionCommands(InciteDbContext dbContext)
 {
     m_dbContext = dbContext;
 }
示例#9
0
        public async Task <WowItem> GetOrCreateWowItemAsync(InciteDbContext dbContext, WowHeadItem wowHeadItem, Dictionary <int, WowItem> seenItems)
        {
            if (seenItems.ContainsKey(wowHeadItem.Id))
            {
                return(seenItems[wowHeadItem.Id]);
            }

            WowItem wowItem = await dbContext.WowItems
                              .FirstOrDefaultAsync(x => x.WowId == wowHeadItem.Id);

            if (wowItem != null)
            {
                seenItems[wowHeadItem.Id] = wowItem;
                return(wowItem);
            }

            WowItemSubclass wowItemSubclass = null;
            WowItemClass    wowItemClass    = await dbContext.WowItemClasses
                                              .Include(x => x.WowItemSubclasses)
                                              .FirstOrDefaultAsync(x => x.WowId == wowHeadItem.ItemClass.Id);

            if (wowItemClass == null)
            {
                wowItemClass = new WowItemClass()
                {
                    WowId = wowHeadItem.ItemClass.Id,
                    Name  = wowHeadItem.ItemClass.Name
                };

                wowItemSubclass = new WowItemSubclass()
                {
                    WowId        = wowHeadItem.ItemSubclass.Id,
                    Name         = wowHeadItem.ItemSubclass.Name,
                    WowItemClass = wowItemClass,
                };

                dbContext.WowItemClasses.Add(wowItemClass);
                dbContext.WowItemSubclasses.Add(wowItemSubclass);
            }
            else
            {
                wowItemSubclass = wowItemClass.WowItemSubclasses
                                  .FirstOrDefault(x => x.WowId == wowHeadItem.ItemSubclass.Id);

                if (wowItemSubclass == null)
                {
                    wowItemSubclass = new WowItemSubclass()
                    {
                        WowId        = wowHeadItem.ItemSubclass.Id,
                        Name         = wowHeadItem.ItemSubclass.Name,
                        WowItemClass = wowItemClass,
                    };

                    dbContext.WowItemSubclasses.Add(wowItemSubclass);
                }
            }

            wowItem = new WowItem()
            {
                WowId           = wowHeadItem.Id,
                Name            = wowHeadItem.Name,
                ItemQuality     = (WowItemQuality)wowHeadItem.Quality,
                WowHeadIcon     = wowHeadItem.Icon,
                WowItemClass    = wowItemClass,
                WowItemSubclass = wowItemSubclass,
            };

            seenItems[wowHeadItem.Id] = wowItem;
            dbContext.Add(wowItem);

            if (wowHeadItem.CreatedBy.Count > 0)
            {
                foreach (var wowHeadSpell in wowHeadItem.CreatedBy)
                {
                    WowSpell wowSpell = await dbContext.WowSpells
                                        .FirstOrDefaultAsync(x => x.WowId == wowHeadSpell.Id);

                    if (wowSpell == null)
                    {
                        wowSpell = new WowSpell()
                        {
                            WowId       = wowHeadSpell.Id,
                            Name        = wowHeadSpell.Name,
                            CreatedItem = wowItem,
                        };

                        dbContext.WowSpells.Add(wowSpell);

                        foreach (var reagent in wowHeadSpell.Reagents)
                        {
                            var wowReagent = new WowReagent()
                            {
                                Count    = reagent.Count,
                                WowSpell = wowSpell,
                                WowItem  = await GetOrCreateWowItemAsync(dbContext, reagent.Item, seenItems),
                            };

                            dbContext.WowReagents.Add(wowReagent);
                        }
                    }

                    wowItem.CreatedBy.Add(wowSpell);
                }
            }

            await dbContext.SaveChangesAsync();

            return(wowItem);
        }
示例#10
0
 public Task <WowItem> GetOrCreateWowItemAsync(InciteDbContext dbContext, WowHeadItem wowHeadItem)
 {
     return(GetOrCreateWowItemAsync(dbContext, wowHeadItem, new Dictionary <int, WowItem>()));
 }
示例#11
0
 public AdminCommands(InciteDbContext dbContext, GuildCommandPrefixCache guildCommandPrefixCache)
 {
     m_dbContext = dbContext;
     m_guildCommandPrefixCache = guildCommandPrefixCache;
 }
示例#12
0
 public GuildCommands(InciteDbContext dbContext)
 {
     m_dbContext = dbContext;
 }