【问题标题】:How to fix TypeError [INVALID_TYPE]: Supplied parameter is not a User nor a Role如何修复 TypeError [INVALID_TYPE]:提供的参数不是用户也不是角色
【发布时间】:2021-11-15 00:32:35
【问题描述】:

我在尝试创建角色和文本频道时遇到了问题。创建的角色将为文本通道设置权限。

if (id === '4') {
  message.guild.roles.create({
    name: `Owner`,
    color: `${color.white}`,
    permissions: ['ADD_REACTIONS'],
    hoist: true,
  });

  let owner = message.guild.roles.cache.find((role) => role.name === 'Owner');

  name = `${names.name}`,
    message.guild.channels
      .create(name, {
        type: 'GUILD_TEXT',
        permissionOverwrites: [
          {
            id: owner,
            allow: ['ADD_REACTIONS'],
            deny: ['VIEW_CHANNEL'],
          },
        ],
      })
      .catch((err) => console.log(err));
}

虽然创建了角色,但是到了文本通道,却找不到制作的角色,报错:

TypeError [INVALID_TYPE]: Supplied parameter is not a User nor a Role.

我不确定如何解决这个问题。

【问题讨论】:

  • 似乎 ownerundefined。尝试记录owner
  • @MrMythical 是的,它未定义。
  • 确保角色存在。还要确保它被缓存,运行message.guild.roles.fetch()
  • 从我从一些测试中看到的是,当“所有者”角色已经添加到服务器时,它可以正常工作。但它没有“所有者”角色,它将返回未定义并且不会创建文本通道。

标签: javascript discord.js


【解决方案1】:

roles.create() 是一个异步方法,这意味着它返回一个承诺并允许您的其余代码运行而不会阻塞任何东西。这也意味着当您尝试在下一行查找新创建的角色时,它不会出现,因为它甚至还没有创建,所以它将是undefined。由于undefined 不是有效的RoleUser,您会收到TypeError

但是,roles.create() 解析为新创建的角色,因此您可以等待它被创建(例如使用 await)并获取它的值。这样你以后甚至不需要找到它。查看下面的代码:

let owner = await message.guild.roles.create({
  name: `Owner`,
  color: color.white,
  permissions: ['ADD_REACTIONS'],
  hoist: true,
});

message.guild.channels
  .create(names.name, {
    type: 'GUILD_TEXT',
    permissionOverwrites: [
      {
        // now owner is a valid role
        id: owner,
        allow: ['ADD_REACTIONS'],
        deny: ['VIEW_CHANNEL'],
      },
    ],
  })
  .catch((err) => console.log(err));

【讨论】:

    【解决方案2】:

    您似乎还没有等待角色创建函数。 尝试使用此代码:

     if(id === '4'){
    
    
            await message.guild.roles.create({
                name: `Owner`,
                color: `${color.white}`,
                permissions: ["ADD_REACTIONS"],
                hoist: true
            });
    
    
            let owner = message.guild.roles.cache.find(role => role.name === "Owner");
    
            name = `${names.name}`,
            await message.guild.channels.create(name, {
                type: "GUILD_TEXT",  
                permissionOverwrites: [{
                    id: owner,
                    allow: ['ADD_REACTIONS'],
                    deny: ['VIEW_CHANNEL']
                }]
            }).catch(err => console.log(err));
    
        }
    

    【讨论】:

      猜你喜欢
      • 2021-11-15
      • 2021-08-13
      • 2019-09-23
      • 2020-08-20
      • 2021-01-22
      • 1970-01-01
      • 2020-08-10
      • 2020-12-25
      • 1970-01-01
      相关资源
      最近更新 更多