Fix ;mp command
This commit is contained in:
		@@ -153,6 +153,7 @@ namespace NadekoBot.Modules.Permissions
 | 
			
		||||
            toAdd.Next = perm;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* /this can't work if index < 0 and perm isn't roo
 | 
			
		||||
        public static void Insert(this Permission perm, int index, Permission toAdd)
 | 
			
		||||
        {
 | 
			
		||||
            if (index < 0)
 | 
			
		||||
@@ -183,7 +184,7 @@ namespace NadekoBot.Modules.Permissions
 | 
			
		||||
            toAdd.Previous = previous;
 | 
			
		||||
            previous.Next = toAdd;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        */
 | 
			
		||||
        public static Permission RemoveAt(this Permission perm, int index)
 | 
			
		||||
        {
 | 
			
		||||
            if (index <= 0) //can't really remove at 0, that means deleting the element right now. Just use perm.Next if its 0
 | 
			
		||||
 
 | 
			
		||||
@@ -134,32 +134,86 @@ namespace NadekoBot.Modules.Permissions
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    Permission toInsert;
 | 
			
		||||
                    Permission fromPerm = null;
 | 
			
		||||
                    Permission toPerm = null;
 | 
			
		||||
                    using (var uow = DbHandler.UnitOfWork())
 | 
			
		||||
                    {
 | 
			
		||||
                        var config = uow.GuildConfigs.PermissionsFor(channel.Guild.Id);
 | 
			
		||||
                        var perms = config.RootPermission;
 | 
			
		||||
                        var root = perms;
 | 
			
		||||
                        var index = 0;
 | 
			
		||||
                        var fromFound = false;
 | 
			
		||||
                        var toFound = false;
 | 
			
		||||
                        var isLast = true;
 | 
			
		||||
                        while ((!toFound || !fromFound) && perms != null)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (index == from)
 | 
			
		||||
                            {
 | 
			
		||||
                                fromPerm = perms;
 | 
			
		||||
                                fromFound = true;
 | 
			
		||||
                            }
 | 
			
		||||
                            if (index == to)
 | 
			
		||||
                            {
 | 
			
		||||
                                toPerm = perms;
 | 
			
		||||
                                toFound = true;
 | 
			
		||||
                                isLast = false;
 | 
			
		||||
                            }
 | 
			
		||||
                            if (!toFound)
 | 
			
		||||
                            {
 | 
			
		||||
                                toPerm = perms; //In case of to > size
 | 
			
		||||
                            }
 | 
			
		||||
                            perms = perms.Next;
 | 
			
		||||
                            index++;
 | 
			
		||||
                        }
 | 
			
		||||
                        if (perms == null)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (!fromFound)
 | 
			
		||||
                            {
 | 
			
		||||
                                await channel.SendMessageAsync($"`Can't find permission at index `#{++from}`").ConfigureAwait(false);
 | 
			
		||||
                                return;
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        //Change chain for from indx
 | 
			
		||||
                        var next = fromPerm.Next;
 | 
			
		||||
                        var pre = fromPerm.Previous;
 | 
			
		||||
                        if (pre != null)
 | 
			
		||||
                            pre.Next = next;
 | 
			
		||||
                        if (next != null)
 | 
			
		||||
                        {
 | 
			
		||||
                            next.Previous = pre;
 | 
			
		||||
                        }
 | 
			
		||||
                        if (from == 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            toInsert = perms;
 | 
			
		||||
                            perms = perms.Next;
 | 
			
		||||
                            toInsert.Previous = null;
 | 
			
		||||
                            toInsert.Next = null;
 | 
			
		||||
                            perms.Previous = null;
 | 
			
		||||
                            root = next;
 | 
			
		||||
                        }
 | 
			
		||||
                        await uow.CompleteAsync().ConfigureAwait(false);
 | 
			
		||||
                        //Inserting
 | 
			
		||||
                        pre = toPerm.Previous;
 | 
			
		||||
                        if (isLast)
 | 
			
		||||
                        {
 | 
			
		||||
                            toPerm.Next = fromPerm;
 | 
			
		||||
                            fromPerm.Previous = toPerm;
 | 
			
		||||
                            fromPerm.Next = null;
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            toInsert = perms.RemoveAt(from);
 | 
			
		||||
                            toInsert.Previous = null;
 | 
			
		||||
                            fromPerm.Next = toPerm;
 | 
			
		||||
                            fromPerm.Previous = pre;
 | 
			
		||||
                            if (pre != null)
 | 
			
		||||
                            {
 | 
			
		||||
                                pre.Next = fromPerm;
 | 
			
		||||
                            }
 | 
			
		||||
                        var size = perms.Count();
 | 
			
		||||
                        if (from == size || to == size)
 | 
			
		||||
                            throw new IndexOutOfRangeException();
 | 
			
		||||
                        perms.Insert(to, toInsert);
 | 
			
		||||
                        config.RootPermission = perms.GetRoot();
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                root = fromPerm;
 | 
			
		||||
                            }
 | 
			
		||||
                            toPerm.Previous = fromPerm;
 | 
			
		||||
                        }
 | 
			
		||||
                        config.RootPermission = root;
 | 
			
		||||
                        await uow.CompleteAsync().ConfigureAwait(false);
 | 
			
		||||
                    }
 | 
			
		||||
                    await channel.SendMessageAsync($"`Moved permission:` \"{toInsert.GetCommand(channel.Guild)}\" `from #{from} to #{to}.`").ConfigureAwait(false);
 | 
			
		||||
                    await channel.SendMessageAsync($"`Moved permission:` \"{fromPerm.GetCommand(channel.Guild)}\" `from #{++from} to #{++to}.`").ConfigureAwait(false);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e) when (e is ArgumentOutOfRangeException || e is IndexOutOfRangeException)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user