# Join to Create

## <mark style="color:blue;">Introduction</mark>

The Join to Create configuration file (`join_to_create.json`) allows you to set up voice channels that automatically create temporary, user-owned voice channels when joined. These temporary channels are deleted when empty.

***

## <mark style="color:blue;">Temporary Channels</mark>

**Type:** Array of Objects

Define which voice channels act as "join to create" triggers and where the temporary channels are created.

```json
temporary_channels: [
    {
        voice_channel_id: "804354081711849492",
        category_id: "1196838574943907850",
        settings_id: "settings_1",
    },
]
```

### <mark style="color:yellow;">voice\_channel\_id</mark>

**Type:** String

The ID of the voice channel that users join to create their temporary channel.

```json
voice_channel_id: "804354081711849492"
```

When a user joins this channel, they are immediately moved to a new temporary channel created specifically for them.

***

### <mark style="color:yellow;">category\_id</mark>

**Type:** String

The Discord category ID where temporary voice channels will be created.

```json
category_id: "1196838574943907850"
```

All temporary channels created from this join-to-create channel will appear in this category.

***

### <mark style="color:yellow;">settings\_id</mark>

**Type:** String

The ID of the settings configuration to apply to temporary channels. This references a settings object defined in the `settings` section below.

```json
settings_id: "settings_1"
```

This allows you to have different configurations for different join-to-create channels.

***

## <mark style="color:blue;">Settings</mark>

**Type:** Object

Define different configuration sets for temporary voice channels. You can create multiple setting sets and reference them by ID.

```json
settings: {
    "settings_1": {
        channel_name: "%user%'s call",
        user_limit: 4,
        locked: false,
        hidden: false,
        base_permission_role: "804354037662220289",
        blacklisted_roles: [],
    },
    "settings_2": {
        // Different configuration...
    },
}
```

***

### <mark style="color:yellow;">channel\_name</mark>

**Type:** String

The name format for created temporary voice channels.

```json
channel_name: "%user%'s call"
```

**Available Placeholder:**

* `%user%` - Username of the channel creator

**Examples:**

* `"%user%'s call"` → `"JohnDoe's call"`
* `"%user%'s Channel"` → `"JohnDoe's Channel"`
* `"Temp VC - %user%"` → `"Temp VC - JohnDoe"`

***

### <mark style="color:yellow;">user\_limit</mark>

**Type:** Number (0-99)

Maximum number of users allowed in the temporary voice channel.

```json
user_limit: 4
```

**Values:**

* `0` - No limit (unlimited users)
* `1-99` - Specific user limit

The channel creator can change this limit later using the `/tempvoice` command.

***

### <mark style="color:yellow;">locked</mark>

**Type:** Boolean

Whether the temporary channel is locked by default (only the owner can join).

```json
locked: false
```

**When `true`:**

* Only the channel owner can join initially
* Owner must manually allow others to join
* Useful for private channels

**When `false`:**

* Anyone with permissions can join
* More open for public use

The channel creator can toggle this later using the `/tempvoice` command.

***

### <mark style="color:yellow;">hidden</mark>

**Type:** Boolean

Whether the temporary channel is hidden by default (only the owner can see it).

```json
hidden: false
```

**When `true`:**

* Only the channel owner can see the channel
* Completely private until owner makes it visible
* Useful for private discussions

**When `false`:**

* Channel is visible to users with the base permission role
* More discoverable

The channel creator can toggle this later using the `/tempvoice` command.

***

### <mark style="color:yellow;">base\_permission\_role</mark>

**Type:** String

The role ID that determines who can see and join temporary channels by default.

```json
base_permission_role: "804354037662220289"
```

**How it works:**

* Users with this role (or higher in the role hierarchy) can see and join the channel
* Commonly set to a "Member" or "Verified" role to prevent unverified users from accessing

{% hint style="info" %}
**Tip:** If your server has a verification system, set this to your verified member role to prevent unverified users from using temporary channels.
{% endhint %}

***

### <mark style="color:yellow;">blacklisted\_roles</mark>

**Type:** Array of Strings

List of role IDs that are not allowed to join temporary voice channels by default.

```json
blacklisted_roles: [
    "123456789012345678",
    "234567890123456789",
]
```

Users with these roles cannot join temporary channels unless explicitly granted access by the channel owner.

**Common use cases:**

* Muted roles
* Banned from voice roles
* Restricted roles

***

## <mark style="color:blue;">Multiple Configurations Example</mark>

You can create different join-to-create channels with different settings:

```json
{
    config: {
        temporary_channels: [
            {
                // Public temporary channels
                voice_channel_id: "804354081711849492",
                category_id: "1196838574943907850",
                settings_id: "public_settings",
            },
            {
                // Private temporary channels
                voice_channel_id: "123456789012345678",
                category_id: "234567890123456789",
                settings_id: "private_settings",
            },
            {
                // Gaming temporary channels
                voice_channel_id: "345678901234567890",
                category_id: "456789012345678901",
                settings_id: "gaming_settings",
            },
        ],

        settings: {
            "public_settings": {
                channel_name: "%user%'s Channel",
                user_limit: 0,
                locked: false,
                hidden: false,
                base_permission_role: "804354037662220289",
                blacklisted_roles: [],
            },
            "private_settings": {
                channel_name: "%user%'s Private Room",
                user_limit: 5,
                locked: true,
                hidden: true,
                base_permission_role: "804354037662220289",
                blacklisted_roles: [],
            },
            "gaming_settings": {
                channel_name: "%user%'s Gaming Session",
                user_limit: 10,
                locked: false,
                hidden: false,
                base_permission_role: "804354037662220289",
                blacklisted_roles: ["123456789012345678"],
            },
        }
    }
}
```

***

## <mark style="color:blue;">Complete Configuration Example</mark>

Here's a simple, production-ready configuration:

```json
{
    config: {
        temporary_channels: [
            {
                voice_channel_id: "804354081711849492",
                category_id: "1196838574943907850",
                settings_id: "settings_1",
            },
        ],

        settings: {
            "settings_1": {
                channel_name: "%user%'s call",
                user_limit: 4,
                locked: false,
                hidden: false,
                base_permission_role: "804354037662220289",
                blacklisted_roles: [],
            },
        }
    }
}
```

{% hint style="success" %}
**How it works:**

1. User joins the voice channel specified in `voice_channel_id`
2. Bot creates a new temporary channel in the specified `category_id`
3. User is moved to their new temporary channel
4. User becomes the owner and can manage the channel with `/tempvoice`
5. When all users leave, the channel is automatically deleted
   {% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.iynxdev.com/configuration-files/join-to-create.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
