I have two commands: join and disconnect. Join function makes bot to join voice channel using method joinVoiceChannel, whilst disconnect command removes bot from the channel by using getVoiceConnection method:
join.js
const Command = require('../handlers/Command.js');
const { joinVoiceChannel } = require('@discordjs/voice');
module.exports = new Command({
name: "join",
description: "Joins voice channel",
async run(message, args, client) {
const channel = message.member.voice.channel;
if (!channel) return message.channel.send('You need to be in a voice channel.');
const permissions = channel.permissionsFor(message.client.user);
if (!permissions.has('CONNECT') || !permissions.has('SPEAK')) return message.channel.send("You don't have the right permission.");
const connection = joinVoiceChannel({
channelId: channel.id,
guildId: channel.guild.id,
adapterCreator: channel.guild.voiceAdapterCreator,
});
}
});
disconnect.js
const Command = require('../handlers/Command.js');
const { getVoiceConnection } = require('@discordjs/voice');
module.exports = new Command({
name: "disconnect",
description: "Disconnects from the voice channel",
async run(message, args, client) {
try {
const channel = message.member.voice.channel;
const connection = getVoiceConnection(channel.guild.id);
connection.destroy();
} catch (error) { }
}
});
Can I somehow import the connection constant from join.js to disconnect.js to avoid using other methods?
2 simple ways to access connection
without the need to export and require:
connection
as long as you have access to your Discord Client (typically by client
or message.client
). Of course this will only be available once the join.js
command is executed atleast once, before that happens client.connection
will be undefined
const connection = joinVoiceChannel({
channelId: channel.id,
guildId: channel.guild.id,
adapterCreator: channel.guild.voiceAdapterCreator,
});
client.connection = connection;
// You can now use client.connection in any file that has client defined
global
object. Similar to #1, however the connection
variable gets hoisted with the enviroment's global
object which is accessible to all JavaScript files in the node enviroment.const connection = joinVoiceChannel({
channelId: channel.id,
guildId: channel.guild.id,
adapterCreator: channel.guild.voiceAdapterCreator,
});
global.connection = connection;
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.