#javascript #node.js #discord #discord.js
#javascript #node.js #Discord #discord.js
Вопрос:
Я кодирую музыкального бота в Discord JS v12 и в настоящее время работаю над командами !pause и !resume . Они довольно просты, и в коде нет ошибок. Вот что происходит:
- Воспроизводится песня.
- ! вызывается пауза, и песня приостанавливается, и отображается сообщение о подтверждении паузы.
- !вызывается resume и отображается сообщение о подтверждении возобновления.
- Песня не возобновляется, все остальное работает отлично, !очередь, !команды воспроизведения также.
Это мой! код команды pause:
// Discord.js initialization.
const Discord = require("discord.js");
// Functions initialization.
const functions = require("../../functions.js");
// Initialization of the server specific variables data.
const serverData = require("../../serverData.json");
// The command's code goes inside an async function.
module.exports.run = async (bot, message, args, ops) => {
/****************************/
/**** MESSAGE DELETION ****/
/****************************/
// Deletes the command invocation.
await message.delete().catch(O_o => { });
/************************/
/**** CONDITIONALS ****/
/************************/
// Fetches the guild object from the Map.
let fetched = ops.active.get(message.guild.id);
// Checks if there is any object in the fetched.
if (!fetched) {
// End of the function and message prints
return message.channel.send(`> ${message.author}, there is no music playing or queued.`).then(msg => msg.delete({ timeout: 3000 }));
}
// Checks if the message author is in the same voice channel as the bot.
if (message.member.voice.channel !== message.guild.me.voice.channel) {
// End of the function and message prints.
return message.channel.send(`> ${message.author}, you must be in the same voice channel as the bot.`).then(msg => msg.delete({ timeout: 3000 }));
}
// Then, check if the dispatcher is already paused.
if(fetched.dispatcher.paused){
// End of the function and message prints.
return message.channel.send(`> ${message.author}, the song is already paused.`).then(msg => msg.delete({ timeout: 3000 }));
}
/*****************************/
/**** COMMAND EXECUTION ****/
/*****************************/
// If nothing made the command exit, it executes the pause.
fetched.dispatcher.pause(true);
// Otherwise tell them in chat that they added a vote to skip.
message.channel.send(`> ${message.member}, the current song has been paused.`).then(msg => msg.delete({ timeout: 4000 }));
}
// Command name.
module.exports.help = {
name: "pause"
}
Это мой !код команды resume:
// Discord.js initialization.
const Discord = require("discord.js");
// Functions initialization.
const functions = require("../../functions.js");
// Initialization of the server specific variables data.
const serverData = require("../../serverData.json");
// The command's code goes inside an async function.
module.exports.run = async (bot, message, args, ops) => {
/****************************/
/**** MESSAGE DELETION ****/
/****************************/
// Deletes the command invocation.
await message.delete().catch(O_o => { });
/************************/
/**** CONDITIONALS ****/
/************************/
// Fetches the guild object from the Map.
let fetched = ops.active.get(message.guild.id);
// Checks if there is any object in the fetched.
if (!fetched) {
// End of the function and message prints
return message.channel.send(`> ${message.author}, there is no music playing or queued.`).then(msg => msg.delete({ timeout: 3000 }));
}
// Checks if the message author is in the same voice channel as the bot.
if (message.member.voice.channel !== message.guild.me.voice.channel) {
// End of the function and message prints.
return message.channel.send(`> ${message.author}, you must be in the same voice channel as the bot.`).then(msg => msg.delete({ timeout: 3000 }));
}
// Then, check if the dispatcher is already paused.
if(!fetched.dispatcher.paused){
// End of the function and message prints.
return message.channel.send(`> ${message.author}, the song is not paused.`).then(msg => msg.delete({ timeout: 3000 }));
}
/*****************************/
/**** COMMAND EXECUTION ****/
/*****************************/
// If nothing made the command exit, it executes the pause.
fetched.dispatcher.resume(true);
// Otherwise tell them in chat that they added a vote to skip.
message.channel.send(`> ${message.member}, the current song has been resumed.`).then(msg => msg.delete({ timeout: 4000 }));
}
// Command name.
module.exports.help = {
name: "resume"
}
Я заметил, что если я изменю команду resume и удалю последнее предложение if, проверяющее, приостановлена ли песня, и если я также добавлю .pause() перед .resume() и еще один дополнительный .resume() и выполню те же действия, это сработает:
- Воспроизводится песня.
- ! вызывается пауза, и песня приостанавливается, и отображается сообщение о подтверждении паузы.
- !вызывается resume и отображается сообщение о подтверждении возобновления.
- !resume вызывается во второй раз, и песня возобновляется практически без сбоев звука, также отправляется сообщение о подтверждении возобновления в чате.
- ! вызывается пауза, и песня приостанавливается и отправляет сообщение о подтверждении паузы.
- !resume вызывается только один раз, и песня возобновляется практически без сбоев звука, также отправляет сообщение о подтверждении возобновления в чате.
- С этого момента команды работают нормально.
Это измененный код команды !resume:
// Discord.js initialization.
const Discord = require("discord.js");
// Functions initialization.
const functions = require("../../functions.js");
// Initialization of the server specific variables data.
const serverData = require("../../serverData.json");
// The command's code goes inside an async function.
module.exports.run = async (bot, message, args, ops) => {
/****************************/
/**** MESSAGE DELETION ****/
/****************************/
// Deletes the command invocation.
await message.delete().catch(O_o => { });
/************************/
/**** CONDITIONALS ****/
/************************/
// Fetches the guild object from the Map.
let fetched = ops.active.get(message.guild.id);
// Checks if there is any object in the fetched.
if (!fetched) {
// End of the function and message prints
return message.channel.send(`> ${message.author}, there is no music playing or queued.`).then(msg => msg.delete({ timeout: 3000 }));
}
// Checks if the message author is in the same voice channel as the bot.
if (message.member.voice.channel !== message.guild.me.voice.channel) {
// End of the function and message prints.
return message.channel.send(`> ${message.author}, you must be in the same voice channel as the bot.`).then(msg => msg.delete({ timeout: 3000 }));
}
/*****************************/
/**** COMMAND EXECUTION ****/
/*****************************/
// If nothing made the command exit, it executes the pause.
fetched.dispatcher.pause(true);
fetched.dispatcher.resume();
fetched.dispatcher.resume();
// Otherwise tell them in chat that they added a vote to skip.
message.channel.send(`> ${message.member}, the current song has been resumed.`).then(msg => msg.delete({ timeout: 4000 }));
}
// Command name.
module.exports.help = {
name: "resume"
}
Я знаю, что это немного странно, и я не видел много информации об этом, но я видел много людей с такой же ошибкой. Я проверил извлечено, и это хорошо, поэтому я не знаю, в чем проблема. Я был бы на 110% признателен за вашу помощь, ребята.
Комментарии:
1. Вы можете попытать счастья с
message.guild.me.voice.connection.dispatcher.resume()
. В противном случае вы можете попробоватьnpm i discordjs/discord.js
установить основную (не проверенную на 100%) версию и проверить, продолжает ли у вас возникать эта проблема.2. ни один из них не помог. Я совершенно ошеломлен этим.
3. Скорее всего, никто на самом деле не знает, что здесь происходит. Лучшим вариантом было бы уменьшить как можно больше кода и посмотреть, остались ли у вас проблемы с ним, когда вы удалили все не discord.js части.
Ответ №1:
У меня тоже была эта проблема, ее можно исправить, используя LTS-версию Node.js (14.15.5)
Ответ №2:
Для всех, кто ищет решение. dispacter.resume() глючит в node v14.16.1 , поэтому, если вы хотите, чтобы он работал, используйте node <=14.16.1.