discord.js 成员计数 - 无法读取未定义的属性“通道”

Posted

技术标签:

【中文标题】discord.js 成员计数 - 无法读取未定义的属性“通道”【英文标题】:discord.js member count - Cannot read property 'channels' of undefined 【发布时间】:2021-05-17 09:52:03 【问题描述】:

我一直在尝试在我的 discord 服务器上创建成员计数。我的代码不起作用,我不断收到“无法读取未定义的属性‘通道’”。


module.exports = (client) => 
  const channelId = '810343814517489664'

  const updateMembers = (guild) => 
    const channel = guild.channels.cache.get(channelId)
    channel.setName(`Members: $guild.memberCount.toLocaleString()`)
  

  client.on('guildMemberAdd', (member) => updateMembers(member.guild))
  client.on('guildMemberRemove', (member) => updateMembers(member.guild))

  const guild = client.guilds.cache.get('464316540490088448')
  updateMembers(guild)


【问题讨论】:

我的猜测是member.guild 未定义或不包含名为channels 的属性。您是否能够将值转储到控制台以进行故障排除?我会从membersmembers.guild 开始,看看它们到底包含什么。 【参考方案1】:

您的频道未定义,因为您没有以正确的方式要求它。 你可以要求它:

const channelId = guild.channels.cache.get('CHANNEL ID');

下面我将解释并展示我用于会员计数器的内容!

module.exports = async (client) =>
    const guild = client.guilds.cache.get('GUILD ID');
    setInterval(() =>
        const memberCount = guild.memberCount;
        const channel = guild.channels.cache.get('CHANNEL ID');
        channel.setName(`?Members?:$memberCount.toLocaleString()`);
        console.log('Updating Member Count');
    , 3600000);//I set the update time every 1 hour!

您需要为启动创建一个语音通道,然后机器人会在您每次设置更新时重命名它!

在您的主文件(如 index.js) 中,您需要 require for counter。因此您需要在 主文件夹中创建一个文件夹,并命名为计数器。在这个文件夹 ('counters') 中,您需要创建一个名为 'member-counter.js' 的文件,然后粘贴上面的代码。在您的主文件 (如 index.js) 中,您需要:

const memberCounter = require('./counters/member-counter');

您在具有client.on(ready) 函数并在最后一行设置的下一行:

memberCounter(client);

我的意思是:

client.on('ready', () => 
console.log('I am ready')
memberCounter(client);
);

【讨论】:

以上是关于discord.js 成员计数 - 无法读取未定义的属性“通道”的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js 的欢迎消息 - “无法读取未定义的属性 'get'”

Discord.js 无法读取未定义的属性“获取”

无法读取未定义的属性“发送”(Discord.js)

Discord.js 无法读取未定义的属性“发送”

discord.js TypeError:无法读取未定义的属性“发送”

TypeError:无法读取未定义的“获取”函数(discord.js)