不和谐.js:无法读取未定义的属性"roles"



我一直在一个机器人上工作,我试图让它创建一个角色并添加它,它以前工作过,但现在它不再工作了。

代码如下:

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: Cannot read property 'roles' of undefined

我认为问题出在那条消息上。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!")
}
}

希望这有效!

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以及。还要注意,如果用户更改了用户名,将创建一个新角色,因此您的服务器可能会获得一些幽灵角色。

最新更新