JS бот вк

Kecer

Участник
Автор темы
241
11
Добрый день, пишу бота вк и хотел бы найти замену на регулярные вырежния

JavaScript:
bot.hear(/^(?:!test) (.*)$/i, msg => {
    msg.send(`${msg.$match[1]}`)
})

В общем проблема в том что когда я делаю 2 и более регулярных выражения, то-есть (.*) (.*) То в таком случае оно принимает одно слово, это и логично, но как сделать так что бы одно из регулярных выражений принимало несколько слов? без ограничений
 
Решение

В приоритете у меня сделать команду кик с причиной, команда у меня уже есть, но когда я ввожу причину у меня вводится туда последнее слово, а первое слово вводится в msg.$match[1] то-есть туда где нужно указывать айди пользователя
Можно так:
JavaScript:
bot.hear(/^(?:!test) (\w+) (.*)$/i, msg => {
    msg.send(`ID: ${msg.$match[1]}\n Reason: ${msg.$match[2]}`)
})

Или так:

JavaScript:
bot.hear(/^(?:!test) (.*)$/i, msg => {
    const params = msg.$match[1].split(" ")
    const id = params.shift()
    const reason = params.join(" ")
    msg.send(`ID: ${id}\nReason: ${reason}`)
})

meowprd

Тот самый Котовский
Проверенный
1,280
712
с js особо не дружу
пример ввода:
!test string1 string2
регулярка:
^!test (\w+) (\w+)$

1643034424164.png
 
  • Нравится
Реакции: chapo

Kecer

Участник
Автор темы
241
11
Го реально работает спасибки, ещё такой вопрос можно ли как-то проверку на эти регулярки сделать то есть допустим как пример
if(!msg.$match[2]) return msg.send('Вы не указали параметр')
 

Liquit

Активный
277
91
регулярки может и удобно, но я предлагаю реализовать немного по удобнее, например так:

JavaScript:
if(ctx.text.startsWith(prefix))
{
    let msgToParse = ctx.text.slice(prefix.length) // чикчирикаем префикс
    let params = msgToParse.split(" ") // парсим строку
    let cmd = params[0] // получаем переменную
    // все остальные параметры - params[1], params[2] и так далее, в зависимости от того, что нужно сделать
}
так, я думаю будет удобнее работать с параметрами
вот, к примеру реализация простейшей команды, которая будет приветствовать пользователя(я не претендую на красивый код, давно писал, сам знаю что фигово написано, лучше промисом сделать)
JavaScript:
if(cmd == "get" && params[1].length != 0)
{
    let user
    await vk.api.users.get({user_ids: getIdFromString(params[1])}).then(res => {
        user = res
    })
    console.log(user[0].first_name)
    if(user)
    {
        ctx.send(`Hello, [id${user[0].id}|${user[0].first_name}]`)
    }
}
 

Kecer

Участник
Автор темы
241
11
регулярки может и удобно, но я предлагаю реализовать немного по удобнее, например так:

JavaScript:
if(ctx.text.startsWith(prefix))
{
    let msgToParse = ctx.text.slice(prefix.length) // чикчирикаем префикс
    let params = msgToParse.split(" ") // парсим строку
    let cmd = params[0] // получаем переменную
    // все остальные параметры - params[1], params[2] и так далее, в зависимости от того, что нужно сделать
}
так, я думаю будет удобнее работать с параметрами
вот, к примеру реализация простейшей команды, которая будет приветствовать пользователя(я не претендую на красивый код, давно писал, сам знаю что фигово написано, лучше промисом сделать)
JavaScript:
if(cmd == "get" && params[1].length != 0)
{
    let user
    await vk.api.users.get({user_ids: getIdFromString(params[1])}).then(res => {
        user = res
    })
    console.log(user[0].first_name)
    if(user)
    {
        ctx.send(`Hello, [id${user[0].id}|${user[0].first_name}]`)
    }
}
Очень заморочено, код у меня большой, и всё подстроить под это будет очень сложно потому-что регулярки у меня используется почти везде
 

Liquit

Активный
277
91
Очень заморочено, код у меня большой, и всё подстроить под это будет очень сложно потому-что регулярки у меня используется почти везде
ну переделай остальное, так код хотя бы становится более читабельней
 

molimawka

Известный
Друг
443
648
Очень заморочено, код у меня большой, и всё подстроить под это будет очень сложно потому-что регулярки у меня используется почти везде
тогда в чем проблема сделать так?
JavaScript:
bot.hear(/^(?:!test) (.*)$/i, msg => {
    const params = msg.$match[1].split(" ")
    msg.send(JSON.stringify(params))
})
Будет у тебя в params массив всех слов которые были указаны через пробел
 

Kecer

Участник
Автор темы
241
11
тогда в чем проблема сделать так?
JavaScript:
bot.hear(/^(?:!test) (.*)$/i, msg => {
    const params = msg.$match[1].split(" ")
    msg.send(JSON.stringify(params))
})
Будет у тебя в params массив всех слов которые были указаны через пробел
в таком случае оно в таком формате выводить, как это убрать?