我有这个完整的错误:
(node:9352) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'push' of undefined
at Object.exports.run (C:\users\Cocoloco2005\Desktop\peterbot\commands\play.js:24:16)
at processTicksAndRejections (internal/process/next_tick.js:81:5)
(node:9352) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:9352) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
这是我在“播放”命令中使用Discord.js创建Discord机器人时遇到的问题
(完整命令在这里:
const ytdl = require('ytdl-core');
exports.run = async (client, message, args, ops) => {
if (!message.member.voiceChannel) return message.channel.send('Connectes toi à un salon vocal');
if (!args[0]) return message.channel.send('Entres une URL');
let validate = await ytdl.validateURL(args[0]);
if (!validate) {
let commandFile = require('./search.js');
return commandFile.run(client, message, args, ops);
}
let info = await ytdl.getInfo(args[0]);
let data = ops.active = (message.guild.id) || {};
if (!data.connection) data.connection = await message.member.voiceChannel.join();
if(!data.queue) data.queue = [];
data.guildID = message.guild.id;
data.queue.push[0]({
songTitle: info.title,
requester: message.author.tag,
url: args[0],
announceChannel: message.channel.id
});
if (!data.dispatcher) play(client, ops, data);
else {
message.channel.send(`Added to queue: ${info.title} | requested by: ${message.author.id}`)
}
ops.active.set(message.guild.id, data);
}
async function play(client, ops, data) {
client.channels.get(data.queue[0].announceChannel).send(`Now Playing: ${data.queue[0].songTitle} | Requested by: ${data.queue[0].requester}`);
data.dispatcher = await data.connection.playStream(ytdl(data.queue[0].url, {filter: 'audioonly'}));
data.dispatcher.guildID = data.guildID;
data.dispatcher.once('end', function() {
end(client, ops, this);
});
}
function end(client, ops, dispatcher){
let fetched = ops.active.get(dispatcher.guildID);
fetched.queue.shift();
if (fetched.queue.length > 0) {
ops.active.set(dispatcher.guildID, fetched);
play(client, ops, fetched);
} else {
ops.active.delete(dispatcher.guildID);
let vc = client.guilds.get(dispatcher.guildID).me.voiceChannel;
if (vc) vc.leave();
}
}
我不知道该怎么做,我没有尝试任何“特别的”操作,因为我是Java语言的新手。 我尝试进行搜索,但没有发现任何有关我的错误的人的信息。
答案 0 :(得分:0)
您的错误在此块中:
data.queue.push[0]({
songTitle: info.title,
requester: message.author.tag,
url: args[0],
announceChannel: message.channel.id
});
除非push
是queue
的可索引属性,否则第一行可能是问题所在。在我看来,您可能不小心添加了[0]
,因为如果没有它,这将是一个有效的声明。我希望这会有所帮助!