コード例 #1
0
        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();
        }
コード例 #2
0
        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.");
        }
コード例 #3
0
 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();
 }
コード例 #4
0
        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();
        }
コード例 #5
0
        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();
        }
コード例 #6
0
        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}.");
        }