Exemple #1
0
        public void UpdateMemberGuilds()
        {
            PalantirDbContext context = new PalantirDbContext();

            foreach (MemberEntity memberEntity in context.Members)
            {
                Member member = JsonConvert.DeserializeObject <Member>(memberEntity.Member);
                List <ObservedGuild> updatedGuilds = new List <ObservedGuild>();
                member.Guilds.ForEach((g) =>
                {
                    if (PalantirTethers.Count(t => t.PalantirEndpoint.ObserveToken == g.ObserveToken && t.PalantirEndpoint.GuildID == g.GuildID) > 0)
                    {
                        updatedGuilds.Add(
                            PalantirTethers.FirstOrDefault(t => t.PalantirEndpoint.ObserveToken == g.ObserveToken && t.PalantirEndpoint.GuildID == g.GuildID)
                            .PalantirEndpoint);
                    }
                });
                member.Guilds = updatedGuilds;
                if (updatedGuilds.Count > 0)
                {
                    memberEntity.Member = JsonConvert.SerializeObject(member);
                }
                else
                {
                    //MemberEntity rem = new MemberEntity();
                    //rem.Login = member.UserLogin;
                    //context.Members.Remove(rem);
                    //Console.WriteLine("Member " + member.UserName + " was removed.");
                    memberEntity.Member = JsonConvert.SerializeObject(member);
                    Console.WriteLine("Member " + member.UserName + " has no verified guilds.");
                }
            }
            context.SaveChanges();
            context.Dispose();
        }
Exemple #2
0
        public void SetFlagByID(string id, int flag)
        {
            PalantirDbContext context = new PalantirDbContext();
            MemberEntity      member  = context.Members.FirstOrDefault(m => m.Member.Contains(id));

            member.Flag = flag;
            context.SaveChanges();
            context.Dispose();
        }
Exemple #3
0
        public void SavePalantiri(ObservedGuild guild)
        {
            bool newGuild = true;
            PalantirDbContext Database = new PalantirDbContext();

            // If guild of new palantir has already an active palantir, close tether, replace palantir and reopen tether
            PalantirTethers.ForEach((t) => {
                if (t.PalantirEndpoint.GuildID == guild.GuildID)
                {
                    string oldToken = t.PalantirEndpoint.ObserveToken;
                    // update tether
                    t.StopDataflow();
                    t.SetNewPalantirEndpoint(guild);
                    t.EstablishDataflow();
                    newGuild = false;

                    // Console.WriteLine("Change token from " + oldToken + " to " + guild.ObserveToken);
                    // update db entry
                    Database.Palantiri.Remove(Database.Palantiri.FirstOrDefault(p => p.Token == oldToken));
                    PalantirEntity entity = new PalantirEntity();
                    entity.Palantir       = JsonConvert.SerializeObject(guild);
                    entity.Token          = guild.ObserveToken;
                    Database.Palantiri.Add(entity);
                    Database.SaveChanges();
                }
            });

            if (newGuild)
            {
                // add tether
                Tether tether = new Tether(guild);
                tether.EstablishDataflow();
                PalantirTethers.Add(tether);

                // Add db entry
                PalantirEntity entity = new PalantirEntity();
                entity.Token    = guild.ObserveToken;
                entity.Palantir = JsonConvert.SerializeObject(guild);
                Database.Palantiri.Add(entity);
                Database.SaveChanges();
            }
            Database.Dispose();
            UpdateMemberGuilds();
        }
Exemple #4
0
        public static List <Sprite> GetAvailableSprites()
        {
            List <Sprite>     sprites = new List <Sprite>();
            PalantirDbContext context = new PalantirDbContext();

            context.Sprites.ToList().ForEach(s => sprites.Add(new Sprite(s.Name, s.URL, s.Cost, s.ID, s.Special, s.EventDropID, s.Artist)));
            context.SaveChanges();
            context.Dispose();
            return(sprites);
        }
Exemple #5
0
        public static bool ChangeEventDropCredit(string login, int eventDropID, int difference)
        {
            PalantirDbContext context = new PalantirDbContext();
            EventCreditEntity credit  = context.EventCredits.FirstOrDefault(c => c.EventDropID == eventDropID && c.Login == login);

            if (credit is object)
            {
                try
                {
                    credit.Credit += difference;
                    context.SaveChanges();
                    context.Dispose();
                }
                catch (Exception e)
                {
                    context.Dispose();
                    Console.WriteLine("Error changing credits for " + login + ":\n" + e);
                    return(false);
                }
            }
            else if (difference > 0)
            {
                EventCreditEntity newCredit = new EventCreditEntity();
                newCredit.Login       = login;
                newCredit.EventDropID = eventDropID;
                newCredit.Credit      = difference;
                try
                {
                    context.EventCredits.Add(newCredit);
                    context.SaveChanges();
                    context.Dispose();
                }
                catch (Exception e)
                {
                    context.Dispose();
                    Console.WriteLine("Error changing credits for " + login + ":\n" + e);
                    return(false);
                }
            }

            return(true);
        }
