简体   繁体   中英

(discord.js) How can I make this command only work for certain roles/users?

I'm still fairly inept when it comes to software development, and need some help with making this command work for only certain roles on my discord server, or only work for certain users

client.on('message', async message => {
    if (message.content === '-fruits') {
        try {
            await message.react('🍎');
            await message.react('🍊');
            await message.react('🍇');
        } catch (error) {
            console.error('One of the emojis failed to react:', error);
        }
    }
});

You can restrict a command to specific users by creating an array of user IDs, and if the message authors ID is in the list check if it matches any commands.

// Create an array of user ids
const adminIDs = [/* List of user IDs */]

client.on('message', async message => {
    // Check if the user who sent the message is in the list 
    if (adminIDs.include(message.author.id)) {
        // If user is in list, then check if message matches a command
        if (message.content === 'foo') {
            // do stuff...
        } else if (message.content === 'bar') {
           // do more stuff..
        }
    }
});

As for roles, you can check if a user has a specific role.

client.on('message', async message => {
    // Check if the user has a role with the name "Admin"
    if (message.member.roles.find(r => r.name === 'Admin')){
        if (message.content === 'foo') {
            // do stuff...
        } else if (message.content === 'bar') {
           // do more stuff..
        }
    }
});

Comment on @KyleRifqi's answer (I don't have 50 rep.)

Roles also have IDs , so you can do message.member.roles.find(r => r.id === "Role ID string") instead, if you happen to have multiple roles with the same name

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM