我想将“播放”,“停止”,“跳过”,“离开”命令放到一个名为“ 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之类的东西,因为将每条命令放在自己的文件中给了我一些问题,例如未定义连接,但它是在play命令中定义为函数中的参数,所以我曾经使用 但是将所有内容放在自己的文件中会使很多事情变得不确定 因此,如果您仍然可以提供帮助,请发表评论谢谢!
答案 0 :(得分:0)
首先,您要检查似乎!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")
}
}
}