【问题标题】:discord.js v13.1.0 roles is undefineddiscord.js v13.1.0 角色未定义
【发布时间】:2021-10-26 03:14:47
【问题描述】:

我正在尝试向公会的成员添加特定角色,并且此版本的 discord.js 的文档使用“.roles.add”说它,但是当我使用“.roles”时返回未定义,所以我不能使用未定义的。有人知道如何在这个版本的 discord.js 中设置角色吗?

代码:

const member = guild.members.fetch(result.DISCORD);
if(member) {
  let role = guild.roles.fetch('879811123283644490')
  member.roles.add(role)

错误:

C:\Users\USER\Desktop\Thales bot\node_modules\mysql\lib\protocol\Parser.js:437
      throw err; // Rethrow non-MySQL errors
      ^

TypeError: Cannot read property 'add' of undefined
    at C:\Users\USER\Desktop\Thales bot\index.js:54:22
    at Array.forEach (<anonymous>)
    at Query.<anonymous> (C:\Users\USER\Desktop\Thales bot\index.js:46:13)
    at Query.<anonymous> (C:\Users\USER\Desktop\Thales bot\node_modules\mysql\lib\Connection.js:526:10)
    at Query._callback (C:\Users\USER\Desktop\Thales bot\node_modules\mysql\lib\Connection.js:488:16)
    at Query.Sequence.end (C:\Users\USER\Desktop\Thales bot\node_modules\mysql\lib\protocol\sequences\Sequence.js:83:24)
    at Query._handleFinalResultPacket (C:\Users\USER\Desktop\Thales bot\node_modules\mysql\lib\protocol\sequences\Query.js:149:8)
    at Query.EofPacket (C:\Users\USER\Desktop\Thales bot\node_modules\mysql\lib\protocol\sequences\Query.js:133:8)
    at Protocol._parsePacket (C:\Users\USER\Desktop\Thales bot\node_modules\mysql\lib\protocol\Protocol.js:291:23)
    at Parser._parsePacket (C:\Users\USER\Desktop\Thales bot\node_modules\mysql\lib\protocol\Parser.js:433:10)

【问题讨论】:

    标签: javascript node.js discord discord.js bots


    【解决方案1】:

    Guild.members.fetch() 返回一个Promise,它使用GuildMembers 的集合解析。

    因此,在您的代码中,您尝试调用 Promise.roles.add(),这就是您收到错误的原因。

    要修复错误,需要await promise(确保函数为async)或使用.then():

    使用async/await:

    const member = await guild.members.fetch(result.DISCORD);
    if(member) {
      const role = await guild.roles.fetch('879811123283644490');
      member.roles.add(role);
    

    使用.then():

    guild.members.fetch(result.DISCORD).then(member => {
      return guild.roles.fetch('879811123283644490');
    }).then(role => {
      return member.roles.add(role);
    }).catch((err) => {
      // handle errors
    });
    

    【讨论】:

      【解决方案2】:

      这个命令是干什么用的? 我想你只是简单地在公会前面添加消息

      if(member) {
        let role = message.guild.roles.fetch('879811123283644490')
        member.roles.add(role)```
      

      【讨论】:

      • 嘿!它不是命令,而是“就绪”功能的任务。
      猜你喜欢
      • 2021-01-29
      • 2019-01-25
      • 2021-11-01
      • 1970-01-01
      • 2020-12-29
      • 2020-12-21
      • 1970-01-01
      • 2021-08-10
      • 2022-01-13
      相关资源
      最近更新 更多