【问题标题】:Couldn't find a channel after creating it discord.js v13创建频道后找不到频道 discord.js v13
【发布时间】:2021-10-12 08:25:15
【问题描述】:
module.exports = async (msg,arg)=>{


const guildid = msg.guild.id
const guild =msg.guild

const display = msg.guild.channels.cache.find(ch => ch.name=='Total Members')

if(!display){
    try {
        const channelName='Total Members'
         await msg.guild.channels.create(channelName, {
            type: "voice", //This create a text channel, you can make a voice one too, by changing "text" to "voice"
            permissionOverwrites: [
               {
                 id: msg.guild.roles.everyone, //To make it be seen by a certain role, user an ID instead
                 allow: ['VIEW_CHANNEL'], //Allow permissions
                 deny: [ 'SEND_MESSAGES','CONNECT'] //Deny permissions
               }
            ],
          })
          msg.channel.send('Successfully created the Channel ')
    }

 catch (error){console.log(error) 
    msg.channel.send('Couldnt create one ')}

}
const display1 = await msg.guild.channels.cache.find(ch => ch.name=='Total Members')
const display1id = await msg.guild.channels.cache.get(display1.id)


setInterval((guild)=>{

const count = msg.guild.memberCount
const channel = msg.guild.channels.cache.get(display1id)
channel.setName(`Total Members: ${count.toLocaleString()}`);
console.log('Updating Member Count');

},5000)



}

错误:

const display1id = await msg.guild.channels.cache.get(display1.id)

TypeError: 无法读取未定义的属性“id”

谁能告诉我如何解决这个错误, 基本上这段代码有助于查看公会的当前成员 它会自动更新它。 如果没有找到任何显示该成员的语音通道,它将创建一个语音通道。

【问题讨论】:

  • 好吧,如果表达式 display1.idcannot read property id of undefined 失败,那么这意味着 display1 未定义,即没有与上一行中的过滤器匹配。
  • 这能回答你的问题吗? Detecting an undefined object property

标签: javascript node.js discord.js


【解决方案1】:

找不到频道的原因是discord.js v13中语音的频道类型是GUILD_VOICE(不仅仅是voice)。这就是它使用 default 频道类型GUILD_TEXT 的原因。并且文本频道的名称中不能包含大写字母和空格。它将频道名称“Total Members”转换为“total-members”,当您尝试使用.find() 搜索频道时,它没有找到,因为频道名称不同。

.find() 方法返回了undefined,您稍后尝试读取返回变量的属性.id。从而读取undefined 的属性.id

在搜索频道时也不要使用等号。请改用.startsWith(),因为稍后您会将成员计数添加到频道名称中。

你可以看看这个:

// ... The variable msg defined somewhere (e.g. as messageCreate callback parameter) ...

const channelName = "Total Members";
let display = msg.guild.channels.cache.find(ch => ch.name.startsWith(channelName));

if(!display) {
    try {
        display = await msg.guild.channels.create(channelName, {
            type: "GUILD_VOICE",
            permissionOverwrites: [
            {
                id: msg.guild.roles.everyone,
                allow: ["VIEW_CHANNEL"],
                deny: ["SEND_MESSAGES", "CONNECT"]
            }
            ],
        });
        msg.channel.send(`Successfully created a channel '${channelName}'.`);
    }
    catch (error) {
        console.log(error);
        msg.channel.send(`Failed to create a channel '${channelName}'.`);
        return;
    }
}

setInterval(() => {
    const count = msg.guild.memberCount;
    display.setName(`${channelName}: ${count.toLocaleString()}`);
    console.log("Updating Member Count ...");
}, 5000);

【讨论】:

  • 感谢您回答了我的问题 现在我可以携带我的代码了
猜你喜欢
  • 2020-07-26
  • 2021-05-04
  • 1970-01-01
  • 2023-03-27
  • 2021-04-04
  • 2020-06-23
  • 2022-01-16
  • 1970-01-01
  • 2021-12-02
相关资源
最近更新 更多