我想将我的“播放”,“停止”,“跳过”,“离开”命令放到一个名为“ musiccommands.js”的文件中所以我将“播放”代码放入这样:
const Discord = require('discord.js');
const ytdl = require('ytdl-core');
const bot = new Discord.Client();
var servers = {};
module.exports = {
name: 'play',
description: 'works',
execute(msg, args) {
function play(connection, msg) {
var server = servers[msg.guild.id];
server.dispatcher = connection.play(ytdl(server.queue[0], {
filter: "audioonly"
}));
server.queue.shift();
server.dispatcher.on("end", function () {
if (server.queue[0]) {
play(connection, msg);
} else {
connection.disconnect();
}
});
}
if (!args[1]) {
msg.reply('please provide a link');
return;
}
if (!msg.member.voice.channel) {
msg.reply("Join a voice channel to play music!");
return;
}
if (!servers[msg.guild.id]) servers[msg.guild.id] = {
queue: []
}
var server = servers[msg.guild.id];
server.queue.push(args[1]);
const voiceChannel = msg.member.voice.channel;
if (!voiceChannel) {
return msg.reply('you are not in a voice channel.');
} else {
voiceChannel.join().then(function (connection) {
play(connection, msg);
}).catch(err => console.error(err));
}
}
}
((注意:如果您有改进的想法,请发表)
所以我也想在其中添加跳过,停止和保留命令,同时能够访问诸如server.dispatcher之类的东西,因为将每个命令都放在自己的文件中给我带来了一些问题,例如未定义连接但已定义在播放命令中作为函数的参数,所以我曾经用过但是将所有内容放在自己的文件中会使很多事情变得不确定因此,如果您仍然可以提供帮助,请发表评论谢谢!
首先,您正在检查是否似乎需要将!args[1]
设为!args[0]
,因为所有数组都以0
开头((如果您在下面不接受我的建议,请仅执行此操作)。
我建议的一种方法是对music
命令进行子命令,以便将music play <link>
,music stop
,music skip
等都放在一个文件中。
您可以通过检查args[0]
是否为play
,stop
,skip
等来实现此目的>
为了更加清楚,下面是一个示例:
module.exports = {
name: 'music',
description: 'works',
execute(msg, args) {
if (args[0] === "play") {
// Do something
} else if (args[0] === "stop") {
// Do something
} else if (args[0] === "skip") {
// Do something
} else {
message.reply("use the right syntax")
}
}
}