> For the complete documentation index, see [llms.txt](https://docs.iynxdev.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.iynxdev.com/configuration-files/join-to-create.md).

# 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 %}
