ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   Помогите с ботом вк (https://forum.antichat.xyz/showthread.php?t=1434027)

Kecer 24.05.2022 19:09

Как можно реализовать эту функцию только на примере базы данных 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 ибо уроков и чего-то подобного в инете толком нету :( Надеюсь на вашу помощь. Заранее спасибо!

Liquit 26.05.2022 15:28

Ты хочешь это доставать из бд или туда добавлять?

Уточню, то есть, ты пишешь /setname @id name, и в бд добавляется, что чел с таким-то ид имеет такое имя?

Kecer 26.05.2022 16:46

Цитата:

Сообщение от Liquit

Ты хочешь это доставать из бд или туда добавлять?

Уточню, то есть, ты пишешь /setname @id name, и в бд добавляется, что чел с таким-то ид имеет такое имя?

Добавить, то-есть я пишу эту команду и он в бд этому челу присваивает ник, и потом как это же достать из бд, условно говоря написать /nickinfo @id и он мне выдаст ник этого чела

Kecer 30.05.2022 19:23

UP

Liquit 02.06.2022 11:00

значится

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

Liquit 03.06.2022 12:07

нашёл ошибку, в 41 строке надо сделать так:

Код:

await connection.execute("UPDATE users SET name = ? WHERE (user_id = ? AND peer_id = ?)", [cargs, id, ctx.peerId])


Время: 07:51