 |

24.05.2022, 19:09
|
|
Участник форума
Регистрация: 05.12.2020
Сообщений: 241
С нами:
2862489
Репутация:
18
|
|
Как можно реализовать эту функцию только на примере базы данных mysql
JavaScript :
Код:
if
(
msg
.
$match
[
1
]
.
match
(
/\[id(.*)\|(.*)\]/i
)
)
{
var
u
=
users
.
filter
(
x
=>
x
.
id
==
Number
(
msg
.
$match
[
1
]
.
split
(
'[id'
)
[
1
]
.
split
(
'|'
)
[
0
]
)
)
[
0
]
}
кто не понял, эта функция ищет в json айди пользователя
Условно говоря я написал /setname @test_id Test_Name
и он фильтрует айди и ищет цифры этого айди, сам не знаю как это донести ибо в node js не так давно, но думаю не глупые люди поймут суть это функции, пользовался json как базой данных, но понял что это вообще не стабильная вещь и хочу перейти на mysql но меня останавливает то что я не понимаю как сделать похожу функцию только на примере mysql ибо уроков и чего-то подобного в инете толком нету  Надеюсь на вашу помощь. Заранее спасибо!
|
|
|

26.05.2022, 15:28
|
|
Участник форума
Регистрация: 23.04.2020
Сообщений: 278
С нами:
3188613
Репутация:
98
|
|
Ты хочешь это доставать из бд или туда добавлять?
Уточню, то есть, ты пишешь /setname @id name, и в бд добавляется, что чел с таким-то ид имеет такое имя?
|
|
|

26.05.2022, 16:46
|
|
Участник форума
Регистрация: 05.12.2020
Сообщений: 241
С нами:
2862489
Репутация:
18
|
|
Сообщение от Liquit
Ты хочешь это доставать из бд или туда добавлять?
Уточню, то есть, ты пишешь /setname @id name, и в бд добавляется, что чел с таким-то ид имеет такое имя?
Добавить, то-есть я пишу эту команду и он в бд этому челу присваивает ник, и потом как это же достать из бд, условно говоря написать /nickinfo @id и он мне выдаст ник этого чела
|
|
|

30.05.2022, 19:23
|
|
Участник форума
Регистрация: 05.12.2020
Сообщений: 241
С нами:
2862489
Репутация:
18
|
|
UP
|
|
|

02.06.2022, 11:00
|
|
Участник форума
Регистрация: 23.04.2020
Сообщений: 278
С нами:
3188613
Репутация:
98
|
|
значится
JavaScript :
Код:
const
{
VK
}
=
require
(
"vk-io"
)
;
const
config
=
require
(
"./config.json"
)
const
mysql
=
require
(
"mysql2/promise"
)
const
vk
=
new
VK
(
{
token
:
config
.
bot_token
}
)
let
connection
(
async
(
)
=>
{
connection
=
await
mysql
.
createConnection
(
{
host
:
"localhost"
,
user
:
"oleg"
,
password
:
"password"
,
database
:
"main"
}
)
}
)
(
)
vk
.
updates
.
on
(
"message_new"
,
async
ctx
=>
{
if
(
ctx
.
text
.
startsWith
(
"/"
)
&&
ctx
.
peerType
==
"chat"
)
// если не команда и мы в беседе(где он и должен работать)
{
ctx
.
text
+=
" "
// костыль хуле
let
args
=
ctx
.
text
.
match
(
/^\/(?\w+) \[id(?\d+)\|(?.+)](?.+)/
)
// чтобы это гавно работало(регулярка типа)
let
cmd
=
args
.
groups
.
cmd
;
// команда
let
id
=
args
.
groups
.
id
;
// ид юзера в упоминании
let
name
=
args
.
groups
.
name
// ник, [id123123|@w_aat] например
// ^ ^ ^ ^ ^
// это оно и есть
let
cargs
=
args
.
groups
.
args
.
slice
(
1
)
;
// .slice(1) режем костыль который бахнули на 22
let
user
=
`[id${id}|${name}]`
// для удобства хуле
if
(
cmd
==
"setnick"
)
{
let
res
=
await
connection
.
execute
(
`SELECT * from users WHERE (user_id = ? AND peer_id = ?)`
,
[
id
,
ctx
.
peerId
]
)
// чекаем есть ли там уже значение
if
(
res
[
0
]
.
length
==
0
)
{
// нету(эта либа возращает результат так:
/*
* res[0] = сам результат, массив(или единственное значение, как в нашем случае, потому что в одной беседе у пользователя может быть только один ник)
* res[1] = параметры запроса, нам они не нужны
* )*/
await
connection
.
execute
(
`INSERT INTO users (user_id, name, peer_id) VALUES (?, ?, ?)`
,
[
id
,
cargs
,
ctx
.
peerId
]
)
// добавляем значение, ибо его ещё нету
ctx
.
reply
(
`${user}'s nickname now${cargs}`
)
}
else
{
// значение есть, обновляем
await
connection
.
execute
(
"UPDATE users SET name = ?"
,
[
cargs
]
)
ctx
.
reply
(
`${user}'s nickname updated to${cargs}`
)
}
}
if
(
cmd
==
"getnick"
)
{
let
res
=
await
connection
.
execute
(
`SELECT * from users WHERE (user_id = ? AND peer_id = ?)`
,
[
id
,
ctx
.
peerId
]
)
// получаем все(в нашем случае единственное) значения(-е)
if
(
res
[
0
]
.
length
==
0
)
ctx
.
reply
(
`${user}doesn't have any nickname`
)
// вернуло res[0] = [], т.е. у пользователя нету ника
else
{
// у чела есть ник, выводим
ctx
.
reply
(
`${user}'s name is${res[0][0].name}`
)
}
}
}
}
)
vk
.
updates
.
start
(
)
это сам код, попытался все моменты расписать
вот схема таблицы:
можно добавлять свои столбцы, но для этого кода ничего более не нужно
код - говно, ибо писался на коленке, некоторые моменты можно улучшить, но это сделано чисто для примера
p.s. бд локальная, не ломайте пжпжпжж
|
|
|

03.06.2022, 12:07
|
|
Участник форума
Регистрация: 23.04.2020
Сообщений: 278
С нами:
3188613
Репутация:
98
|
|
нашёл ошибку, в 41 строке надо сделать так:
Код:
await connection.execute("UPDATE users SET name = ? WHERE (user_id = ? AND peer_id = ?)", [cargs, id, ctx.peerId])
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|