UNPKG

discord.js-temporary-channel

Version:
138 lines (96 loc) 5.68 kB
# Discord.js Temporary Voice Channel [![NPM Version](https://img.shields.io/npm/v/discord.js-temporary-channel?style=flat-square)](https://www.npmjs.com/package/discord.js-temporary-channel) [![Downloads](https://img.shields.io/npm/dt/discord.js-temporary-channel?style=flat-square)](https://www.npmjs.com/package/discord.js-temporary-channel) A lightweight library for automatically creating temporary voice channels in Discord servers using Discord.js v14+. It supports automatic channel creation when users join a designated "trigger" channel, along with deletion/renaming when channels become empty. ## Features - **Automatic Channel Creation:** Creates a new temporary voice channel when a user joins a trigger channel (whose name starts with a specified prefix). - **Automatic Channel Management:** Deletes the channel if it becomes empty; if only one member remains (and that member is not a bot), renames the channel accordingly. - **Customizable Options:** Configure user limit, naming conventions, and reason for audit logs. - **Unique Channel Naming:** Ensures channel names are unique by appending a counter if necessary. - **Public and Private Channels:** (Currently, the private channel logic is available but commented out. You can enable it by adjusting your implementation.) ## Installation Install via npm or yarn: ```bash npm install discord.js discord.js-temporary-channel # or yarn add discord.js discord.js-temporary-channel ``` ## Usage Below is an example of how to integrate the library into your Discord bot: ```typescript import { Client, GatewayIntentBits, Partials, Events } from "discord.js"; import CTemporaryVoiceChannel from "discord.js-temporary-channel"; // Create a Discord client with necessary intents const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildVoiceStates, GatewayIntentBits.GuildMessages, ], partials: [Partials.Channel], }); // Configure options for temporary voice channels const options = { userLimit: 23, // Maximum number of users (up to 99) nameStartWith: "3AT ", // Trigger channel name prefix nameStartWithTemporary: "* ", // Prefix for temporary channels reason: "powered by DS112", // Reason for channel actions (audit logs) }; // Initialize the temporary voice channel handler const tempVC = new CTemporaryVoiceChannel(client, options); // Register the voiceStateUpdate listener to handle channel creation/deletion tempVC.init(); // If you wish to enable private temporary channels, // you can modify the implementation to uncomment or integrate the private channel methods. // e.g., tempVC.initPrivate(); client.on(Events.ClientReady, () => { console.log(`Logged in as ${client.user?.tag}!`); }); client.login("YOUR_BOT_TOKEN"); ``` ## API Reference ### `constructor(client: Client, options?: TOptions)` - **Parameters:** - `client`: A Discord.js Client instance. - `options` (optional): Configuration object. - `userLimit`: Maximum number of users allowed in a temporary channel (default: `23`, capped at `99`). - `nameStartWith`: The trigger prefix for the base channel (default: `"3AT "`). - `nameStartWithTemporary`: The prefix used for temporary channels (default: `"* "`). - `reason`: Reason string for channel creation/deletion (default: `"powered by DS112"`). ### `init(): void` - Registers a single `voiceStateUpdate` listener that processes channel events: - **Public Channels:** Calls `handleVoiceStateUpdate` to create a temporary channel when a user joins a trigger channel, and to handle channel deletion/renaming when users leave. - **Private Channels:** The private channel logic is implemented in `handlePrivateVoiceStateUpdate` (currently commented out in the code). You can enable it as needed. ### Internal Methods - **`handleVoiceStateUpdate(oldState: VoiceState, newState: VoiceState): Promise<void>`** Handles public temporary channel creation and deletion based on voice state changes. - **`handlePrivateVoiceStateUpdate(oldState: VoiceState, newState: VoiceState): Promise<void>`** (Private channel logic) Handles creation and deletion of private temporary channels. - **`handleLeave(oldState: VoiceState): Promise<void>`** Deletes or renames a public temporary channel when a user leaves. - **`handlePrivateLeave(oldState: VoiceState): Promise<void>`** Handles deletion or renaming of a private temporary channel when a user leaves. - **`createTemporaryChannel(state: VoiceState): Promise<void>`** Creates a new public temporary channel and moves the user into it. Generates a unique channel name by appending a counter if necessary. - **`createPrivateChannel(state: VoiceState): Promise<void>`** Creates a new private temporary channel and moves the user into it, using a similar unique naming strategy. ## Customization & Advanced Usage - **Default Category:** When creating a temporary channel, if the original channel’s parent (category) is not set, consider modifying the code to provide a default category ID. - **Auto-Deletion Timer:** You can extend the functionality by adding a timer to automatically delete a channel after a period of inactivity. - **Private Channels:** Private temporary channel functionality is implemented separately. To enable it, adjust your initialization to call the private channel methods as needed. ## Contributing Contributions are welcome! Feel free to open issues or pull requests on the [GitHub repository](https://github.com/YOUR_USERNAME/discord.js-temporary-channel). ## License This project is licensed under the [MIT License](LICENSE). ```