提供的角色不是角色、雪花或数组或角色或雪花的集合

Posted

技术标签:

【中文标题】提供的角色不是角色、雪花或数组或角色或雪花的集合【英文标题】:Supplied roles is not a Role, Snowflake or Array or Collection of Roles or Snowflakes 【发布时间】:2021-01-04 16:16:58 【问题描述】:

我试图让它在discord.js 中创建一个角色并将其提供给用户,但我似乎收到了这个错误:

UnhandledPromiseRejectionWarning: TypeError [INVALID_TYPE]: Supplied roles is not a Role, Snowflake or Array or Collection of Roles or Snowflakes.

这是我的代码:

let d = msg.guild.roles.create(
 data: 
  name: ':robot: Bot Developer',
  color: 'ff00aa',
  permissions: 'ADMINISTRATOR',
 ,
);
msg.member.roles.add(d);

【问题讨论】:

尝试做msg.member.roles.add(d.id) 问题是您在角色完全创建之前添加了它。使用async msg.guild.roles.create(...) 或使用.then() 语句 这些都不起作用@OctagonalT 【参考方案1】:

根据 Discord.js 文档,RoleManager.create() 返回一个带有角色的 Promise。

由于您没有await.then,因此d 可能是Promise <pending> 。 假设你在异步函数中运行,下面的代码应该可以工作。

let d = await msg.guild.roles.create(
 data: 
  name: ':robot: Bot Developer',
  color: 'ff00aa',
  permissions: 'ADMINISTRATOR',
 ,
);
msg.member.roles.add(d);

如果您处于无法使用异步函数的情况,以下是一种替代方法

msg.guild.roles.create(
 data: 
  name: ':robot: Bot Developer',
  color: 'ff00aa',
  permissions: 'ADMINISTRATOR',
 ,
).then(d => 
 msg.member.roles.add(d);
 // Continue on with what you want to do.
)

如果您遇到包含 await is only valid in an async function 的错误,请通过更改以下内容确保您的函数是异步的:

function foo() 
OR (depending on your code)
client.on('message', message =>

async function foo() 
OR (depending on your code)
client.on('message', async message =>

【讨论】:

以上是关于提供的角色不是角色、雪花或数组或角色或雪花的集合的主要内容,如果未能解决你的问题,请参考以下文章

雪花中角色和用户的限制

雪花系统角色 - USERADMIN 与 SECURITYADMIN

如何在雪花中获取用户角色层次结构?

以最低权限创建雪花角色

丢弃用户时出现雪花问题

角色创建问题