You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js播放命令报错:Cannot read properties of undefined (reading 'reply')

Discord.js音乐机器人playyoutube命令报错排查

我在开发Discord.js音乐机器人的playyoutube命令时遇到问题,最初提示'member'未定义,调整后现在出现新错误:TypeError: Cannot read properties of undefined (reading 'reply')。我尝试将await interaction.reply("message content")改为await interaction.reply({ content: "message content" }),但问题仍未解决。

play-youtube.js 代码

const { SlashCommandBuilder, EmbedBuilder } = require('discord.js')
const { QueryType } = require('discord-player')

module.exports = {
    data: new SlashCommandBuilder()
        .setName("playyoutube")
        .setDescription("Play's a song from youtube.")
        .addSubcommand(subcommand => 
            subcommand 
                .setName("search")
                .setDescription("Search for a song on youtube")
                .addStringOption(option => 
                    option
                        .setName("searchterms")
                        .setDescription("Search Keywords")
                        .setRequired(true)
                )
        )
        .addSubcommand(subcommand => 
            subcommand
                .setName("playlist")
                .setDescription("Pulls a playlist from Youtube. MAKE SURE IT'S PUBLIC!!")
                .addStringOption(option => 
                    option
                        .setName("url")
                        .setDescription("Playlist URL")
                        .setRequired(true)
                )
        )
        .addSubcommand(subcommand => 
            subcommand
                .setName("song")
                .setDescription("Play's a song from Youtube from URL.")
                .addStringOption(option => 
                    option
                        .setName("url")
                        .setDescription("URL of the song/video")
                        .setRequired(true)
                )
        ),
    execute: async ({client, interaction}) => {
        if (!interaction.member.voice.channel) {
            await interaction.reply({ content: "You must be in a vc to run this command!" })
            return;
        }

        const queue = await client.player.createQueue(interaction.guild);

        if (!queue.connection) await queue.connect(interaction.member.voice.channel)

        let embed = new EmbedBuilder()
        if (interaction.options.getSubcommand() === "song") {
            let url = interaction.options.getString("url");

            const result = await client.player.search(url, {
                requestedBy: interaction.user,
                searchEngine: QueryType.YOUTUBE_VIDEO
            });

            if (result.tracks.length === 0) {
                await interaction.reply({ content: "No results found. Maybe the video doesn't exist anymore." })
                return;
            }

            const song = result.tracks[0]
            await queue.addTrack(song);

            embed
                .setDescription(`Added **[${song.title}](${song.url})** to the queue`)
                .setThumbnail(song.thumbnail)
                .setFooter({text: `Duration: ${song.duration}`})
        } else if (interaction.options.getSubcommand() === "playlist") {
            let url = interaction.options.getString("url");

            const result = await client.player.search(url, {
                requestedBy: interaction.user,
                searchEngine: QueryType.YOUTUBE_PLAYLIST
            });

            if (result.tracks.length === 0) {
                await interaction.reply({ content: "No Results Found! Try putting the playlist to public" })
                return;
            }

            const playlist = result.playlist;
            await queue.addTracks(playlist);

            embed
                .setDescription(`Added **[${playlist.title}](${playlist.url})** to the queue`)
                .setThumbnail(song.thumbnail)
                .setFooter({text: `Duration: ${playlist.duration}`})
        } else if (interaction.options.getSubcommand() === "search") {
            let url = interaction.options.getString("url");

            const result = await client.player.search(url, {
                requestedBy: interaction.user,
                searchEngine: QueryType.AUTO
            });

            if (result.tracks.length === 0) {
                await interaction.reply({ content: "No results found! Try a different keyword." })
                return;
            }

            const song = result.tracks[0]
            await queue.addTrack(song);

            embed
                .setDescription(`Added **[${song.title}](${song.url})** to the queue`)
                .setThumbnail(song.thumbnail)
                .setFooter({text: `Duration: ${song.duration}`})
        }

        if (!queue) await queue.play();

        await interaction.reply({
            embeds: [embed]
        })
    }
}

修改前错误栈

D:\Coding Projects\h3lper-refreshed\commands\Music\play-youtube.js:43
            await interaction.reply("You must be in a vc to run this command!")
                              ^

TypeError: Cannot read properties of undefined (reading 'reply')
    at Object.execute (D:\Coding Projects\h3lper-refreshed\commands\Music\play-youtube.js:43:31)
    at Object.execute (D:\Coding Projects\h3lper-refreshed\events\interaction\interactionCreate.js:14:15)
    at Client.<anonymous> (D:\Coding Projects\h3lper-refreshed\handlers\eventHandler.js:27:63)
    at Client.emit (node:events:549:35)
    at InteractionCreateAction.handle (D:\Coding Projects\h3lper-refreshed\node_modules\discord.js\src\client\actions\InteractionCreate.js:81:12)
    at module.exports [as INTERACTION_CREATE] (D:\Coding Projects\h3lper-refreshed\node_modules\discord.js\src\client\websocket\handlers\INTERACTION_CREATE.js:4:36)
    at WebSocketManager.handlePacket (D:\Coding Projects\h3lper-refreshed\node_modules\discord.js\src\client\websocket\WebSocketManager.js:352:31)
    at WebSocketShard.onPacket (D:\Coding Projects\h3lper-refreshed\node_modules\discord.js\src\client\websocket\WebSocketShard.js:480:22)
    at WebSocketShard.onMessage (D:\Coding Projects\h3lper-refreshed\node_modules\discord.js\src\client\websocket\WebSocketShard.js:320:10)
    at WebSocket.onMessage (D:\Coding Projects\h3lper-refreshed\node_modules\ws\lib\event-target.js:199:18)

修改后错误栈

D:\Coding Projects\h3lper-refreshed\commands\Music\play-youtube.js:43
            await interaction.reply({ content: "You must be in a vc to run this command!" })
                              ^

TypeError: Cannot read properties of undefined (reading 'reply')
    at Object.execute (D:\Coding Projects\h3lper-refreshed\commands\Music\play-youtube.js:43:31)
    at Object.execute (D:\Coding Projects\h3lper-refreshed\events\interaction\interactionCreate.js:14:15)
    at Client.<anonymous> (D:\Coding Projects\h3lper-refreshed\handlers\eventHandler.js:27:63)
    at Client.emit (node:events:549:35)
    at InteractionCreateAction.handle (D:\Coding Projects\h3lper-refreshed\node_modules\discord.js\src\client\actions\InteractionCreate.js:81:12)
    at module.exports [as INTERACTION_CREATE] (D:\Coding Projects\h3lper-refreshed\node_modules\discord.js\src\client\websocket\handlers\INTERACTION_CREATE.js:4:36)
    at WebSocketManager.handlePacket (D:\Coding Projects\h3lper-refreshed\node_modules\discord.js\src\client\websocket\WebSocketManager.js:352:31)
    at WebSocketShard.onPacket (D:\Coding Projects\h3lper-refreshed\node_modules\discord.js\src\client\websocket\WebSocketShard.js:480:22)
    at WebSocketShard.onMessage (D:\Coding Projects\h3lper-refreshed\node_modules\discord.js\src\client\websocket\WebSocketShard.js:320:10)
    at WebSocket.onMessage (D:\Coding Projects\h3lper-refreshed\node_modules\ws\lib\event-target.js:199:18)

希望有人能帮忙解决该报错问题!


内容的提问来源于stack exchange,提问作者h3lped

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:01:56