Как проверить, не содержит ли строка фразу "; скажем" после первого экземпляра "; сказать"? - PullRequest
0 голосов
/ 23 марта 2020

Как бы я проверил, не содержит ли строка "; скажем" после того, как человек уже сказал "; скажу", используя раздор. js.

Я хочу убедиться, что пользователь не ломает бот, который я создаю с помощью команды, скажем, скажем, скажем или что-то в этом роде.

Решено, код и примечания:

client.on("message", msg => { // when user says something
    if (msg.content.toLowerCase().includes(";say ") && ((msg.author.id) !== ("690979386354302977"))) { // if it includes, ";say" and is not being sent by the bot
        msg.reply((msg.content).slice(5)) //say everything after the first 5 characters
    }
})

Этот бот все еще сейчас довольно глючно, но я исправлю это рано или поздно.

Ответы [ 2 ]

3 голосов
/ 23 марта 2020

Обычного JavaScript достаточно для того, чтобы сделать работу красиво и без усилий.

Вам просто нужно использовать RegExp.prototype.test() метод, который будет тестировать содержит ли ваша входная строка шаблон ;say, за которым следуют некоторые (или отсутствуют) символы (.*) и затем повторяются снова ((\1)):

!/(;say).*(\1)/.test(str)

Ниже приведена краткая демонстрация:

console.log(!/(;say).*(\1)/.test('')) // true
console.log(!/(;say).*(\1)/.test('When you ;say something ;say')) // false
console.log(!/(;say).*(\1)/.test('When you ;say ;hey')) // true
.as-console-wrapper{min-height:100%;}
1 голос
/ 23 марта 2020

Это проблема XY .

Вы хотите, чтобы ваш бот не ломался, когда вы пишете что-то вроде ;say ;say ;say, верно? Но почему ваш бот в любом случае может запускать свои собственные команды? Первая строка большинства вменяемых обработчиков сообщений должна выглядеть так:

if(msg.author.bot) return;

Другими словами, если текущее сообщение было отправлено ботом, немедленно прекратите обработку и не пытайтесь запускать команды. Таким образом, ваш бот и другие боты не смогут запускать команды вашего бота, и вам даже не придется отвечать на этот вопрос.

...