【问题标题】:Cannot read properties of undefined (reading 'join') Discord.js无法读取未定义的属性(读取“加入”)Discord.js
【发布时间】:2021-11-17 08:29:13
【问题描述】:

我试图创建我的不和谐音乐机器人,但是当我运行它时。它无法加入我的语音频道,返回此错误:channel_info.channelId.join 不是函数。下面是我的代码:

const Discord = require('discord.js');
const bot = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES"] });
const ytdl = require('ytdl-core');
const streamOptions = { seek: 0, volume: 1 };
const botToken = 'mytoken';

bot.login(botToken);
    bot.on('ready', () => {
    console.log('to olain');
});

bot.on('message', msg => {
    if (msg.author.bot) {
        return;
    }

    if (msg.content.toLowerCase().startsWith(';p')) {

        const channel_info = msg.member.guild.voiceStates.cache.find(user => user.id == msg.author.id);

        if (channel_info.channelId == null) {
            return console.log('Canal não encontrado!');
        }
        console.log('Canal encontrado');

        channel_info.channelId.join().then(connection => {
                const stream = ytdl('https://www.youtube.com/watch?v=BxmMGnvvDCo', {         filter: 'audioonly' });

            const DJ = connection.playStream(stream, streamOptions);
            DJ.on('end', end => {
                channel_info.channelId.leave();
                });
            })
            .catch(console.error);
    }
});

【问题讨论】:

  • channel_info.channelId 是一个数组吗?因为你只能在数组或类数组对象上使用.join()
  • 我认为您正在尝试加入 vc。这不是正确的方法。如果您使用的是 v13,则需要 @discordjs/voice 包。如果您使用的是 v12,请确保它是通道对象。不是身份证。
  • 请修剪您的代码,以便更容易找到您的问题。请按照以下指南创建minimal reproducible example

标签: javascript discord.js


【解决方案1】:

这段代码有几个问题。即使我们修复了其中一些问题,由于 discord.js v12 和 v13 之间的差异,这段代码仍然无法工作。让我们开始吧。

问题 #1

这不是导致代码无法工作的核心问题之一,但值得考虑。您这样做是为了获取消息作者的语音状态:

msg.member.guild.voiceStates.cache.find(user => user.id == msg.author.id);

当您可以轻松地以更短、不太可能产生错误的方式完成完全相同的事情时:

msg.member.voice;

问题 #2

现在这个导致您的代码无法工作的核心问题。实际上,它导致了您的问题中的错误。你正在尝试做:

channel_info.channelId.join();

这没有意义。您正在尝试加入频道 ID? channelId 只是一串数字,如下所示:"719051328038633544"。你不能“加入”那串数字。您想加入该成员所在的实际channel,如下所示:

channel_info.channel.join();

问题 #3

根据您使用 channelId 属性而不是 channelID 的方式,我假设您使用的是 discord.js v13。语音通道在 v13 上没有.join() 方法;事实上,discord.js v13 不支持加入或播放语音通道中的音频。您必须安装 discord.js/voice 软件包才能加入 discord.js v13 中的语音频道。这很关键。即使你解决了以上两个问题,你也必须解决第三个问题,否则你的代码将无法工作(除非你降级到 discord.js v12)。

【讨论】:

  • 知道了!我已经降级到 discord.js v12 来解决这个问题。最后我明白了!泰
猜你喜欢
  • 1970-01-01
  • 2022-06-10
  • 2021-07-24
  • 1970-01-01
  • 2023-01-14
  • 2023-02-21
  • 2020-12-05
  • 2021-04-14
  • 2020-08-28
相关资源
最近更新 更多