I have a problem with my code in discord js v14 and distube v4, it always show this error.
if (!queue.autoplay && queue.songs.length <= 1) return; ^ TypeError: Cannot read properties of undefined (reading 'autoplay') at Client.<anonymous> (C:\Users\Alberto\Desktop\Bot discord\index.js:51:14) at Client.emit (node:events:525:35) at MessageCreateAction.handle (C:\Users\Alberto\node_modules\discord.js\src\client\actions\MessageCreate.js:28:14) at module.exports [as MESSAGE_CREATE] (C:\Users\Alberto\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32) at WebSocketManager.handlePacket (C:\Users\Alberto\node_modules\discord.js\src\client\websocket\WebSocketManager.js:352:31) at WebSocketShard.onPacket (C:\Users\Alberto\node_modules\discord.js\src\client\websocket\WebSocketShard.js:494:22) at WebSocketShard.onMessage (C:\Users\Alberto\node_modules\discord.js\src\client\websocket\WebSocketShard.js:328:10) at callListener (C:\Users\Alberto\node_modules\ws\lib\event-target.js:290:14) at WebSocket.onMessage (C:\Users\Alberto\node_modules\ws\lib\event-target.js:209:9) at WebSocket.emit (node:events:513:28)
Node.js v19.9.0
Here's my code:
const discord = require('discord.js');
const { EmbedBuilder } = require('discord.js');
const { SpotifyPlugin } = require("@distube/spotify")
const { SoundCloudPlugin } = require("@distube/soundcloud")
const { DisTube } = require('distube');
const client = new discord.Client({
intents: [
discord.GatewayIntentBits.Guilds,
discord.GatewayIntentBits.GuildMessages,
discord.GatewayIntentBits.GuildVoiceStates,
discord.GatewayIntentBits.MessageContent
]
});
const distube = new DisTube(client, {
leaveOnStop: false,
emitNewSongOnly: true,
emitAddSongWhenCreatingQueue: false,
emitAddListWhenCreatingQueue: false,
plugins: [new SpotifyPlugin(), new SoundCloudPlugin()]
});
client.once('ready', () => {
console.log(`Logged in as ${client.user.tag}`);
});
client.on("messageCreate", async (message) => {
if (!message.content.startsWith('-play')) return;
const voiceChannel = message.member.voice.channel;
if (!voiceChannel) return message.channel.send('Devi essere in un canale vocale per utilizzare questo comando.');
const args = message.content.slice(6).trim();
if (!args) return message.channel.send('Devi specificare una canzone o un URL valido.');
const song = distube.play(message.member.voice.channel, args, {
member: message.member,
textChannel: message.channel,
message: message
});
});
client.on('messageCreate', (message) => {
if (!message.content === ('-s')) return;
const queue = distube.getQueue(message);
if (!queue.autoplay && queue.songs.length <= 1) return;
distube.skip(message);
message.channel.send('⏭ Saltata la canzone attuale.');
});
client.on('messageCreate', (message) => {
if (!message.content.startsWith('-stop')) return;
const queue = distube.getQueue(message);
if (!queue.autoplay && queue.songs.length <= 1) return;
distube.stop(message);
message.channel.send(' La coda di riproduzione è stata interrotta.');
});
distube.on('playSong', (queue, song) => {
const embed = new discord.EmbedBuilder()
.setTitle("Riproducendo canzone:")
.addFields({ name: "Canzone:", value: song.name })
queue.textChannel.send({ embeds: [embed] })
});
distube.on('addSong', (queue, song) => {
const embed = new discord.EmbedBuilder()
.setTitle("Canzone aggiunta:")
.addFields({ name: "Canzone:", value: song.name })
queue.textChannel.send({ embeds: [embed] })
});
client.login('TOKEN');
If this is possible i want to write on discord -p and do the same of -play,
If you look at the DisTube documentation,
getQueuereturns either a Queue, or undefined. In your case, it's returning undefined (presumably to indicate there is no queue at the time).The solution is thus to check if the queue exists.