Exemple #6
0
        public void UpdatePalantirSettings(Tether tether)
        {
            PalantirDbContext   context = new PalantirDbContext();
            GuildSettingsEntity entity  = context.GuildSettings.FirstOrDefault(s => s.GuildID == tether.PalantirEndpoint.GuildID);

            if (entity != null)
            {
                entity.Settings = JsonConvert.SerializeObject(tether.PalantirSettings);
                context.SaveChanges();
            }
            else
            {
                entity          = new GuildSettingsEntity();
                entity.GuildID  = tether.PalantirEndpoint.GuildID;
                entity.Settings = JsonConvert.SerializeObject(tether.PalantirSettings);
                context.GuildSettings.Add(entity);
                context.SaveChanges();
            }
            context.SaveChanges();
            context.Dispose();
        }
Exemple #7
0
        public static void SetOnlineSprite(string login, string lobbyKey, string lobbyPlayerID)
        {
            List <SpriteProperty> playersprites = GetInventory(login).Where(i => i.Activated).ToList();
            PalantirDbContext     context       = new PalantirDbContext();

            context.OnlineSprites.RemoveRange(context.OnlineSprites.Where(o => o.LobbyKey == lobbyKey && lobbyPlayerID == o.LobbyPlayerID));
            try
            {
                context.SaveChanges();
            }
            catch (Exception e) { //Console.WriteLine("Error deleting sprite:\n" + e);
            }
            foreach (SpriteProperty slot in playersprites)
            {
                OnlineSpritesEntity newsprite = new OnlineSpritesEntity();
                newsprite.LobbyKey      = lobbyKey;
                newsprite.LobbyPlayerID = lobbyPlayerID;
                newsprite.Date          = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
                newsprite.Sprite        = slot is object?slot.ID.ToString() : "0";

                newsprite.Slot = slot.Slot + 1;
                newsprite.ID   = lobbyKey + lobbyPlayerID + slot.Slot.ToString();
                context.OnlineSprites.Add(newsprite);
            }
            //OnlineSpritesEntity aprilf = new OnlineSpritesEntity();
            //aprilf.LobbyKey = lobbyKey;
            //aprilf.LobbyPlayerID = lobbyPlayerID;
            //aprilf.Date = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
            //aprilf.Sprite = (new Random()).Next(1,83).ToString();
            //aprilf.Slot = 1;
            //aprilf.ID = lobbyKey + lobbyPlayerID + "aprf";
            //context.OnlineSprites.Add(aprilf);
            try
            {
                context.SaveChanges();
            }
            catch (Exception e) { Console.WriteLine("Error writing sprite:\n" + e); }
            context.Dispose();
        }
Exemple #8
0
        public static int GetDrops(string login)
        {
            PalantirDbContext context = new PalantirDbContext();
            MemberEntity      entity  = context.Members.FirstOrDefault(s => s.Login == login);
            int drops = 0;

            if (entity != null)
            {
                drops = entity.Drops;
            }
            context.SaveChanges();
            context.Dispose();

            return(drops);
        }
Exemple #9
0
        public static void AddSprite(Sprite sprite)
        {
            PalantirDbContext context = new PalantirDbContext();
            SpritesEntity     s       = new SpritesEntity();

            s.ID          = sprite.ID;
            s.Name        = sprite.Name;
            s.Special     = sprite.Special;
            s.URL         = sprite.URL;
            s.EventDropID = sprite.EventDropID;
            s.Cost        = sprite.Cost;
            s.Artist      = sprite.Artist;
            context.Sprites.Add(s);
            context.SaveChanges();
            context.Dispose();
        }
Exemple #10
0
        public void AddMember(Member member)
        {
            PalantirDbContext Database = new PalantirDbContext();

            PalantirMembers.Add(member);

            // add to db
            MemberEntity entity = new MemberEntity();

            entity.Login   = member.UserLogin;
            entity.Member  = JsonConvert.SerializeObject(member);
            entity.Bubbles = 0;
            entity.Sprites = "";
            Database.Members.Add(entity);
            Database.SaveChanges();
            Database.Dispose();
        }
Exemple #11
0
        public void RemovePalantiri(ObservedGuild guild)
        {
            // remove tether
            PalantirTethers.Remove(PalantirTethers.Find(t => t.PalantirEndpoint.ObserveToken == guild.ObserveToken));

            // remove palantir from db
            PalantirDbContext context = new PalantirDbContext();
            PalantirEntity    e       = context.Palantiri.FirstOrDefault(ptr => ptr.Token == guild.ObserveToken);

            context.Palantiri.Remove(e);
            try
            {
                context.SaveChanges();
            }
            catch (Exception ex) { Console.WriteLine(ex.ToString()); }
            context.Dispose();
            // restart string op = "sudo service palantir restart".Bash();
            //Environment.Exit(0);
            //UpdateMemberGuilds();
        }
