public override async Task CustomRun(CommandParametersModel parameters)
        {
            List <string> commandTriggers = new List <string>();

            foreach (GameCommandModelBase command in ChannelSession.Services.Command.GameCommands)
            {
                if (command.IsEnabled)
                {
                    RoleRequirementModel roleRequirement = command.Requirements.Role;
                    if (roleRequirement != null)
                    {
                        Result result = await roleRequirement.Validate(parameters);

                        if (result.Success)
                        {
                            commandTriggers.AddRange(command.Triggers.Select(c => $"!{c}"));
                        }
                    }
                }
            }

            if (commandTriggers.Count > 0)
            {
                string text = "Available Games: " + string.Join(", ", commandTriggers.OrderBy(c => c));
                await ChannelSession.Services.Chat.SendMessage(text);
            }
            else
            {
                await ChannelSession.Services.Chat.SendMessage("There are no games available for you to use.");
            }
        }
        public async Task SelectFirstType(RoleRequirementModel roleRequirement)
        {
            foreach (UserViewModel user in this.queue.ToList())
            {
                Result result = await roleRequirement.Validate(new CommandParametersModel(user));

                if (result.Success)
                {
                    this.queue.Remove(user);
                    await ChannelSession.Settings.GetCommand(ChannelSession.Settings.GameQueueUserSelectedCommandID).Perform(new CommandParametersModel(user));

                    GlobalEvents.GameQueueUpdated();
                    return;
                }
            }
            await this.SelectFirst();
        }
        protected override async Task PerformInternal(CommandParametersModel parameters)
        {
            List <string> commandTriggers = new List <string>();

            foreach (ChatCommandModel command in ChannelSession.AllEnabledChatAccessibleCommands)
            {
                if (command.IsEnabled)
                {
                    RoleRequirementModel roleRequirement = command.Requirements.Role;
                    if (roleRequirement != null)
                    {
                        Result result = await roleRequirement.Validate(parameters);

                        if (result.Success)
                        {
                            if (command.IncludeExclamation)
                            {
                                commandTriggers.AddRange(command.Triggers.Select(c => $"!{c}"));
                            }
                            else
                            {
                                commandTriggers.AddRange(command.Triggers);
                            }
                        }
                    }
                }
            }

            if (commandTriggers.Count > 0)
            {
                string text = "Available Commands: " + string.Join(", ", commandTriggers.OrderBy(c => c));
                await ChannelSession.Services.Chat.SendMessage(text);
            }
            else
            {
                await ChannelSession.Services.Chat.SendMessage("There are no commands available for you to use.");
            }
        }