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(); }
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(); }
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(); }
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); }
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); }
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(); }
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(); }
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); }
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(); }
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(); }
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(); }
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); }
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); }
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); } }