簡體   English   中英

Discord.js 將特定角色添加到數組

[英]Discord.js add specific roles to array

我正在開發一個為用戶分配角色的 Discord 機器人。 如果 pinged 用戶和執行命令的用戶具有特定角色,我想將其添加到 const。

const role1 = message.guild.roles.cache.find(role => role.name === "role1")
const role2 = message.guild.roles.cache.find(role => role.name === "role2")
const role3 = message.guild.roles.cache.find(role => role.name === "role3")
const roles = [ role1, role2, role3 ]
        
let pingedUser = message.mentions.members.first();
        
const userRole = roles.filter(role => pingedUser.roles.cache.has(role.id))
const ownRole = roles.filter(role => message.member.roles.cache.has(role.id));

console.log(userRole);
console.log(ownRole);

我在控制台中收到此錯誤:“無法讀取未定義的屬性'角色'”

如果有人有解決方案,我會很高興:)

編輯:這就是我執行命令的方式(index.js):

client.on('message', message => {
    if (!message.content.startsWith(prefix) || message.author.bot) return;
    
    const args = message.content.slice(prefix.length).split(/ +/);
    const command = args.shift().toLowerCase();

    if (command === 'testcommand') {
        client.commands.get('testcommand').execute(message, args, Discord, client);
    } 
});

這是我的整個命令文件(commands/testcommand.js):

module.exports = {
    name: 'testcommand',
    description: "",
    async execute(message, args, Discord, client) {    
        const role1 = message.guild.roles.cache.find(role => role.name === "role1")
        const role2 = message.guild.roles.cache.find(role => role.name === "role2")
        const role3 = message.guild.roles.cache.find(role => role.name === "role3")
        const roles = [ role1, role2, role3 ]
        
        let pingedUser = message.mentions.members.first();

        if (!pingedUser) {
            return
          }

        const userRole = roles.filter(role => pingedUser.roles.cache.has(role.id))
        const ownRole = roles.filter(role => message.member.roles.cache.has(role.id));

        console.log(userRole);
        console.log(ownRole);
    }
}   

GuildMemberRoleManager#cache返回一個Collection<Snowflake, Role>其中Snowflake ( id ) 是鍵, Role是值。 因此,您應該檢查集合是否具有role.id鍵。 您可以使用Array.prototype.filter簡化代碼。 在計算他們的角色之前確保pingedUser存在。

if (!pingedUser) {
  return message.reply('User mention missing')
}

const roles = [role1, role2, role3]
const userRoles = roles.filter(role => pingedUser.roles.cache.has(role.id))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM