#javascript #discord.js
Вопрос:
Я пытаюсь создать систему кнопок, в которой, если у вас нет определенной роли, вы не сможете использовать кнопку. Однако созданный мной код, похоже, не работает.
collector.on('collect', async interaction => {
const wikiStaffRole = interaction.user.guild.roles.cache.find(role => role.name == "Staff");
if (interaction.customId === "yes") {
if (!wikiStaffRole) {
return interaction.followUp({ content: `${interaction.user} dude you need to be a staff member`, ephmeral: true });
}
newUserEmbed.edit({ embeds: [], content: 'This report has been marked as completed.', components: [] });
return;
} else if (interaction.customId === "no") {
if (!wikiStaffRole) {
return interaction.followUp({ content: `${interaction.user} dude you need to be a staff member`, ephmeral: true });
}
newUserEmbed.edit({ embeds: [], content: 'This report has been denied.', components: [] });
return;
} else if (interaction.customId === "what") {
if (!wikiStaffRole) {
return interaction.followUp({ content: `${interaction.user} dude you need to be a staff member`, ephmeral: true });
}
newUserEmbed.edit({ embeds: [], content: 'This report has been marked as inconclusive.', components: [] });
return;
}
});
Вместо этого я просто получаю сообщение об ошибке, в котором говорится, что он не может прочитать свойство «роли» неопределенного. Я не могу придумать никаких способов исправить это.
Ответ №1:
Вы попытались получить доступ к несуществующему guild
свойству User
объекта. Это свойство не существует в User
s, но существует в GuildMember
Interaction
объектах и. Этот код должен работать:
const wikiStaffRole = interaction.guild.roles.cache.find(role => role.name == "Staff")
Имейте в виду, что если его нет в гильдии, это приведет к ошибке. Вы можете использовать необязательную цепочку ( ?.
), чтобы предотвратить это
const wikiStaffRole = interaction.guild?.roles.cache.find(role => role.name == "Staff")
Я думаю, вы хотели проверить, была ли у участника эта роль. Вы на самом деле проверяете, имеет ли роль весь сервер. Это позволит проверить только роли участников
const wikiStaffRole = interaction.member?.roles.cache.find(role => role.name == "Staff")
//optional chaining because member would be null if it was sent in a DM