Есть ли хороший способ использовать аргументы с message.content.includes в Discord.js ?

#discord.js

#discord.js

Вопрос:

Итак, я пытаюсь сделать простую команду were (например) Я мог бы сказать «Мне скучно», и он сказал бы «Привет, скучно, я бот!».

Вот что у меня есть на данный момент, мне интересно, как я могу сделать это возможным.

 client.on('message', message => {
if(message.content.toLowerCase().includes('bot')) {
    message.channel.send('https://media.giphy.com/media/tczJoRU7XwBS8/giphy.gif');
}
if(message.content.toLowerCase().includes(`i'm`)) {
    message.channel.send(`Hello ${args}, I'm a bot!`)
 

Ответ №1:

Есть несколько способов, с помощью которых вы могли бы это сделать String.includes() , но было бы намного проще добиться этого с String.match() помощью (который работает аналогично, но на самом деле может возвращать то, что было найдено) и Regex . Регулярное выражение используется для сопоставления шаблонов в тексте, и вы абсолютно точно ищете общий шаблон здесь: «Я {что-то}».

Вот один из способов сделать это с помощью match() и regex , если вы хотите включить пробелы:

 if(message.content.match(/(i'm )(. )/i) amp;amp; !message.author.bot) {
    message.channel.send(`Hello ${message.content.match(/(i'm )(. )/i)[2]}, I'm a bot!`)
}
 

Вот способ сделать это без включения пробелов, что, вероятно, то, что вы хотите:

 if(message.content.match(/(i'm )(w )/i) amp;amp; !message.author.bot) {
    message.channel.send(`Hello ${message.content.match(/(i'm )(w )/i)[2]}, I'm a bot!`)
}
 

Я объясню регулярное выражение внутри match() : круглые скобки указывают конкретные группы для сопоставления, . указывают на любой отдельный символ, указывают на один или несколько указанных символов, а i флаг означает, что совпадение не зависит от регистра (создание toLowerCase() больше не требуется). Вы можете перейти на сайты, подобные этому, для получения дополнительной информации и самостоятельно разобраться с регулярными выражениями.

В первом примере, если вы говорите «Я человек», бот отвечает «Привет, человек, я бот!» (использует все аргументы, начиная со второго). Во втором примере, если вы говорите «Я человек», бот отвечает «Привет, а, я бот!» (использует только второй аргумент).

Комментарии:

1. По какой-то причине он рассылает спам Hello I'm , I'm a bot! , когда я говорю I'm sad

2. @Kc5f, теперь я исправил эту проблему в своем ответе. Ответ теперь работает (протестирован и работает). Он больше не рассылает спам, и теперь он говорит Hello sad, I'm a bot! , как задумано.