Exemple #12
0
        public static string SetInventory(List <SpriteProperty> sprites, string login)
        {
            string        inv       = "";
            List <Sprite> available = GetAvailableSprites();

            available.ForEach(s =>
            {
                if (sprites.Any(a => a.ID == s.ID))
                {
                    SpriteProperty found = sprites.FirstOrDefault(a => a.ID == s.ID);
                    inv += (found.Activated ? new string('.', found.Slot) : "") + s.ID + ",";
                }
            });
            inv = inv.Remove(inv.Length - 1);
            PalantirDbContext context = new PalantirDbContext();

            context.Members.FirstOrDefault(m => m.Login == login).Sprites = "0," + inv;
            context.SaveChanges();
            context.Dispose();
            return(inv);
        }
Exemple #13
0
        public async Task <int> UpdatePatrons()
        {
            List <string> patrons              = new List <string>();
            List <string> patronizer           = new List <string>();
            List <string> patronized           = new List <string>();
            Dictionary <string, string> emojis = new Dictionary <string, string>();
            // collect ids of patron members
            DiscordGuild typotestground = await Program.Client.GetGuildAsync(779435254225698827);

            foreach (DiscordMember member in await typotestground.GetAllMembersAsync())
            {
                if (member.Roles.Any(role => role.Id == 832744566905241610))
                {
                    patrons.Add(member.Id.ToString());
                }
                if (member.Roles.Any(role => role.Id == 859100010184572938))
                {
                    patronizer.Add(member.Id.ToString());
                }
            }
            ;
            PatronCount = patrons.Count();
            PalantirDbContext db = new PalantirDbContext();
            // iterate through palantir members and set flags
            await db.Members.ForEachAsync(member =>
            {
                PermissionFlag flag = new PermissionFlag((byte)member.Flag);
                flag.Patron         = patrons.Any(patron => member.Member.Contains(patron));
                if (patronizer.Any(id => member.Member.Contains(id)))
                {
                    flag.Patronizer = true;
                    if (member.Patronize is not null)
                    {
                        patronized.Add(member.Patronize.Split("#")[0]);
                    }
                }
                else
                {
                    flag.Patronizer = false;
                }
                string emoji = String.IsNullOrEmpty(member.Emoji) ? "" : member.Emoji;
                if (flag.Patron || flag.BotAdmin)
                {
                    emojis.Add(member.Login, emoji);
                }
                member.Flag = flag.CalculateFlag();
            });

            // set flags of patronized members
            patronized.ForEach(id =>
            {
                if (db.Members.Any(member => member.Member.Contains(id)))
                {
                    MemberEntity member = db.Members.FirstOrDefault(member => member.Member.Contains(id));
                    PermissionFlag flag = new PermissionFlag((byte)member.Flag);
                    flag.Patron         = true;
                    string emoji        = String.IsNullOrEmpty(member.Emoji) ? "" : member.Emoji;
                    emojis.Add(member.Login, emoji);
                    member.Flag = flag.CalculateFlag();
                }
            });

            db.SaveChanges();
            db.Dispose();
            PatronEmojis = emojis;
            return(patrons.Count);
        }
Exemple #14
0
        private static void Drop()
        {
            while (true)
            {
                PalantirDbContext context = new PalantirDbContext();

                try
                {
                    context.Drop.RemoveRange(context.Drop);
                    context.SaveChanges();
                }
                catch (Microsoft.Data.Sqlite.SqliteException e)
                {
                    if (e.SqliteErrorCode == 8)
                    {
                        Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " > Error clearing table: Database locked. Waiting 100ms then retry.");
                        Thread.Sleep(100);
                    }
                    else
                    {
                        Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " > Unhandled SQL error clearing table, immediately trying again: " + e.ToString());
                    }
                    continue;
                }
                catch (Exception e)
                {
                    Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " > Unhandled error clearing table, immediately trying again: " + e.ToString());
                    continue;
                }

                DropEntity drop = new DropEntity();
                drop.CaughtLobbyKey      = "";
                drop.CaughtLobbyPlayerID = "";
                drop.DropID      = (new Random()).Next(1, 99999999).ToString();
                drop.ValidFrom   = DateTime.UtcNow.AddSeconds(20).ToString("yyyy-MM-dd HH:mm:ss");
                drop.EventDropID = Events.GetRandomEventDropID();

                try
                {
                    context.Drop.Add(drop);
                    context.SaveChanges();
                }
                catch (Microsoft.Data.Sqlite.SqliteException e)
                {
                    if (e.SqliteErrorCode == 8)
                    {
                        Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " > Error adding drop: Database locked. Waiting 100ms then retry..");
                        Thread.Sleep(100);
                    }
                    else
                    {
                        Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " > Unhandled SQL error adding drop, immediately trying again: " + e.ToString());
                    }
                    continue;
                }
                catch (Exception e)
                {
                    Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " > Unhandled error adding drop, immediately trying again: " + e.ToString());
                    continue;
                }

                context.Dispose();
                int sleep = CalculateDropTimeoutSeconds() * 1000 + 20000;
                Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " > Next drop in " + sleep
                                  + " ms at " + DateTime.Now.AddMilliseconds(sleep).ToString("HH:mm:ss")
                                  + " for EventDropID #" + drop.EventDropID);
                Thread.Sleep(sleep);
            }
        }