Просмотр полной версии : бот вк
Добрый день, пишу бота вк и хотел бы найти замену на регулярные вырежния
JavaScript:
bot
.
hear
(
/^(?:!test) (.*)$/i
,
msg
=>
{
msg
.
send
(
`${msg.$match[1]}`
)
}
)
В общем проблема в том что когда я делаю 2 и более регулярных выражения, то-есть (.*) (.*) То в таком случае оно принимает одно слово, это и логично, но как сделать так что бы одно из регулярных выражений принимало несколько слов? без ограничений
с js особо не дружу
пример ввода:
!test string1 string2
регулярка:
^!test (\w+) (\w+)$
https://forum.antichat.xyz/attachments/27953838/
(.+)(%s+)(.+)
Го реально работает спасибки, ещё такой вопрос можно ли как-то проверку на эти регулярки сделать то есть допустим как пример
if(!msg.$match[2]) return msg.send('Вы не указали параметр')
регулярки может и удобно, но я предлагаю реализовать немного по удобнее, например так:
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}]`
)
}
}
регулярки может и удобно, но я предлагаю реализовать немного по удобнее, например так:
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}]`
)
}
}
Очень заморочено, код у меня большой, и всё подстроить под это будет очень сложно потому-что регулярки у меня используется почти везде
Очень заморочено, код у меня большой, и всё подстроить под это будет очень сложно потому-что регулярки у меня используется почти везде
ну переделай остальное, так код хотя бы становится более читабельней
(.+)(%s+)(.+)
поспешил я с выводами, оно так же криво работает как и работало ранее, мб чёто не так делаю можно пример?
feelzyourertry
24.01.2022, 19:31
мужики подобная ***ня приносит свои плоды в виде бабок?
мужики подобная ***ня приносит свои плоды в виде бабок?
Ты хочешь что бы я тебе заплатил денег за то что ты уделишь мне 3 - 4 минуты?
molimawka
24.01.2022, 20:23
Очень заморочено, код у меня большой, и всё подстроить под это будет очень сложно потому-что регулярки у меня используется почти везде
тогда в чем проблема сделать так?
JavaScript:
bot
.
hear
(
/^(?:!test) (.*)$/i
,
msg
=>
{
const
params
=
msg
.
$match
[
1
]
.
split
(
" "
)
msg
.
send
(
JSON
.
stringify
(
params
)
)
}
)
Будет у тебя в params массив всех слов которые были указаны через пробел
тогда в чем проблема сделать так?
JavaScript:
bot
.
hear
(
/^(?:!test) (.*)$/i
,
msg
=>
{
const
params
=
msg
.
$match
[
1
]
.
split
(
" "
)
msg
.
send
(
JSON
.
stringify
(
params
)
)
}
)
Будет у тебя в params массив всех слов которые были указаны через пробел
в таком случае оно в таком формате выводить, как это убрать?
molimawka
24.01.2022, 20:37
в таком случае оно в таком формате выводить, как это убрать?
Ты на каком уровне жс знаешь)) Какой формат вывода тебе надо?
в таком случае оно в таком формате выводить, как это убрать?
https://forum.antichat.xyz/attachments/27953984/
molimawka
24.01.2022, 20:38
Так спрашиваю, какой формат вывода тебе надо??
Так спрашиваю, какой формат вывода тебе надо??
как обычный текст
https://forum.antichat.xyz/attachments/27953989/
В приоритете у меня сделать команду кик с причиной, команда у меня уже есть, но когда я ввожу причину у меня вводится туда последнее слово, а первое слово вводится в msg.$match[1] то-есть туда где нужно указывать айди пользователя
molimawka
24.01.2022, 20:48
В приоритете у меня сделать команду кик с причиной, команда у меня уже есть, но когда я ввожу причину у меня вводится туда последнее слово, а первое слово вводится в 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}`
)
}
)
Можно так:
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}`
)
}
)
слушай, первый способ я так и делал примерно, он не очень хорошо работал, а вот второй это просто бомба, ты мне спас несколько лет моих мучений ОГРОМНОЕ ТЕБЕ СПАСИБО, если не сложно объясни что значит эти три константы в 2 способе, на будущее будет полезно, заранее тебе спасибки
neverlane
27.01.2022, 13:59
слушай, первый способ я так и делал примерно, он не очень хорошо работал, а вот второй это просто бомба, ты мне спас несколько лет моих мучений ОГРОМНОЕ ТЕБЕ СПАСИБО, если не сложно объясни что значит эти три константы в 2 способе, на будущее будет полезно, заранее тебе спасибки
params - аргументы в виде массива, разделенные пробелом
id - первый элемент из массива(он так же удалятся из массива)
reason - все остальные элементы массива соединенные пробелом с помощью join
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot