Untitled
Gray
plain_text
8 months ago
3.8 kB
3
Indexable
const {
Client,
GatewayIntentBits,
REST,
Routes,
SlashCommandBuilder,
ChannelType,
PermissionsBitField,
} = require("discord.js");
require("dotenv").config(); // Load token from .env file
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMembers, // Needed to fetch members
],
});
// Manually specify user IDs who should get VC access
const ALLOWED_USER_IDS = ["860829278174576650", "828283498078666764"]; // Replace with actual IDs
// Register commands
const commands = [
new SlashCommandBuilder()
.setName("ping")
.setDescription("Replies with Pong!"),
new SlashCommandBuilder()
.setName("createvc")
.setDescription("Creates a private voice channel"),
].map((command) => command.toJSON());
const rest = new REST({ version: "10" }).setToken(process.env.TOKEN);
client.once("ready", async () => {
console.log(`Logged in as ${client.user.tag}`);
try {
console.log("Refreshing slash commands...");
await rest.put(Routes.applicationCommands(client.user.id), {
body: commands,
});
console.log("Slash commands registered!");
} catch (error) {
console.error(error);
}
});
client.on("interactionCreate", async (interaction) => {
if (!interaction.isCommand()) return;
if (interaction.commandName === "ping") {
return interaction.reply({ content: "Pong! 🏓", ephemeral: true });
}
if (interaction.commandName === "createvc") {
if (
!interaction.member.permissions.has(
PermissionsBitField.Flags.ManageChannels,
)
) {
return interaction.reply({
content:
"❌ You don't have permission to create voice channels!",
ephemeral: true,
});
}
try {
// Ensure members are fetched
await interaction.guild.members.fetch();
const channel = await interaction.guild.channels.create({
name: "Private VC",
type: ChannelType.GuildVoice,
parent: interaction.channel.parentId || null,
permissionOverwrites: [
{
id: interaction.guild.roles.everyone,
deny: [
PermissionsBitField.Flags.ViewChannel,
PermissionsBitField.Flags.Connect,
],
},
...ALLOWED_USER_IDS.map((userId) => ({
id: userId,
allow: [
PermissionsBitField.Flags.ViewChannel,
PermissionsBitField.Flags.Connect,
],
})),
{
id: interaction.user.id,
allow: [
PermissionsBitField.Flags.ViewChannel,
PermissionsBitField.Flags.Connect,
],
},
],
});
await interaction.reply({
content: `✅ Private voice channel **${channel.name}** created!`,
ephemeral: true,
});
} catch (error) {
console.error("Error details:", error);
await interaction.reply({
content: `❌ Could not create the voice channel. ${error.message}`,
ephemeral: true,
});
}
}
});
client.login(process.env.TOKEN);
Editor is loading...
Leave a Comment