【问题标题】:Discord.js: Cannot read property "roles" of undefinedDiscord.js:无法读取未定义的属性“角色”
【发布时间】:2021-11-01 08:47:13
【问题描述】:

我一直在开发一个机器人,我正在尝试让它创建一个角色并添加它,它以前可以工作,但现在它不再工作了。

代码如下:

exports.run = (client, message, args) => {
  var member = message.mentions.members.first();
  var sender = message.author;
  var guild = message.guild;
  var name = (message.author.username + "'s party")
  var role = sender.guild.roles.cache.find(role => role.name === message.author.username + "'s party");
  // sender.roles.add(role);


  if (typeof role === undefined) {
    let newRole = guild.roles.create({
      data: {
        name: name,
        color: 'BLUE',
      },
      reason: 'Partee',
    })
      .then(console.log)
      .catch(console.error);

      member.roles.add(newRole);
      message.channel.send("Your party has been created!")
  } else {
    member.roles.add(newRole);
    message.channel.send("You have been added to your party!")
  }
}

我不知道为什么会出错。这是错误: TypeError:无法读取未定义的属性“角色”

【问题讨论】:

  • 遇到错误时,您向机器人发送什么消息?另外,请随时 edit 更改标题或添加详细信息。
  • 前缀是=,命令名是party
  • 你可能需要在第 6 行使用guild 而不是sender.guild
  • 同样的错误 101arrowz
  • 据我所知message.author 没有guild 属性

标签: javascript discord discord.js


【解决方案1】:

message.author 没有guild 方法,因此调用它会返回undefined。要创建一个角色并将其提供给作者和提到的用户,我会做这样的事情,例如:

if(message.author.bot === true) return;
if(message.channel.type === "dm") return;

const name = (message.author.username + "'s party");
const member = message.mentions.members.first();

if(member) {
    const authorUser = message.guild.members.cache.get(message.author.id);
    // Find the role first
    const role = message.guild.roles.cache.find(role => role.name === name);
    if(!role) {
        // The role has not be found, create a new one.
        // Create the new role and give it to the person
        // Discord v12: { data: { name: "name", reason: "new role", ...properties } }
        // Discord v13: { name: "name", reason: "new role", ...properties }
        message.guild.roles.create({
            data: {
                name: name,
                color: "BLUE",
            },
            reason: "The party has been started ?"
        }).then(RoleCreated => {
            authorUser.roles.add(RoleCreated)
                .then(() => member.roles.add(RoleCreated))
                .then(() => message.channel.send("PARTY HAS BEEN CREATED! LET'S GET THIS PARTY STARTED! ?"))
                .catch((error) => {
                    console.log(error.message);
                });
        });
    }else{
        // Role exists, give it to the mentioned user
        member.roles.add(role).then(() => message.channel.send("WELCOME TO MY PARTY! LET'S GET THIS PARTY STARTED! ?")).catch((error) => {
            console.error(error.message);
        });
    }
}

! 您可能需要调整代码以适应您的框架。我已经在 Discord V13 上对此进行了测试。也应该在 V12 上工作。另请注意,如果用户更改其用户名,则会创建一个新角色,因此您的服务器可能会获得一些幽灵角色。

【讨论】:

    【解决方案2】:

    我认为问题在于 message.author 返回了发送消息的用户。您将需要该成员。成员对象通过提供有关用户在服务器/公会中的位置的信息来返回有关用户的更多详细信息。

    只需将sender 的值更改为message.member

    例子:

    exports.run = (client, message, args) => {
      var member = message.mentions.members.first();
      var sender = message.member;
      var guild = message.guild;
      var name = (message.author.username + "'s party")
      var role = sender.guild.roles.cache.find(role => role.name === message.author.username + "'s party");
      // sender.roles.add(role);
    
    
      if (typeof role === undefined) {
        let newRole = guild.roles.create({
          data: {
            name: name,
            color: 'BLUE',
          },
          reason: 'Partee',
        })
          .then(console.log)
          .catch(console.error);
    
          member.roles.add(newRole);
          message.channel.send("Your party has been created!")
      } else {
        member.roles.add(newRole);
        message.channel.send("You have been added to your party!")
      }
    }
    

    希望这行得通!

    【讨论】:

      猜你喜欢
      • 2019-01-25
      • 1970-01-01
      • 2022-01-13
      • 2020-12-29
      • 2021-08-10
      • 2022-01-14
      • 1970-01-01
      • 2020-08-17
      • 2020-12-14
      相关资源
      最近更新 更多