我正在使用discord.js 开发Discord 机器人。该机器人的目的是每当成员被分配特定角色之一(“alpha”、“bravo”、“charlie”、“delta”)时,就会在 #general 频道中发送祝贺消息。但是,我在实现中遇到了错误。
当前行为:
遇到的问题:
代码片段:
client.on("guildMemberUpdate", async (oldMember, newMember) => {
if (!oldMember.roles.cache.equals(newMember.roles.cache)) {
let newRole;
newMember.roles.cache.forEach((role) => {
if (oldMember.roles.cache.has(role.id)) return;
let roleNames = ["alpha", "bravo", "charlie", "delta"];
if (roleNames.includes(role.name.toLowerCase())) {
newRole = role;
}
});
if(newRole) {
const channel = oldMember.guild.channels.cache.find(channel => channel.name === "general");
channel.send(`Congratulations on becoming part of the ${newRole.name} faction!`);
}
}
});
尝试解决:
if (!oldMember.roles.cache.equals(newMember.roles.cache))
而不是 if (oldMember.roles.cache !== newMember.roles.cache)
。.includes()
替换为 .has(role.id)
以进行正确的角色比较。尽管进行了这些更改,错误仍然存在。我不确定如何继续并解决此问题。
问题:
Client#guildMemberUpdate
,当有关 member
属性的某些内容发生更改(即添加角色)时,会发出该信号。尝试将此代码添加到您的机器人中:
client.on("guildMemberUpdate", async (oldMember, newMember) => {
// On `guildMemberUpdate`
if (!oldMember.roles.cache.equals(newMember.roles.cache)) {
// Check if a role was updated
let newRole;
newMember.roles.cache.forEach((role) => {
if (oldMember.roles.cache.includes(role)) return;
// Check for the new role that was added
let roleNames = ["alpha", "bravo", "charlie", "delta"];
if (roleNames.toLowerCase().includes(role.name.toLowerCase())) {
// Check for only `['alpha', 'bravo', 'charlie', 'delta']`
newRole = role;
}
});
// Anything you want to run here with the `newRole` data.
const channel = oldMember.guild.channels.cache.find(
(channel) => channel.name === "general"
);
channel.send("Congratulations on becoming part of the faction!");
}
});