private async Task AddToQueueList(List <PugUser> signupList, string regionText)
    {
        var user = Context.User;

        if (signupList.Count >= _maxPlayers)
        {
            string replayString = string.Format(Resources.ErrorPugIsFull, Context.User.GetName());
            await SendEmbededMessageAsync(replayString);
        }
        else
        {
            if (signupList.Select(x => x.IUser.Id).Contains(user.Id))
            {
                string replayString = string.Format(Resources.ErrorYouAreAlreadySignedUp, Context.User, regionText, signupList.Count, _maxPlayers);
                await SendEmbededMessageAsync(replayString);
            }
            else
            {
                var pugUser = new PugUser(user, datastore.GetOrCreateUser(user));

                signupList.Add(pugUser);

                string replayString = string.Format(Resources.PlayerJoinedTheQueue, regionText, signupList.Count, _maxPlayers, Context.User.GetName()) + string.Join("\n", signupList.Select(x => string.Format(Resources.NameAndRating, x.IUser.GetName(), x.GetDisplayRanking())));

                await SendEmbededMessageAsync(replayString);

                if (signupList.Count >= _maxPlayers)
                {
                    datastore.SignedUpUsers = signupList;

                    datastore.CurrentPug = new Pug()
                    {
                        Region = regionText == "EU" ? Region.EU : Region.NA
                    };
                    string replayString2 = string.Format(Resources.PugIsNowFull, regionText);

                    datastore.CurrentPugState = DataStore.PugState.Readyup;

                    var autoEvent = new AutoResetEvent(false);
                    datastore.ReadyUpTimer = new Timer(new TimerCallback(ReadyUpTimerProc), autoEvent, READY_UP_TIME * 1000, 0);

                    await SendEmbededMessageAsync(replayString2);
                }
            }
        }
    }
    public async Task ChooseCaptains()
    {
        //Tries to find captain that have alteast 15 games
        var chooseableCapatins = datastore.SignedUpUsers.Where(x => (x.DatabaseUser.Wins + x.DatabaseUser.Loses) >= 15);

        //If it cant find 2 that can do that, just include everyone
        if (chooseableCapatins.Count() < 2)
        {
            chooseableCapatins = datastore.SignedUpUsers;
        }

        int numOfChoosable = Math.Min(chooseableCapatins.Count(), 5);

        var orderList = chooseableCapatins.OrderByDescending(x => x.DatabaseUser.SkillRating).Take(numOfChoosable);

        Random random = new Random();

        //First captain is random between the 5 highest ranked players
        int     indexCapt1 = random.Next(orderList.Count());
        PugUser capt1      = orderList.ToList()[indexCapt1];

        //Second captain is the one cloest in rating to the first captain.
        int indexAbove = indexCapt1 - 1;
        int indexBelow = indexCapt1 + 1;

        double skillDiffAbove = double.MaxValue;
        double skillDiffBelow = double.MaxValue;

        var playerAbove = orderList.ElementAtOrDefault(indexAbove);
        var playerBelow = orderList.ElementAtOrDefault(indexBelow);

        if (playerAbove != null)
        {
            skillDiffAbove = Math.Abs(capt1.DatabaseUser.SkillRating - playerAbove.DatabaseUser.SkillRating);
        }

        if (playerBelow != null)
        {
            skillDiffBelow = Math.Abs(capt1.DatabaseUser.SkillRating - playerBelow.DatabaseUser.SkillRating);
        }

        PugUser capt2;

        if (skillDiffAbove < skillDiffBelow)
        {
            capt2 = playerAbove;
        }
        else
        {
            capt2 = playerBelow;
        }



        //Make sure so the lowest skillrating of the captains get first pick.
        if (capt1.DatabaseUser.SkillRating > capt2.DatabaseUser.SkillRating)
        {
            var tempCap = capt1;
            capt1 = capt2;
            capt2 = tempCap;
        }

        capt1.IsPicked = true;
        capt1.Team     = DataStore.Teams.TeamOne;
        capt2.IsPicked = true;
        capt2.Team     = DataStore.Teams.TeamTwo;

        datastore.Captain1 = capt1;
        datastore.Captain2 = capt2;


        int curId = 1;

        datastore.SignedUpUsers.Where(x => x.IsPicked == false).ToList().ForEach(x =>
        {
            x.PickID = curId;
            curId++;
        });

        await SendEmbededMessageAsync(string.Format(Resources.CaptainsWithSkill, capt1.IUser.Mention, capt1.GetDisplayRanking(), capt2.IUser.Mention, capt2.GetDisplayRanking()));

        await SendEmbededMessageAsync(Resources.PickNumber +
                                      string.Join("\n", datastore.SignedUpUsers.Where(x => x.IsPicked == false).Select(x => string.Format(Resources.UserPickingInfo, x.PickID, x.IUser.GetName(), x.GetDisplayRanking(), x.DatabaseUser.Info ?? ""))) +
                                      "\n" + string.Format(Resources.PlayersTurnToPick, capt1.IUser.Mention));
    }