Как выбрать несколько аргументов в команде и назначить их переменной? Discord.js

#discord.js

Вопрос:

Я хочу сделать так, чтобы при использовании !pm (пользователь) (какое-либо сообщение) мой бот отправлял личное сообщение пользователю, хотя я понятия не имею, как выбрать все после (пользователя) и назначить его переменной, чтобы отправить его пользователю. Мой текущий код выглядит так:

 module.exports = {
  name: 'pm',
  description: 'Sends a personal message!',
  execute(message, args, client) {
    const pmMessage = args[1];
    client.users.cache.get('464839066781745167').send(pmMessage);
  }
}
 

Ответ №1:

Поскольку вы знаете индекс массива pmMessage , с помощью этого индекса вы можете использовать метод среза, который возвращает массив из указанного состояния в конечный индекс. Например:

 let pmMessage = args.slice(2); //returns array.
 

Примечание: Если конечный индекс не указан, то он учитывается до последнего индекса массива.

Теперь, используя метод join, вы можете объединить все индексы с любым указанным символом. Напр.:

 let MessageContent = pmMessage.join(' '); //joined by space.
 
 let args = ["UserID","This","represents","the","message","content","to","be","sent"];
console.log(args.slice(1));
console.log(args.slice(1).join(' ')); 

Ответ №2:

Попробуйте это, я думаю, это должно сработать:

 let pm_args = args.slice(1).join(' ')
        
if(args[0]){
    let user = getUserFromMention(args[0])

    if(!user){
        return message.reply('please mention a user.');
    }

    return client.users.cache.get(user.id).send(pm_args);
}

return message.reply('please mention a user.');
 

(Это то, что я использовал для упоминания о штуковине:)

 function getUserFromMention(mention){
    if(!mention) return;

    if(mention.startsWith('<@') amp;amp; mention.endsWith('>')){
        mention = mention.slice(2, -1);

        if(mention.startsWith('!')){
            mention = mention.slice(1);
        }

        return bot.users.cache.get(mention);
    }
};

client.on("message", message => {
    if(!message.content.startsWith(config.prefix)) return;

    const withoutPrefix = message.content.slice(config.prefix.length);
    const split = withoutPrefix.split(/  /);
    const command = split[0];
    const args = split.slice(1);

    // Code...

});