Discord.js 创建一个角色并在之后立即获取它的 id

Posted

技术标签:

【中文标题】Discord.js 创建一个角色并在之后立即获取它的 id【英文标题】:Discord.js create a role and get its id immediatly after 【发布时间】:2021-04-02 02:00:33 【问题描述】:

我希望我的机器人检查它所在的每个公会,并在发现某个公会没有角色时创建一些角色。

我的代码如下所示:

let newRoles = 
  'guildId': '',
  'rank1': '', // the role id
  'rank2': ''


client.guilds.forEach(guild => 
  checkHasRoles(guild.id) // returns a Boolean
  if (hasRoles === false) 
    newRoles.guildId = guild.id
    guild.roles.create(
      data: 
        name: 'rank1',
        color: '992d22'
      
    )
    role = guild.roles.cache.find(role => role.name === 'rank1')
    newRoles['rank1'] = role.id
    // The same for the other roles
    rolesArray.push(newRoles)
    save(rolesArray, file)
    rolesArray = load(file)
   
)

我得到的错误是:(node:11833) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'id' of undefined。我猜想同时调用 create() 和 find() 函数有问题,但我想不出一种不同的方法。

如果您能给我详细的解释,我将不胜感激。我是新手。

【问题讨论】:

【参考方案1】:

您必须为此使用承诺,而不是尝试寻找新角色,因为这不会起作用。

  message.guild.roles.create(
      data: 
        name: 'rank1',
        color: '992d22'
      
    ).then(role => 
       let roleId = role.id;
  );

【讨论】:

以上是关于Discord.js 创建一个角色并在之后立即获取它的 id的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 discord.js 创建角色

创建角色时角色覆盖 discord.js

Discord.js - 在前缀和命令之后获取信息

JS Discord 机器人获取角色

在 discord.js 中创建一个用于从数组中查找和终止角色的 for 循环

Discord.js 获取所有具有特定角色的成员