
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. бд локальная, не ломайте пжпжпжж
|
|
|