private void ArrangeUsersInRotation(Rotations rotation, List <IGuildUser> users) { var oldRanks = rotation.RotationUsers.ToList(); var newRanks = new List <RotationUsers>(); _db.RotationUsers.RemoveRange(oldRanks); _db.SaveChanges(); var incrementor = 0; foreach (var rank in oldRanks) { var nextRank = users.FindIndex(u => u.Id == rank.UserId); if (nextRank == -1) { nextRank = users.Count + incrementor; incrementor++; } rank.NextRank = nextRank + 1; newRanks.Add(rank); } _db.RotationUsers.AddRange(newRanks); _db.SaveChanges(); }
public string Compute(GOPContext db, SocketMessage message) { _db = db; _message = message; var channelId = message.Channel.Id; var zoneText = message.Content.Split(" ").Last(); var zone = DateTimeZoneProviders.Tzdb.GetZoneOrNull(zoneText); if (zone == null) { return(Responses.InvalidTimeZoneResponse(zoneText)); } var response = RotationHelpers.FindRotation(db, channelId, zone); if (response.Rotation == null) { return(response.ErrorMessage); } db.Rotations.Remove(response.Rotation); db.SaveChanges(); return($"{zone} successfully removed."); }
private void UpdateStoredUsers(List <IGuildUser> users) { foreach (var user in users) { var storedUser = _db.Users.FirstOrDefault(u => u.Id == user.Id.ToDecimal()); if (storedUser == null) { _db.Users.Add(new Users { Id = user.Id.ToDecimal(), Nickname = user.Nickname, Username = user.Username, Mention = user.Mention }); } } _db.SaveChanges(); }
private void RemovePlayersFromRotation(Rotations rotation, List <IGuildUser> users) { var ranksToShift = 0; foreach (var rank in rotation.RotationUsers) { var remove = users.FindIndex(u => u.Id == rank.UserId) > -1; if (remove) { _db.RotationUsers.Remove(rank); ranksToShift++; continue; } rank.NextRank = rank.NextRank - ranksToShift; } _db.SaveChanges(); }
private void RotateRotation(Rotations rotation, Instant current) { var rotationToUpdate = _db.Rotations .Single(r => r.Id == rotation.Id); var ranksToUpdate = _db.RotationUsers .Where(r => r.RotationId == rotation.Id) .OrderBy(r => r.NextRank) .ToList(); if (ranksToUpdate.Count > 0) { foreach (var rank in ranksToUpdate) { rank.NextRank--; } ranksToUpdate[0].NextRank = ranksToUpdate.Count; } rotationToUpdate.LastNotification = current.ToDateTimeUtc(); _db.SaveChanges(); }
public string Compute(GOPContext db, SocketMessage message) { _db = db; _message = message; var channelId = message.Channel.Id; var zoneText = message.Content.Split(" ").Last(); var zone = DateTimeZoneProviders.Tzdb.GetZoneOrNull(zoneText); if (zone == null) { return(Responses.InvalidTimeZoneResponse(zoneText)); } var response = RotationHelpers.FindRotation(db, channelId, zone); if (!response.TimezoneValid) { return(response.ErrorMessage); } if (response.Rotation != null) { return($"There is already a rotation saved for {zone}"); } var rotation = new Rotations(); rotation.ChannelId = channelId; rotation.Timezone = zone.ToString(); db.Rotations.Add(rotation); db.SaveChanges(); return($"Successfully created a new rotation for {zone}."); }